diff --git a/.backportrc.json b/.backportrc.json index d388b1554d817..a62729789a26c 100644 --- a/.backportrc.json +++ b/.backportrc.json @@ -3,6 +3,7 @@ "repoName": "kibana", "targetBranchChoices": [ "main", + "8.14", "8.13", "8.12", "8.11", @@ -50,7 +51,7 @@ "backport" ], "branchLabelMapping": { - "^v8.14.0$": "main", + "^v8.15.0$": "main", "^v(\\d+).(\\d+).\\d+$": "$1.$2" }, "autoMerge": true, diff --git a/.buildkite/pipeline-resource-definitions/kibana-es-serverless-snapshots.yml b/.buildkite/pipeline-resource-definitions/kibana-es-serverless-snapshots.yml index 0cbf4bad865d0..b4d0978ecdbf4 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-es-serverless-snapshots.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-es-serverless-snapshots.yml @@ -22,7 +22,7 @@ spec: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ES_SERVERLESS_IMAGE: latest ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' - allow_rebuilds: false + allow_rebuilds: true branch_configuration: main default_branch: main repository: elastic/kibana @@ -35,7 +35,7 @@ spec: trigger_mode: none build_tags: false prefix_pull_request_fork_branch_names: false - skip_pull_request_builds_for_existing_commits: true + skip_pull_request_builds_for_existing_commits: false teams: everyone: access_level: BUILD_AND_READ diff --git a/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml b/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml index 6691a460776ac..e76b32bd30532 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml @@ -21,8 +21,8 @@ spec: env: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' - allow_rebuilds: false - branch_configuration: main 8.13 7.17 + allow_rebuilds: true + branch_configuration: main 8.14 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/build.yml @@ -34,7 +34,7 @@ spec: trigger_mode: none build_tags: false prefix_pull_request_fork_branch_names: false - skip_pull_request_builds_for_existing_commits: true + skip_pull_request_builds_for_existing_commits: false teams: everyone: access_level: BUILD_AND_READ @@ -49,10 +49,10 @@ spec: cronline: 0 9 * * * America/New_York message: Daily build branch: main - Daily build (8.13): + Daily build (8.14): cronline: 0 9 * * * America/New_York message: Daily build - branch: '8.13' + branch: '8.14' Daily build (7.17): cronline: 0 9 * * * America/New_York message: Daily build @@ -81,8 +81,8 @@ spec: env: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' - allow_rebuilds: false - branch_configuration: main 8.13 7.17 + allow_rebuilds: true + branch_configuration: main 8.14 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/promote.yml @@ -94,7 +94,7 @@ spec: trigger_mode: none build_tags: false prefix_pull_request_fork_branch_names: false - skip_pull_request_builds_for_existing_commits: true + skip_pull_request_builds_for_existing_commits: false teams: everyone: access_level: BUILD_AND_READ @@ -128,8 +128,8 @@ spec: env: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' - allow_rebuilds: false - branch_configuration: main 8.13 7.17 + allow_rebuilds: true + branch_configuration: main 8.14 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/verify.yml @@ -141,7 +141,7 @@ spec: trigger_mode: none build_tags: false prefix_pull_request_fork_branch_names: false - skip_pull_request_builds_for_existing_commits: true + skip_pull_request_builds_for_existing_commits: false teams: everyone: access_level: BUILD_AND_READ diff --git a/.buildkite/pipeline-resource-definitions/kibana-flaky.yml b/.buildkite/pipeline-resource-definitions/kibana-flaky.yml new file mode 100644 index 0000000000000..82797c03f2378 --- /dev/null +++ b/.buildkite/pipeline-resource-definitions/kibana-flaky.yml @@ -0,0 +1,41 @@ +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: bk-kibana-flaky-test-suite-runner + description: ':warning: Trigger a new build here: https://ci-stats.kibana.dev/trigger_flaky_test_runner :warning:' + links: + - url: 'https://buildkite.com/elastic/kibana-flaky-test-suite-runner' + title: Pipeline link +spec: + type: buildkite-pipeline + owner: 'group:kibana-operations' + system: buildkite + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: kibana / flaky-test-suite-runner + description: ':warning: Trigger a new build here: https://ci-stats.kibana.dev/trigger_flaky_test_runner :warning:' + spec: + allow_rebuilds: true + default_branch: refs/pull/INSERT_PR_NUMBER/head + repository: elastic/kibana + pipeline_file: .buildkite/pipelines/flaky_tests/pipeline.sh + skip_intermediate_builds: false + provider_settings: + build_branches: true + build_pull_requests: false + publish_commit_status: false + trigger_mode: none + prefix_pull_request_fork_branch_names: false + skip_pull_request_builds_for_existing_commits: false + teams: + everyone: + access_level: BUILD_AND_READ + kibana-operations: + access_level: MANAGE_BUILD_AND_READ + appex-qa: + access_level: MANAGE_BUILD_AND_READ + kibana-tech-leads: + access_level: MANAGE_BUILD_AND_READ diff --git a/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml b/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml new file mode 100644 index 0000000000000..9171e5ba2008d --- /dev/null +++ b/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml @@ -0,0 +1,46 @@ +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: bk-kibana-on-merge-unsupported-ftrs + description: Runs unsupported ftr tests for each commit of Kibana + links: + - url: 'https://buildkite.com/elastic/kibana-on-merge-unsupported-ftrs' + title: Pipeline link +spec: + type: buildkite-pipeline + owner: 'group:kibana-operations' + system: buildkite + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: kibana / on merge unsupported ftrs + description: Runs unsupported ftr tests for each commit of Kibana + spec: + env: + SLACK_NOTIFICATIONS_CHANNEL: '#kibana-unsupported-ftrs-alerts' + ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' + allow_rebuilds: true + branch_configuration: main 8.14 7.17 + default_branch: main + repository: elastic/kibana + pipeline_file: .buildkite/pipelines/on_merge_unsupported_ftrs.yml + skip_intermediate_builds: false + provider_settings: + build_branches: false + build_pull_requests: false + publish_commit_status: false + trigger_mode: none + build_tags: false + prefix_pull_request_fork_branch_names: false + skip_pull_request_builds_for_existing_commits: false + teams: + everyone: + access_level: BUILD_AND_READ + kibana-operations: + access_level: MANAGE_BUILD_AND_READ + appex-qa: + access_level: MANAGE_BUILD_AND_READ + kibana-tech-leads: + access_level: MANAGE_BUILD_AND_READ diff --git a/.buildkite/pipeline-resource-definitions/locations.yml b/.buildkite/pipeline-resource-definitions/locations.yml index eae8124dfa28b..00e7c5b8fb91e 100644 --- a/.buildkite/pipeline-resource-definitions/locations.yml +++ b/.buildkite/pipeline-resource-definitions/locations.yml @@ -1,3 +1,4 @@ +# * This file is auto-updated by running fix-location-collection.ts * # apiVersion: backstage.io/v1alpha1 kind: Location metadata: @@ -10,7 +11,9 @@ spec: - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-es-serverless-snapshots.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-esql-grammar-sync.yml' + - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-flaky.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-migration-staging.yml' + - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-purge-cloud-deployments.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml' - 'https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/security-solution-ess/security-solution-ess.yml' diff --git a/.buildkite/pipelines/flaky_tests/pipeline.sh b/.buildkite/pipelines/flaky_tests/pipeline.sh index 40c7ebb98f308..353d507ae854d 100755 --- a/.buildkite/pipelines/flaky_tests/pipeline.sh +++ b/.buildkite/pipelines/flaky_tests/pipeline.sh @@ -5,4 +5,4 @@ set -euo pipefail UUID="$(cat /proc/sys/kernel/random/uuid)" export UUID -ts-node .buildkite/pipelines/flaky_tests/pipeline.ts | buildkite-agent pipeline upload +ts-node .buildkite/pipelines/flaky_tests/pipeline.ts diff --git a/.buildkite/pipelines/flaky_tests/pipeline.ts b/.buildkite/pipelines/flaky_tests/pipeline.ts index 34f6e41297861..63106c7fdeff2 100644 --- a/.buildkite/pipelines/flaky_tests/pipeline.ts +++ b/.buildkite/pipelines/flaky_tests/pipeline.ts @@ -31,6 +31,34 @@ if (Number.isNaN(concurrency)) { const BASE_JOBS = 1; const MAX_JOBS = 500; +// TODO: remove this after https://github.com/elastic/kibana-operations/issues/15 is finalized +/** This function bridges the agent targeting between gobld and kibana-buildkite agent targeting */ +const getAgentRule = (queueName: string = 'n2-4-spot') => { + if ( + process.env.BUILDKITE_AGENT_META_DATA_QUEUE === 'gobld' || + process.env.BUILDKITE_AGENT_META_DATA_PROVIDER === 'k8s' + ) { + const [kind, cores, addition] = queueName.split('-'); + const additionalProps = + { + spot: { preemptible: true }, + virt: { localSsdInterface: 'nvme', enableNestedVirtualization: true, localSsds: 1 }, + }[addition] || {}; + + return { + provider: 'gcp', + image: 'family/kibana-ubuntu-2004', + imageProject: 'elastic-images-qa', + machineType: `${kind}-standard-${cores}`, + ...additionalProps, + }; + } else { + return { + queue: queueName, + }; + } +}; + function getTestSuitesFromJson(json: string) { const fail = (errorMsg: string) => { console.error('+++ Invalid test config provided'); @@ -49,8 +77,10 @@ function getTestSuitesFromJson(json: string) { fail(`JSON test config must be an array`); } - /** @type {Array<{ type: 'group', key: string; count: number } | { type: 'ftrConfig', ftrConfig: string; count: number }>} */ - const testSuites = []; + const testSuites: Array< + | { type: 'group'; key: string; count: number } + | { type: 'ftrConfig'; ftrConfig: string; count: number } + > = []; for (const item of parsed) { if (typeof item !== 'object' || item === null) { fail(`testSuites must be objects`); @@ -73,6 +103,7 @@ function getTestSuitesFromJson(json: string) { } testSuites.push({ + type: 'ftrConfig', ftrConfig, count, }); @@ -84,6 +115,7 @@ function getTestSuitesFromJson(json: string) { fail(`testSuite.key must be a string`); } testSuites.push({ + type: 'group', key, count, }); @@ -117,7 +149,7 @@ const pipeline = { steps.push({ command: '.buildkite/scripts/steps/build_kibana.sh', label: 'Build Kibana Distribution and Plugins', - agents: { queue: 'c2-8' }, + agents: getAgentRule('c2-8'), key: 'build', if: "build.env('KIBANA_BUILD_ID') == null || build.env('KIBANA_BUILD_ID') == ''", }); @@ -127,7 +159,7 @@ for (const testSuite of testSuites) { continue; } - if (testSuite.ftrConfig) { + if (testSuite.type === 'ftrConfig') { steps.push({ command: `.buildkite/scripts/steps/test/ftr_configs.sh`, env: { @@ -138,9 +170,7 @@ for (const testSuite of testSuites) { concurrency, concurrency_group: process.env.UUID, concurrency_method: 'eager', - agents: { - queue: 'n2-4-spot-2', - }, + agents: getAgentRule('n2-4-spot'), depends_on: 'build', timeout_in_minutes: 150, cancel_on_build_failing: true, @@ -164,7 +194,7 @@ for (const testSuite of testSuites) { steps.push({ command: `.buildkite/scripts/steps/functional/${suiteName}.sh`, label: group.name, - agents: { queue: agentQueue }, + agents: getAgentRule(agentQueue), depends_on: 'build', timeout_in_minutes: 150, parallelism: testSuite.count, diff --git a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml index 712058fe71558..63ffb98d2858d 100644 --- a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml +++ b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml @@ -3,7 +3,10 @@ steps: label: Pre-Build timeout_in_minutes: 10 agents: - queue: kibana-default + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-2 retry: automatic: - exit_status: '*' @@ -12,7 +15,11 @@ steps: - command: .buildkite/scripts/steps/build_kibana.sh label: Build Kibana Distribution and Plugins agents: - queue: n2-16-spot + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-16 + preemptible: true key: build if: "build.env('KIBANA_BUILD_ID') == null || build.env('KIBANA_BUILD_ID') == ''" timeout_in_minutes: 60 @@ -24,7 +31,11 @@ steps: - command: .buildkite/scripts/steps/functional/apm_cypress.sh label: 'APM Cypress Tests' agents: - queue: n2-4-spot + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-4 + preemptible: true depends_on: build timeout_in_minutes: 120 retry: @@ -37,7 +48,11 @@ steps: - command: .buildkite/scripts/steps/functional/profiling_cypress.sh label: 'Profiling Cypress Tests' agents: - queue: n2-4-spot + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-4 + preemptible: true depends_on: build timeout_in_minutes: 120 retry: @@ -50,7 +65,11 @@ steps: - command: .buildkite/scripts/steps/functional/synthetics_plugin.sh label: 'Synthetics @elastic/synthetics Tests' agents: - queue: n2-4-spot + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-4 + preemptible: true depends_on: build timeout_in_minutes: 120 artifact_paths: @@ -65,7 +84,13 @@ steps: - command: .buildkite/scripts/steps/functional/defend_workflows.sh label: 'Defend Workflows Cypress Tests' agents: - queue: n2-4-virt + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + enableNestedVirtualization: true + localSsdInterface: nvme + localSsds: 1 + machineType: n2-standard-4 depends_on: build timeout_in_minutes: 60 parallelism: 20 @@ -77,7 +102,13 @@ steps: - command: .buildkite/scripts/steps/functional/defend_workflows_serverless.sh label: 'Defend Workflows Cypress Tests on Serverless' agents: - queue: n2-4-virt + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + enableNestedVirtualization: true + localSsdInterface: nvme + localSsds: 1 + machineType: n2-standard-4 depends_on: build timeout_in_minutes: 60 parallelism: 14 diff --git a/.buildkite/pipelines/upload_pipeline.yml b/.buildkite/pipelines/upload_pipeline.yml index 83daee197f9dd..f20dd1f60f7f7 100644 --- a/.buildkite/pipelines/upload_pipeline.yml +++ b/.buildkite/pipelines/upload_pipeline.yml @@ -2,4 +2,10 @@ steps: - label: Upload tested pipeline - command: buildkite-agent pipeline upload ${TESTED_PIPELINE_PATH:-.buildkite/pipelines/pipeline_to_test.yml} + command: | + if [[ $TESTED_PIPELINE_PATH == *.yml ]]; then + echo "Uploading pipeline $TESTED_PIPELINE_PATH" + buildkite-agent pipeline upload $TESTED_PIPELINE_PATH + else + $TESTED_PIPELINE_PATH | buildkite-agent pipeline upload + fi diff --git a/.buildkite/scripts/steps/checks/prettier_topology.sh b/.buildkite/scripts/steps/checks/prettier_topology.sh new file mode 100755 index 0000000000000..646e258572a45 --- /dev/null +++ b/.buildkite/scripts/steps/checks/prettier_topology.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/common/util.sh + +echo --- Check Prettier Configuration Topology +node scripts/prettier_topology_check diff --git a/.buildkite/scripts/steps/quick_checks.sh b/.buildkite/scripts/steps/quick_checks.sh index d96657ea70157..c9719e5c08fa9 100755 --- a/.buildkite/scripts/steps/quick_checks.sh +++ b/.buildkite/scripts/steps/quick_checks.sh @@ -22,3 +22,4 @@ export DISABLE_BOOTSTRAP_VALIDATION=false .buildkite/scripts/steps/checks/test_hardening.sh .buildkite/scripts/steps/checks/ftr_configs.sh .buildkite/scripts/steps/checks/yarn_deduplicate.sh +.buildkite/scripts/steps/checks/prettier_topology.sh diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4ff6638fa8350..e60f6f108c473 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -646,7 +646,7 @@ packages/kbn-repo-path @elastic/kibana-operations packages/kbn-repo-source-classifier @elastic/kibana-operations packages/kbn-repo-source-classifier-cli @elastic/kibana-operations packages/kbn-reporting/common @elastic/appex-sharedux -x-pack/examples/reporting_example @elastic/appex-sharedux +packages/kbn-reporting/get_csv_panel_actions @elastic/appex-sharedux packages/kbn-reporting/export_types/csv @elastic/appex-sharedux packages/kbn-reporting/export_types/csv_common @elastic/appex-sharedux packages/kbn-reporting/export_types/pdf @elastic/appex-sharedux @@ -663,6 +663,7 @@ x-pack/test/plugin_functional/plugins/resolver_test @elastic/security-solution examples/response_stream @elastic/ml-ui packages/kbn-rison @elastic/kibana-operations x-pack/plugins/rollup @elastic/kibana-management +packages/kbn-router-to-openapispec @elastic/kibana-core packages/kbn-router-utils @elastic/obs-ux-logs-team examples/routing_example @elastic/kibana-core packages/kbn-rrule @elastic/response-ops diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 4c6557b12b71c..c028bf2f375ad 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-04-16 +date: 2024-04-18 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 2682772430c2a..0d0656429bb4f 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index dd9fcc0e5e7d3..2119604c85beb 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 753cb4e9a9e07..aee9787fb8874 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-04-16 +date: 2024-04-18 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 c67914f694cc1..73f246b95136b 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -1865,7 +1865,7 @@ "label": "getKibanaPrivileges", "description": [], "signature": [ - "(({ consumer }: { consumer: string; }) => string[]) | undefined" + "((args: { consumer: string; producer: string; }) => string[]) | undefined" ], "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, @@ -1876,7 +1876,7 @@ "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1", "type": "Object", "tags": [], - "label": "{ consumer }", + "label": "args", "description": [], "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, @@ -1892,6 +1892,17 @@ "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1.producer", + "type": "string", + "tags": [], + "label": "producer", + "description": [], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false } ] } diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index fa2d741ee1085..eab14d144fbe3 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-04-16 +date: 2024-04-18 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 | |-------------------|-----------|------------------------|-----------------| -| 857 | 1 | 825 | 54 | +| 858 | 1 | 826 | 54 | ## Client diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 6805d93fbff25..05fe4879625a3 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -418,7 +418,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_apm_alert_details_context\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/transactions\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_obs_alert_details_context\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" ], "path": "x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -895,19 +895,19 @@ "APMDownstreamDependency", "[]; }>; } & ", "APMRouteCreateOptions", - "; \"GET /internal/apm/assistant/get_apm_alert_details_context\": { endpoint: \"GET /internal/apm/assistant/get_apm_alert_details_context\"; params?: ", + "; \"GET /internal/apm/assistant/get_obs_alert_details_context\": { endpoint: \"GET /internal/apm/assistant/get_obs_alert_details_context\"; params?: ", "TypeC", "<{ query: ", "IntersectionC", "<[", "TypeC", - "<{ 'service.name': ", - "StringC", - "; alert_started_at: ", + "<{ alert_started_at: ", "StringC", "; }>, ", "PartialC", - "<{ 'service.environment': ", + "<{ 'service.name': ", + "StringC", + "; 'service.environment': ", "StringC", "; 'transaction.type': ", "StringC", @@ -919,11 +919,11 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { query: { 'service.name': string; alert_started_at: string; } & { 'service.environment'?: string | undefined; 'transaction.type'?: string | undefined; 'transaction.name'?: string | undefined; 'host.name'?: string | undefined; 'container.id'?: string | undefined; }; }; }) => Promise<{ serviceSummary: ", + " & { params: { query: { alert_started_at: string; } & { 'service.name'?: string | undefined; 'service.environment'?: string | undefined; 'transaction.type'?: string | undefined; 'transaction.name'?: string | undefined; 'host.name'?: string | undefined; 'container.id'?: string | undefined; }; }; }) => Promise<{ serviceSummary?: ", "ServiceSummary", - "; downstreamDependencies: ", + " | undefined; downstreamDependencies?: ", "APMDownstreamDependency", - "[]; logCategories: ", + "[] | undefined; logCategories: ", "LogCategories", "; serviceChangePoints: { title: string; changes: ", "TimeseriesChangePoint", @@ -5231,6 +5231,28 @@ "MergedServiceTransactionGroupsResponse", ">; } & ", "APMRouteCreateOptions", + "; \"GET /internal/apm/transactions\": { endpoint: \"GET /internal/apm/transactions\"; params?: ", + "TypeC", + "<{ query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "TypeC", + "<{ transactionName: ", + "StringC", + "; serviceName: ", + "StringC", + "; }>]>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { query: { start: number; end: number; } & { transactionName: string; serviceName: string; }; }; }) => Promise<{ transaction: ", + "Transaction", + "; }>; } & ", + "APMRouteCreateOptions", "; \"GET /internal/apm/traces/{traceId}/spans/{spanId}\": { endpoint: \"GET /internal/apm/traces/{traceId}/spans/{spanId}\"; params?: ", "TypeC", "<{ path: ", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 4dd93ab59446f..28fa2538064ca 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-04-16 +date: 2024-04-18 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 16bfe8df9b6ee..c373f3547cd98 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-04-16 +date: 2024-04-18 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 f66c9ffea53cd..7c5f112259c2e 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-04-16 +date: 2024-04-18 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 c02a3e905774b..60417e5f5c368 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-04-16 +date: 2024-04-18 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 432ae9f1b8fc1..573504197f767 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-04-16 +date: 2024-04-18 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 3d6370c7533a7..295872b238db1 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-04-16 +date: 2024-04-18 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 709cfeb477377..74cff96c4f7f7 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-04-16 +date: 2024-04-18 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 31702aa3da8f8..8cc063a6c5b49 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-04-16 +date: 2024-04-18 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 0bb379b231113..8e157b47548e3 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-04-16 +date: 2024-04-18 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 a1aa24ced52b6..ea72bf3dd9eb5 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-04-16 +date: 2024-04-18 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 b000f0a95feed..8335aa5b25a5e 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-04-16 +date: 2024-04-18 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 601f99da1551c..f6147d725945f 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-04-16 +date: 2024-04-18 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 a8d9f30147289..b4bc6f7e5d641 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.devdocs.json b/api_docs/console.devdocs.json index 6859cc5db339c..402d842a5d536 100644 --- a/api_docs/console.devdocs.json +++ b/api_docs/console.devdocs.json @@ -359,7 +359,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "src/plugins/console/public/types/plugin_dependencies.ts", "deprecated": false, diff --git a/api_docs/console.mdx b/api_docs/console.mdx index bcc8c033ea4e9..894917330d5ec 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-04-16 +date: 2024-04-18 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 944e1167499bc..4639ce0b10e7d 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-04-16 +date: 2024-04-18 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 2d6fc53f67feb..afb94bb9cca73 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-04-16 +date: 2024-04-18 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 f754efba2fd32..2c49e63addf36 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-04-16 +date: 2024-04-18 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 ec3ac50e38752..3c8357887b886 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.devdocs.json b/api_docs/dashboard_enhanced.devdocs.json index 56c455e6df7ac..a2a75a84fb2fd 100644 --- a/api_docs/dashboard_enhanced.devdocs.json +++ b/api_docs/dashboard_enhanced.devdocs.json @@ -684,7 +684,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/plugins/dashboard_enhanced/public/plugin.ts", "deprecated": false, diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 8d13346503390..61a3188ea07be 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-04-16 +date: 2024-04-18 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 950fcc8d7b0ec..2ce80d50cff9b 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -15701,32 +15701,17 @@ { "parentPluginId": "data", "id": "def-server.IndexPatternsFetcher.Unnamed.$2", - "type": "boolean", - "tags": [], - "label": "allowNoIndices", - "description": [], - "signature": [ - "boolean" - ], - "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "data", - "id": "def-server.IndexPatternsFetcher.Unnamed.$3", - "type": "boolean", + "type": "Object", "tags": [], - "label": "rollupsEnabled", + "label": "optionalParams", "description": [], "signature": [ - "boolean" + "IndexPatternsFetcherOptionalParams | undefined" ], "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 48170e0b795bc..15194bc8400e6 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-04-16 +date: 2024-04-18 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 | |-------------------|-----------|------------------------|-----------------| -| 3288 | 31 | 2622 | 23 | +| 3287 | 31 | 2621 | 23 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 7eac46e39e539..5a7a07873e279 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-04-16 +date: 2024-04-18 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 | |-------------------|-----------|------------------------|-----------------| -| 3288 | 31 | 2622 | 23 | +| 3287 | 31 | 2621 | 23 | ## Client diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 6d21ae89c341c..09ae1d9f92b04 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-04-16 +date: 2024-04-18 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 | |-------------------|-----------|------------------------|-----------------| -| 3288 | 31 | 2622 | 23 | +| 3287 | 31 | 2621 | 23 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index e0598b1712072..0e5a50b8c6429 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-04-16 +date: 2024-04-18 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 d45734a9b6aae..0fda8f72367af 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-04-16 +date: 2024-04-18 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 c52aef0272be1..ac9498eb479b5 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-04-16 +date: 2024-04-18 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 99c362a2e14b2..7327b3d90e11b 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -10148,32 +10148,17 @@ { "parentPluginId": "dataViews", "id": "def-server.IndexPatternsFetcher.Unnamed.$2", - "type": "boolean", - "tags": [], - "label": "allowNoIndices", - "description": [], - "signature": [ - "boolean" - ], - "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "dataViews", - "id": "def-server.IndexPatternsFetcher.Unnamed.$3", - "type": "boolean", + "type": "Object", "tags": [], - "label": "rollupsEnabled", + "label": "optionalParams", "description": [], "signature": [ - "boolean" + "IndexPatternsFetcherOptionalParams | undefined" ], "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 431d2cd933531..f3e43dc66406d 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-04-16 +date: 2024-04-18 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 | |-------------------|-----------|------------------------|-----------------| -| 1070 | 0 | 370 | 4 | +| 1069 | 0 | 369 | 4 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index f16aea502610c..f4eeb4c993dc4 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.devdocs.json b/api_docs/dataset_quality.devdocs.json index 005fc660f306a..8b24872620a3a 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -151,6 +151,16 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { integration: string; }; }; }) => Promise<{ dashboards: { id: string; title: string; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", + "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: ", + "TypeC", + "<{ query: ", + "PartialC", + "<{ type: ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>; }> | undefined; handler: ({}: ", + "DatasetQualityRouteHandlerResources", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; }; }; }) => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; dashboards?: { id: string; title: string; }[] | undefined; })[]; }>; } & ", + "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/estimated_data\": { endpoint: \"GET /internal/dataset_quality/data_streams/estimated_data\"; params?: ", "TypeC", "<{ query: ", @@ -215,7 +225,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; dashboards?: { id: string; title: string; }[] | undefined; })[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT extends ", { @@ -260,6 +270,16 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { integration: string; }; }; }) => Promise<{ dashboards: { id: string; title: string; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", + "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: ", + "TypeC", + "<{ query: ", + "PartialC", + "<{ type: ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>; }> | undefined; handler: ({}: ", + "DatasetQualityRouteHandlerResources", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; }; }; }) => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; dashboards?: { id: string; title: string; }[] | undefined; })[]; }>; } & ", + "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/estimated_data\": { endpoint: \"GET /internal/dataset_quality/data_streams/estimated_data\"; params?: ", "TypeC", "<{ query: ", @@ -324,7 +344,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; dashboards?: { id: string; title: string; }[] | undefined; })[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", "ServerRouteCreateOptions", diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 5efc685fb429e..13fc07f124ea4 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 9b13c4ed423a8..a79348dea9bd7 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -17,7 +17,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| | | ml, stackAlerts | - | -| | uiActions, home, serverless, spaces, savedObjects, devTools, console, security, visualizations, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, dashboard, aiops, maps, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, licenseManagement, dataVisualizer, ml, fleet, indexManagement, crossClusterReplication, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, metricsDataAccess, exploratoryView, osquery, infra, monitoring, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, transform, upgradeAssistant, watcher, profiling, apm, observabilityOnboarding, synthetics, uptime, ux, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | +| | spaces, savedObjects, devTools, console, security, visualizations, expressionXY, lens, expressionMetricVis, expressionGauge, dashboard, aiops, maps, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, dataVisualizer, ml, fleet, crossClusterReplication, graph, grokdebugger, ingestPipelines, metricsDataAccess, osquery, infra, painlessLab, searchprofiler, newsfeed, securitySolution, transform, apm, observabilityOnboarding, filesManagement, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | @@ -28,7 +28,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | triggersActionsUi | - | -| | spaces, security, remoteClusters, savedObjectsTagging, triggersActionsUi, reporting, licenseManagement, indexManagement, crossClusterReplication, indexLifecycleManagement, ingestPipelines, rollup, snapshotRestore, upgradeAssistant, watcher | - | +| | spaces, security, triggersActionsUi, reporting | - | | | @kbn/core, visualizations, triggersActionsUi | - | | | ruleRegistry, securitySolution, synthetics, uptime, slo | - | | | alerting, discover, securitySolution | - | @@ -36,7 +36,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-api-server-internal, @kbn/core-saved-objects-import-export-server-internal, @kbn/core-saved-objects-server-internal, fleet, graph, lists, osquery, securitySolution, alerting | - | | | alerting, discover, securitySolution | - | | | securitySolution | - | -| | inspector, data, savedObjects, console, dataViewEditor, unifiedSearch, embeddable, licensing, security, visualizations, savedObjectsTagging, dataViewFieldEditor, lens, dashboard, observabilityShared, banners, maps, @kbn/reporting-public, reporting, timelines, fleet, telemetry, cloudSecurityPosture, runtimeFields, indexManagement, dashboardEnhanced, graph, exploratoryView, monitoring, securitySolution, synthetics, uptime, dataViewManagement, eventAnnotationListing, filesManagement, uiActions, visTypeVislib | - | +| | inspector, data, savedObjects, console, dataViewEditor, unifiedSearch, embeddable, licensing, security, visualizations, dataViewFieldEditor, lens, dashboard, observabilityShared, maps, @kbn/reporting-public, reporting, timelines, fleet, telemetry, cloudSecurityPosture, runtimeFields, indexManagement, dashboardEnhanced, graph, securitySolution, dataViewManagement, eventAnnotationListing, filesManagement, visTypeVislib | - | | | @kbn/securitysolution-data-table, securitySolution | - | | | @kbn/securitysolution-data-table, securitySolution | - | | | securitySolution | - | @@ -147,6 +147,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-lifecycle-browser-mocks, @kbn/core, @kbn/core-plugins-browser-internal | - | | | @kbn/core | - | | | @kbn/core-plugins-server-internal | - | +| | @kbn/reporting-csv-share-panel | - | | | security, aiops, licenseManagement, ml, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher, profiling, apm, slo | 8.8.0 | | | spaces, security, actions, alerting, aiops, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, osquery, securitySolution, painlessLab, rollup, searchprofiler, snapshotRestore, transform, upgradeAssistant | 8.8.0 | | | fleet, apm, security, securitySolution | 8.8.0 | @@ -216,7 +217,6 @@ Safe to remove. | | taskManager | | | @kbn/core-saved-objects-api-browser | | | @kbn/core-saved-objects-api-browser | -| | @kbn/reporting-public | | | @kbn/storybook | | | @kbn/ui-theme | | | @kbn/ui-theme | \ No newline at end of file diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 80ebf73b8c69c..e43f1a741c99b 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -340,6 +340,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/reporting-csv-share-panel + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [get_csv_panel_action.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx#:~:text=createImmediateReport), [get_csv_panel_action.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts#:~:text=createImmediateReport) | - | + + + ## @kbn/reporting-export-types-csv | Deprecated API | Reference location(s) | Remove By | @@ -451,14 +459,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## banners - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/banners/public/plugin.tsx#:~:text=toMountPoint), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/banners/public/plugin.tsx#:~:text=toMountPoint) | - | - - - ## canvas | Deprecated API | Reference location(s) | Remove By | @@ -534,9 +534,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/app/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/app/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/app/index.tsx#:~:text=KibanaThemeProvider) | - | +| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=theme%24) | - | @@ -736,8 +735,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [use_discover_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/hooks/use_discover_link.tsx#:~:text=indexPatternId) | - | -| | [add_to_case_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx#:~:text=toMountPoint), [add_to_case_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx#:~:text=toMountPoint) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts#:~:text=SavedObjectsStart), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/exploratory_view/public/application/types.ts#:~:text=SavedObjectsStart) | - | @@ -934,7 +931,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/application.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/plugin.ts#:~:text=savedObjects) | - | | | [kibana_services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/kibana_services.ts#:~:text=SavedObjectsClientContract), [kibana_services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/kibana_services.ts#:~:text=SavedObjectsClientContract) | - | | | [home_app.js](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/components/home_app.js#:~:text=bulkCreate) | - | @@ -954,9 +950,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/server/services/license.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/public/plugin.tsx#:~:text=theme%24) | - | @@ -965,8 +959,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [use_datastreams_rollover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx#:~:text=toMountPoint), [use_datastreams_rollover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx#:~:text=toMountPoint) | - | -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | -| | [mount_management_section.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/mount_management_section.ts#:~:text=theme%24) | - | @@ -983,8 +975,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | -| | [mount_management_section.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts#:~:text=theme%24) | - | +| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | @@ -1010,7 +1001,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=KibanaThemeProvider) | - | | | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=appBasePath) | 8.8.0 | @@ -1052,9 +1042,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/shared_imports.ts#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/application/app_providers.tsx#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/application/app_providers.tsx#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/application/app_providers.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=theme%24) | - | @@ -1170,8 +1158,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [url_state.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/url_state.ts#:~:text=syncQueryStateWithUrl), [url_state.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/url_state.ts#:~:text=syncQueryStateWithUrl) | - | -| | [use_request_error_handler.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx#:~:text=toMountPoint), [use_request_error_handler.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx#:~:text=toMountPoint), [use_request_error_handler.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx#:~:text=toMountPoint), [alerts_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx#:~:text=toMountPoint), [alerts_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx#:~:text=toMountPoint), [ingest_pipeline_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx#:~:text=toMountPoint), [ingest_pipeline_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx#:~:text=toMountPoint), [listing.js](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js#:~:text=toMountPoint), [listing.js](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js#:~:text=toMountPoint), [listing.js](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js#:~:text=toMountPoint) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/monitoring/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | @@ -1234,7 +1220,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/app.tsx#:~:text=KibanaThemeProvider) | - | | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/components/contexts/license/license_context.tsx#:~:text=license%24) | 8.8.0 | @@ -1243,9 +1228,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/server/plugin.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/public/plugin.ts#:~:text=theme%24) | - | @@ -1268,9 +1251,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/public/shared_imports.ts#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/public/application.tsx#:~:text=KibanaThemeProvider) | - | | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/server/services/license.ts#:~:text=license%24) | 8.8.0 | -| | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/public/application.tsx#:~:text=theme%24) | - | @@ -1329,9 +1310,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [open_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx#:~:text=toMountPoint), [open_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx#:~:text=toMountPoint), [open_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx#:~:text=toMountPoint), [open_assign_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/components/assign_flyout/open_assign_flyout.tsx#:~:text=toMountPoint), [open_assign_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/components/assign_flyout/open_assign_flyout.tsx#:~:text=toMountPoint) | - | -| | [mount_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx#:~:text=KibanaThemeProvider), [mount_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx#:~:text=KibanaThemeProvider), [mount_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx#:~:text=KibanaThemeProvider) | - | -| | [mount_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx#:~:text=theme%24) | - | | | [request_handler_context.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/server/request_handler_context.ts#:~:text=authz) | - | | | [get_table_column_definition.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx#:~:text=SavedObject), [get_table_column_definition.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx#:~:text=SavedObject), [get_table_column_definition.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/types.ts#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/types.ts#:~:text=SavedObject), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.ts#:~:text=SavedObject), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.ts#:~:text=SavedObject), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.test.ts#:~:text=SavedObject), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.test.ts#:~:text=SavedObject), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.test.ts#:~:text=SavedObject)+ 3 more | - | | | [get_table_column_definition.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx#:~:text=SavedObjectReference), [get_table_column_definition.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/ui_api/get_table_column_definition.tsx#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/common/references.ts#:~:text=SavedObjectReference), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/saved_objects_tagging/public/utils.ts#:~:text=SavedObjectReference)+ 12 more | - | @@ -1421,7 +1399,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider) | - | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | -| | [create_threat_signals.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24) | 8.8.0 | +| | [get_is_alert_suppression_active.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24), [create_threat_signals.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24) | 8.8.0 | | | [request_context_factory.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/request_context_factory.ts#:~:text=authc), [route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts#:~:text=authc), [create_signals_migration_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/create_signals_migration_route.ts#:~:text=authc), [delete_signals_migration_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/delete_signals_migration_route.ts#:~:text=authc), [finalize_signals_migration_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/finalize_signals_migration_route.ts#:~:text=authc), [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts#:~:text=authc) | - | | | [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) | - | @@ -1451,14 +1429,6 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ -## serverless - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless/public/plugin.tsx#:~:text=KibanaThemeProvider) | - | - - - ## share | Deprecated API | Reference location(s) | Remove By | @@ -1481,9 +1451,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/public/shared_imports.ts#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx#:~:text=KibanaThemeProvider), [app_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx#:~:text=KibanaThemeProvider) | - | | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/server/services/license.ts#:~:text=license%24) | 8.8.0 | -| | [mount_management_section.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/public/application/mount_management_section.ts#:~:text=theme%24) | - | @@ -1520,8 +1488,6 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | ---------------|-----------|-----------| | | [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts#:~:text=alertFactory), [message_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts#:~:text=alertFactory), [tls_rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts#:~:text=alertFactory), [monitor_status_rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts#:~:text=alertFactory) | - | | | [stderr_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx#:~:text=indexPatternId) | - | -| | [toast_title.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx#:~:text=toMountPoint), [toast_title.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx#:~:text=toMountPoint), [browser_test_results.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx#:~:text=toMountPoint), [browser_test_results.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_monitor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint), [delete_param.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx#:~:text=toMountPoint)+ 6 more | - | -| | [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider), [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider), [synthetics_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx#:~:text=KibanaThemeProvider) | - | | | [synthetics_monitor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/saved_objects/synthetics_monitor.ts#:~:text=migrations) | - | @@ -1572,15 +1538,6 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ -## uiActions - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [hello_world_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx#:~:text=toMountPoint), [hello_world_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx#:~:text=toMountPoint) | - | -| | [open_context_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx#:~:text=KibanaThemeProvider), [open_context_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx#:~:text=KibanaThemeProvider), [open_context_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx#:~:text=KibanaThemeProvider) | - | - - - ## uiActionsEnhanced | Deprecated API | Reference location(s) | Remove By | @@ -1604,9 +1561,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/public/shared_imports.ts#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/public/application/app.tsx#:~:text=KibanaThemeProvider) | - | | | [reindex_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/public/plugin.ts#:~:text=theme%24) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/common/types.ts#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/common/types.ts#:~:text=SavedObject) | - | @@ -1616,20 +1571,10 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/common.ts#:~:text=alertFactory), [status_check.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.ts#:~:text=alertFactory), [tls.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/tls.ts#:~:text=alertFactory), [duration_anomaly.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/duration_anomaly.ts#:~:text=alertFactory) | - | -| | [alert_messages.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx#:~:text=toMountPoint), [alert_messages.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint), [ml_flyout_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx#:~:text=toMountPoint) | - | -| | [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider), [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider), [uptime_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx#:~:text=KibanaThemeProvider) | - | | | [uptime_settings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/saved_objects/uptime_settings.ts#:~:text=migrations) | - | -## ux - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [ux_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx#:~:text=KibanaThemeProvider), [ux_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx#:~:text=KibanaThemeProvider), [ux_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx#:~:text=KibanaThemeProvider) | - | - - - ## visDefaultEditor | Deprecated API | Reference location(s) | Remove By | @@ -1727,6 +1672,4 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/application/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=theme%24) | - | \ No newline at end of file +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | \ No newline at end of file diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 001cfa60fe7a8..149a20b85edbe 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -16,8 +16,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| kibanaOverview | | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=appBasePath) | 8.8.0 | | savedObjectsTaggingOss | | [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_tagging_oss/public/api.ts#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_tagging_oss/public/decorator/types.ts#:~:text=SavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_tagging_oss/public/decorator/types.ts#:~:text=SavedObject), [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_tagging_oss/public/api.ts#:~:text=SavedObject), [api.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects_tagging_oss/public/api.ts#:~:text=SavedObject) | 8.8.0 | +| kibanaOverview | | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/kibana_overview/public/application.tsx#:~:text=appBasePath) | 8.8.0 | @@ -69,8 +69,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| licenseManagement | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | -| indexLifecycleManagement | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/server/services/license.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/server/services/license.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/server/services/license.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/server/services/license.ts#:~:text=license%24), [reindex_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24) | 8.8.0 | +| crossClusterReplication | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | +| painlessLab | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/server/services/license.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/server/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/server/services/license.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/server/services/license.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/server/services/license.ts#:~:text=license%24), [reindex_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24) | 8.8.0 | | management | | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/management/public/application.tsx#:~:text=appBasePath) | 8.8.0 | @@ -173,4 +173,4 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | --------|-------|-----------|-----------| | securitySolution | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | | securitySolution | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | -| securitySolution | | [create_threat_signals.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24) | 8.8.0 | \ No newline at end of file +| securitySolution | | [get_is_alert_suppression_active.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24), [create_threat_signals.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24) | 8.8.0 | \ No newline at end of file diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 04d0b57804ba3..c190359f7471e 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-04-16 +date: 2024-04-18 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 6be8ea856358f..c1ba9e0e85c51 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-04-16 +date: 2024-04-18 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 2886a8aae1852..2472915e717f4 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-04-16 +date: 2024-04-18 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 e2a48e0c364d9..29e7f05bdf843 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index a2cc0997a51fe..26f70dd454243 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -224,7 +224,8 @@ "label": "chain", "description": [], "signature": [ - "RetrievalQAChain" + "RetrievalQAChain", + " | undefined" ], "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, @@ -1466,6 +1467,23 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.llm", + "type": "CompoundType", + "tags": [], + "label": "llm", + "description": [], + "signature": [ + "ActionsClientLlm", + " | ", + "ActionsClientChatOpenAI", + " | undefined" + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.modelExists", @@ -1538,7 +1556,7 @@ "section": "def-common.KibanaRequest", "text": "KibanaRequest" }, - "" + " | undefined; }, any>" ], "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 87b015bc28d0a..fbf061f0ea72c 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 44 | 0 | 30 | 0 | +| 45 | 0 | 31 | 0 | ## Server diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index b34e8363c4b39..14f4a98e84464 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-04-16 +date: 2024-04-18 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 46190c125a1e0..afc40e6001ab7 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-04-16 +date: 2024-04-18 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 5197142937b66..891871a1052bf 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-04-16 +date: 2024-04-18 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 13f6af3d6b7e5..c51a3792afcda 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-04-16 +date: 2024-04-18 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 47f90c187ae50..f9a57b0a2b338 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index ab0b0a7a46a19..16aeae7f60273 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index cde53f8b837af..530dadbb93b04 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-04-16 +date: 2024-04-18 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 2f0d514c8ba5d..623dd2b99f0c8 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json index c497dbbb713bf..80f8f25a04aef 100644 --- a/api_docs/exploratory_view.devdocs.json +++ b/api_docs/exploratory_view.devdocs.json @@ -879,7 +879,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts", "deprecated": false, diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index efe5372257aed..74cc86ccbaffa 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-04-16 +date: 2024-04-18 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 971c637b19a8f..06f16f95700d8 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-04-16 +date: 2024-04-18 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 456b96810ee2d..44644b467f682 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-04-16 +date: 2024-04-18 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 614a33c146ca3..81230628126ff 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-04-16 +date: 2024-04-18 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 790abc9fbd8fe..6e5b15746ce1b 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-04-16 +date: 2024-04-18 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 19b2211595ac0..b1b2a1089455d 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-04-16 +date: 2024-04-18 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 94dac37366a85..73e3c17708610 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-04-16 +date: 2024-04-18 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 9863a545a4e2f..919cfa0ee1501 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-04-16 +date: 2024-04-18 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 1285f33271512..e7ed4c9a34dec 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-04-16 +date: 2024-04-18 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 4988acc0fbd4f..a5c87285fbe1f 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-04-16 +date: 2024-04-18 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 0df71c653cdc6..8bf6c5a71ede8 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-04-16 +date: 2024-04-18 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 12a02199813a1..288a3127e4098 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-04-16 +date: 2024-04-18 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 11fab1013d0f0..0fd23e1b9bbe9 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-04-16 +date: 2024-04-18 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 1998ff7f16153..d633dcccfd76d 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-04-16 +date: 2024-04-18 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 f4655f8b220b6..e517f1134eb4c 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-04-16 +date: 2024-04-18 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 e2c7599b491f1..682b83ff4b38b 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-04-16 +date: 2024-04-18 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 dddf75ec1b75e..28ca224263052 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-04-16 +date: 2024-04-18 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 364171e0903f4..e451a4033f022 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-04-16 +date: 2024-04-18 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 14ebb2b1d2b51..a350da2b369f1 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-04-16 +date: 2024-04-18 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 9236d059bc3a1..24ad219eec0f4 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-04-16 +date: 2024-04-18 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 90946218d5816..3a2515102e21b 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-04-16 +date: 2024-04-18 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 40b613b5a629d..e48dccf6d7e2e 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-04-16 +date: 2024-04-18 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 9cf07fabbf04b..29bf5c526d556 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-04-16 +date: 2024-04-18 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 b507368e758d3..1928095fff4a7 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-04-16 +date: 2024-04-18 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 562595a295694..a0333b180fdde 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-04-16 +date: 2024-04-18 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 ef621fd1d4753..02ab749f3ec67 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-04-16 +date: 2024-04-18 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 d3415b4088948..8bccc62ac32e9 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index aa3c2e6b12731..4946995d52eeb 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 6a68f3f10cca6..fa29e3846590e 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index f8e661136f244..a33ccc389cd3c 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-04-16 +date: 2024-04-18 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 662b45064f201..2465f1019df5c 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-04-16 +date: 2024-04-18 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 d65c2e0a871c6..5340a6e9ef9ab 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 3204602540f24..51952968a4250 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index bae4b44990212..e48c825efa279 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index ed0ccf7346250..657638b2066c7 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 6e65644b8edc0..2926961fa4ebd 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index f0b3aebc09ad2..7be4607e3c20c 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-04-16 +date: 2024-04-18 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 4d0a4c8fd8349..43c8ca3131565 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 881f8316f9ab0..d52d3063bd681 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 02088416dc820..437fbda0d6c01 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index 56e47f5ab20ec..35919a872504b 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -1557,6 +1557,445 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterContextType", + "type": "Interface", + "tags": [], + "label": "FilterContextType", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterContextType.allControls", + "type": "Array", + "tags": [], + "label": "allControls", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + "[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterContextType.addControl", + "type": "Function", + "tags": [], + "label": "addControl", + "description": [], + "signature": [ + "(controls: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + ") => void" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterContextType.addControl.$1", + "type": "CompoundType", + "tags": [], + "label": "controls", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps", + "type": "Interface", + "tags": [], + "label": "FilterGroupProps", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterGroupProps", + "text": "FilterGroupProps" + }, + " extends Pick<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlGroupInput", + "text": "ControlGroupInput" + }, + ", \"query\" | \"filters\" | \"timeRange\" | \"chainingSystem\">" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.spaceId", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.dataViewId", + "type": "CompoundType", + "tags": [], + "label": "dataViewId", + "description": [], + "signature": [ + "string | null" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.featureIds", + "type": "Array", + "tags": [], + "label": "featureIds", + "description": [], + "signature": [ + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.AlertConsumers", + "text": "AlertConsumers" + }, + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.onFiltersChange", + "type": "Function", + "tags": [], + "label": "onFiltersChange", + "description": [ + "\nFilters changed callback" + ], + "signature": [ + "((newFilters: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[]) => void) | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.onFiltersChange.$1", + "type": "Array", + "tags": [], + "label": "newFilters", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.defaultControls", + "type": "Array", + "tags": [], + "label": "defaultControls", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.controlsUrlState", + "type": "Array", + "tags": [], + "label": "controlsUrlState", + "description": [ + "\nThe controls configuration stored in the URL\n(takes precedence over the localStorage configuration)" + ], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + "[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.setControlsUrlState", + "type": "Function", + "tags": [], + "label": "setControlsUrlState", + "description": [ + "\nSetter for the controls url state" + ], + "signature": [ + "((controls: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + "[]) => void) | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.setControlsUrlState.$1", + "type": "Array", + "tags": [], + "label": "controls", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "common", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-common.FilterControlConfig", + "text": "FilterControlConfig" + }, + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.onInit", + "type": "Function", + "tags": [], + "label": "onInit", + "description": [ + "\nInit callback" + ], + "signature": [ + "((controlGroupHandler: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupContainer", + "text": "ControlGroupContainer" + }, + " | undefined) => void) | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.onInit.$1", + "type": "Object", + "tags": [], + "label": "controlGroupHandler", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupContainer", + "text": "ControlGroupContainer" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.maxControls", + "type": "number", + "tags": [], + "label": "maxControls", + "description": [ + "\nMaximum number of controls that can be added to the group" + ], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.ControlGroupRenderer", + "type": "Function", + "tags": [], + "label": "ControlGroupRenderer", + "description": [ + "\nThe control embeddable renderer" + ], + "signature": [ + "React.ForwardRefExoticComponent<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupRendererProps", + "text": "ControlGroupRendererProps" + }, + " & React.RefAttributes<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.AwaitingControlGroupAPI", + "text": "AwaitingControlGroupAPI" + }, + ">>" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.ControlGroupRenderer.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupProps.Storage", + "type": "Object", + "tags": [], + "label": "Storage", + "description": [], + "signature": [ + "typeof ", + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.Storage", + "text": "Storage" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-common.UseAlertDataViewProps", @@ -2092,7 +2531,75 @@ } ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterControlConfig", + "type": "Type", + "tags": [], + "label": "FilterControlConfig", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.AddOptionsListControlProps", + "text": "AddOptionsListControlProps" + }, + ", \"dataViewId\" | \"controlId\"> & { persist?: boolean | undefined; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterGroupHandler", + "type": "Type", + "tags": [], + "label": "FilterGroupHandler", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupContainer", + "text": "ControlGroupContainer" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.FilterUrlFormat", + "type": "Type", + "tags": [], + "label": "FilterUrlFormat", + "description": [], + "signature": [ + "{ [x: string]: Pick<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.OptionsListEmbeddableInput", + "text": "OptionsListEmbeddableInput" + }, + ", \"selectedOptions\" | \"title\" | \"fieldName\" | \"existsSelected\" | \"exclude\">; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [ { "parentPluginId": "@kbn/alerts-ui-shared", diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 762d96fc59256..c2abc28bf3299 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.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 | |-------------------|-----------|------------------------|-----------------| -| 87 | 0 | 82 | 2 | +| 110 | 0 | 98 | 2 | ## Common @@ -34,3 +34,6 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o ### Interfaces +### Consts, variables and types + + diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 6faf12980d8ca..e1ee7de554386 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 6ad9c7a1c5690..94ca8c671c147 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -696,7 +696,7 @@ }, { "plugin": "@kbn/core-root-server-internal", - "path": "packages/core/root/core-root-server-internal/src/server.ts" + "path": "packages/core/root/core-root-server-internal/src/events/kibana_started.ts" }, { "plugin": "security", diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 2a2ae8761b880..03e90043c02ed 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index a68a7255ded0b..da1b936db250f 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index dc37c40e81c85..95177f64fa7e0 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 d674f194aa179..561fe005072f3 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-04-16 +date: 2024-04-18 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 b97cee01c2040..3f7dd880df0d7 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-04-16 +date: 2024-04-18 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 a3210c0c9dc51..86cdff29a9370 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 7d697f7ff541a..9fe37523e1d2f 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 0032224f48207..761952ca88304 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 3bacffcf79f6c..d28bd7b8e7624 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index b2ea4ef7f6c18..1ff11dbf490dd 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-04-16 +date: 2024-04-18 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 e37b6c707b531..9a890c86b4209 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 29386f94ac994..ff08c102cadaf 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 86c83a95e74d8..9392d3c90673d 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 2f61eaadd3422..657dc7c0397cd 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index c6b261ee811fe..6f74447b97911 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 489c037d66467..49895923c23fc 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-04-16 +date: 2024-04-18 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 479d505811ebe..7cae305fa388c 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-04-16 +date: 2024-04-18 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 2cb9cfa9aa9da..02db85b7a7315 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-04-16 +date: 2024-04-18 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 5fb284c5ba111..3ae733f5417a8 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-04-16 +date: 2024-04-18 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 92c187a023206..e3aa356961cc4 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-04-16 +date: 2024-04-18 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 b1828084c578e..061b2bb470b62 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-04-16 +date: 2024-04-18 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 8d6cc20d75147..319313d53d6d0 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-04-16 +date: 2024-04-18 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 2aeabb9ddc9d6..625adc7053032 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-04-16 +date: 2024-04-18 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 610d3d6a5bd96..aa591a5dd2552 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 4cb14adc7fe98..6855df2490660 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 4bceb94b01be7..6a9fef42df57a 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index ced8870b348d5..ea7cb3da9c932 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-04-16 +date: 2024-04-18 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 1afe69c2304bd..d585fd549f6cd 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-04-16 +date: 2024-04-18 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 6791a0512a810..185b5f12d81e7 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.devdocs.json b/api_docs/kbn_config_schema.devdocs.json index 2a6b482c1a98e..7d311ed14d483 100644 --- a/api_docs/kbn_config_schema.devdocs.json +++ b/api_docs/kbn_config_schema.devdocs.json @@ -1225,6 +1225,26 @@ ], "returnComment": [] }, + { + "parentPluginId": "@kbn/config-schema", + "id": "def-common.Type.getSchema", + "type": "Function", + "tags": [ + "note" + ], + "label": "getSchema", + "description": [], + "signature": [ + "() => ", + "AnySchema", + "" + ], + "path": "packages/kbn-config-schema/src/types/type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "@kbn/config-schema", "id": "def-common.Type.getSchemaStructure", @@ -1967,7 +1987,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2057,7 +2077,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2139,7 +2159,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2213,7 +2233,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2279,7 +2299,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2337,7 +2357,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2387,7 +2407,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2429,7 +2449,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2463,7 +2483,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2489,7 +2509,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2507,7 +2527,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -2610,7 +2630,7 @@ "label": "metaFields", "description": [], "signature": [ - "{ readonly META_FIELD_X_OAS_OPTIONAL: \"x-oas-optional\"; readonly META_FIELD_X_OAS_MAX_LENGTH: \"x-oas-max-length\"; readonly META_FIELD_X_OAS_MIN_LENGTH: \"x-oas-min-length\"; readonly META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES: \"x-oas-get-additional-properties\"; }" + "{ readonly META_FIELD_X_OAS_REF_ID: \"x-oas-ref-id\"; readonly META_FIELD_X_OAS_OPTIONAL: \"x-oas-optional\"; readonly META_FIELD_X_OAS_MAX_LENGTH: \"x-oas-max-length\"; readonly META_FIELD_X_OAS_MIN_LENGTH: \"x-oas-min-length\"; readonly META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES: \"x-oas-get-additional-properties\"; }" ], "path": "packages/kbn-config-schema/index.ts", "deprecated": false, @@ -3615,7 +3635,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -3705,7 +3725,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -3787,7 +3807,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -3861,7 +3881,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -3927,7 +3947,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -3985,7 +4005,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -4035,7 +4055,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -4077,7 +4097,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -4111,7 +4131,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -4137,7 +4157,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", @@ -4155,7 +4175,7 @@ "text": "Type" }, "], options?: ", - "TypeOptions", + "UnionTypeOptions", " | undefined): ", { "pluginId": "@kbn/config-schema", diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 78573f6b23711..e03bcae439182 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 141 | 3 | 138 | 18 | +| 142 | 3 | 139 | 19 | ## Common diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index a7e178e102537..aa1759ca8a3a9 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-04-16 +date: 2024-04-18 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 69ccadfa1f4a2..0bd132a5fa88f 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-04-16 +date: 2024-04-18 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 5435ee220e310..648768b1def5d 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 77936b6c07c58..ee61abbe9ddb5 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 398c4d32699fc..2496211d38d07 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index c3de7d3ba3fac..e20235baf2268 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index dc07f0a72cfb9..1e8865eb274ef 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 89a9f79ece6ea..906019db4240d 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 2be56716ae045..d1d015187a5c7 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 fb40e5169d177..e761d23089b58 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-04-16 +date: 2024-04-18 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 795076e600680..65933bdaf3f9a 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 4fadbf427ce6d..fe047f8569640 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 43b0b1727c65f..1f75d3b6ed2f7 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 3095dc3f3ef14..050222adfd9e1 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 e9334b3ad0751..a2b15c6d64480 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 e8d7e0037198c..0a3bef8fb69b6 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-04-16 +date: 2024-04-18 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 4af4e238e016e..a54d1065e9c4c 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 4a495391bbd4e..c75eb0727e0c4 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 da31e87dd1c22..0b71f969978aa 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 7d1588983c817..5928c2c16a67f 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 5f1093518b838..6c6f2b97f6c04 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-04-16 +date: 2024-04-18 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 b71a81bcdcd9a..c9cf406c012fa 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 14648ce3da729..1c3338bd6e19d 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 81956c454929d..41dd61ef5a341 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 2c0e572af9ffc..6f14183468b90 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-04-16 +date: 2024-04-18 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 b21277f3b15b7..544582c76cbca 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-04-16 +date: 2024-04-18 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 822ba259da0e1..635bfe0eee592 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index d4143851021b9..92ad8564a486c 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3696,7 +3696,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"metrics\" | \"management\" | \"synthetics\" | \"ux\" | \"apm\" | \"logs\" | \"profiling\" | \"dashboards\" | \"observabilityAIAssistant\" | \"home\" | \"canvas\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchContent:playground\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"observability-logs-explorer\" | \"observabilityOnboarding\" | \"slo\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:rules\" | \"observability-overview:alerts\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"profiling:functions\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"metrics\" | \"management\" | \"synthetics\" | \"ux\" | \"apm\" | \"logs\" | \"profiling\" | \"dashboards\" | \"observabilityAIAssistant\" | \"home\" | \"canvas\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchContent:playground\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"observability-logs-explorer\" | \"observabilityOnboarding\" | \"slo\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:rules\" | \"observability-overview:alerts\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"profiling:functions\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:ai_insights\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index da9d1abd784cd..f751ad2d16dce 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 733fdc29d69f6..5ef355b64fcf9 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 6dcd9ea9c66ff..93effaa5fdffa 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 5698c8eadeebd..52f62c607bc5f 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 19c6bb43f1ea2..0548484b46ec6 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 5daa2408bb661..637f4e603ba40 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 5090699632e37..2a730211c63f0 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-04-16 +date: 2024-04-18 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 03a618ad8c713..eae28bdbe6368 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-04-16 +date: 2024-04-18 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 3f65a8a6fc48e..afa0ba077ee5f 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 7609537798d66..c9284ac4affe1 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 9868ab0d804d3..583285b892d35 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 43981dbb917ce..bc2735c152c42 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 e79ed028d74ae..7be236c35bc46 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 6c1d99b8f4fe0..c46902bfe65e6 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-04-16 +date: 2024-04-18 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 f18a81cd7d0de..4e1a844e9c4b8 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-04-16 +date: 2024-04-18 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 b143345c48fa9..68cc36f2a5c9c 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 a0f96eb1cf79f..2fd3b88c69976 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 c1bcbb0740b57..81c7eace0f244 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 28d626a31e993..8943f318600df 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 5c87a7782b80b..b66eb8c1c065d 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-04-16 +date: 2024-04-18 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 18775f6939ac8..207ce147db769 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 eaeeb1b7493f5..0e3a9db1b1f86 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 20ab15d087647..642fb7be783bb 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 ac2cd884d1523..5bbdd1e3a2359 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-04-16 +date: 2024-04-18 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 7acefe3e4807d..0f3f65422f94a 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server_mocks.devdocs.json index 45ce3bb04cd1e..53450841d1a34 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server_mocks.devdocs.json @@ -125,6 +125,20 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/core-elasticsearch-server-mocks", + "id": "def-common.elasticsearchServiceMock.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/elasticsearch/core-elasticsearch-server-mocks/src/elasticsearch_service.mock.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-elasticsearch-server-mocks", "id": "def-common.elasticsearchServiceMock.create", @@ -220,14 +234,7 @@ "label": "createInternalStart", "description": [], "signature": [ - "() => ", - { - "pluginId": "@kbn/core-elasticsearch-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchServerMocksPluginApi", - "section": "def-common.MockedElasticSearchServiceStart", - "text": "MockedElasticSearchServiceStart" - } + "() => MockedInternalElasticsearchServiceStart" ], "path": "packages/core/elasticsearch/core-elasticsearch-server-mocks/src/elasticsearch_service.mock.ts", "deprecated": false, @@ -303,20 +310,6 @@ "trackAdoption": false } ] - }, - { - "parentPluginId": "@kbn/core-elasticsearch-server-mocks", - "id": "def-common.elasticsearchServiceMock.Unnamed", - "type": "Any", - "tags": [], - "label": "Unnamed", - "description": [], - "signature": [ - "any" - ], - "path": "packages/core/elasticsearch/core-elasticsearch-server-mocks/src/elasticsearch_service.mock.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index f1b09ff76e83d..c9a254888c94f 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 4795d56c2041b..207c74125ebc0 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 99c70c1753658..3f7c86ae5302e 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 6d7b050a4d00b..21f4936eddfc0 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 8b0d329a0bee2..419b3a6812be2 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 4e58cbb7b661f..3a0d5ad788371 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 caad0a761be73..c42eeb11f08c7 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-04-16 +date: 2024-04-18 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 ccb6faac10b3e..9434cbd6aa52a 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-04-16 +date: 2024-04-18 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 ecc49f44f25bd..48c8c46b4a7e4 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 0119aeffa3e27..ca1b33d0358c4 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 1c22d79c4f8ee..39ee6884eeff4 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 49e108ce52f47..f45e86a054e29 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 110f2c07f2c2b..e7955fa81e25f 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 fe2dc3d2521c5..39af912f0ce1c 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 59ec5f2122cc7..e2ec926b71c49 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 eaa27338ee79c..7e823d48466d4 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-04-16 +date: 2024-04-18 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 830416ed3d048..edfa2e760d2ac 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 ee99047058dec..0bad5ff6843ba 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-04-16 +date: 2024-04-18 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 331548cb4abeb..88d788427da29 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-04-16 +date: 2024-04-18 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 62db26a106f08..ce1290092769d 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 ff5e825ea4c67..ad99a992e7e78 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_core_http_router_server_internal.devdocs.json index f45440495ad0c..c2783e410f9c5 100644 --- a/api_docs/kbn_core_http_router_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_router_server_internal.devdocs.json @@ -173,7 +173,7 @@ }, "<", "Method", - ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -244,7 +244,7 @@ }, "<", "Method", - ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -315,7 +315,7 @@ }, "<", "Method", - ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -386,7 +386,7 @@ }, "<", "Method", - ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, @@ -457,7 +457,7 @@ }, "<", "Method", - ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ">, \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index d3dc5f852fd0a..2c6b81ddbc9fe 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 49 | 7 | 49 | 5 | +| 49 | 7 | 49 | 6 | ## Common diff --git a/api_docs/kbn_core_http_router_server_mocks.devdocs.json b/api_docs/kbn_core_http_router_server_mocks.devdocs.json index 8dbc1fe6e57a7..aa7f1a545bc39 100644 --- a/api_docs/kbn_core_http_router_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_router_server_mocks.devdocs.json @@ -80,7 +80,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index e18b7b6214d94..d2aad3fb38764 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index fb04c281fe41e..11906c572547f 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -173,6 +173,115 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.getResponseValidation", + "type": "Function", + "tags": [], + "label": "getResponseValidation", + "description": [ + "\nExtracts {@link RouteValidatorFullConfigRequest} from the validation container.\nThis utility is intended to be used by code introspecting router validation configuration." + ], + "signature": [ + "(value: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RouteValidator", + "text": "RouteValidator" + }, + " | (() => ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RouteValidator", + "text": "RouteValidator" + }, + ")) => ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RouteValidatorFullConfigResponse", + "text": "RouteValidatorFullConfigResponse" + }, + " | undefined" + ], + "path": "packages/core/http/core-http-server/src/router/utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.getResponseValidation.$1", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RouteValidator", + "text": "RouteValidator" + }, + " | (() => ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RouteValidator", + "text": "RouteValidator" + }, + ")" + ], + "path": "packages/core/http/core-http-server/src/router/utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.isFullValidatorContainer", + "type": "Function", + "tags": [], + "label": "isFullValidatorContainer", + "description": [ + "\n{@link RouteValidator} is a union type of all possible ways that validation\nconfiguration can be registered. This helper utility narrows down the type\nby indicating whether it is {@link RouteValidatorRequestAndResponses} or not." + ], + "signature": [ + "(value: AnyRouteValidator) => boolean" + ], + "path": "packages/core/http/core-http-server/src/router/utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.isFullValidatorContainer.$1", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "AnyRouteValidator" + ], + "path": "packages/core/http/core-http-server/src/router/utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -216,7 +325,9 @@ "parentPluginId": "@kbn/core-http-server", "id": "def-common.AddVersionOpts.validate", "type": "CompoundType", - "tags": [], + "tags": [ + "note" + ], "label": "validate", "description": [ "\nValidation for this version of a route" @@ -4594,6 +4705,10 @@ "plugin": "grokdebugger", "path": "x-pack/plugins/grokdebugger/server/lib/kibana_framework.ts" }, + { + "plugin": "profiling", + "path": "x-pack/plugins/observability_solution/profiling/server/routes/apm.ts" + }, { "plugin": "profiling", "path": "x-pack/plugins/observability_solution/profiling/server/routes/flamechart.ts" @@ -7172,6 +7287,10 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/router.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/router.test.ts" + }, { "plugin": "@kbn/core-http-server-internal", "path": "packages/core/http/core-http-server-internal/src/http_server.test.ts" @@ -7244,6 +7363,10 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" @@ -12477,7 +12600,9 @@ "parentPluginId": "@kbn/core-http-server", "id": "def-common.RouterRoute.validationSchemas", "type": "CompoundType", - "tags": [], + "tags": [ + "note" + ], "label": "validationSchemas", "description": [], "signature": [ @@ -14484,7 +14609,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -14763,7 +14888,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -15251,6 +15376,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.ts" }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/routes/insights/alerts/post_alerts_insights.ts" + }, { "plugin": "elasticAssistant", "path": "x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.ts" @@ -15703,6 +15832,10 @@ "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core-http-router-server-internal", + "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.test.ts" @@ -15754,7 +15887,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -15881,7 +16014,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -16140,7 +16273,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -18742,7 +18875,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, @@ -18810,7 +18943,7 @@ "section": "def-common.RouteConfigOptions", "text": "RouteConfigOptions" }, - ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; }" + ", \"access\"> | undefined; access: \"internal\" | \"public\"; enableQueryVersion?: boolean | undefined; description?: string | undefined; }" ], "path": "packages/core/http/core-http-server/src/versioning/types.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index bad8649e26f8d..824678129cec4 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 471 | 1 | 187 | 0 | +| 475 | 1 | 189 | 0 | ## Common diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 16384d9d29336..57175c40d5056 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 33b5b3f5e13bd..e43a4fbda5be2 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 4bb93179819a1..de91e02ddc152 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 6707a68884084..1c8a061fb2526 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 ee6eeb276205a..7b4c9ff27d4f4 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-04-16 +date: 2024-04-18 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 c4f582594e031..de5693366192a 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 655d00ab7f943..5f9e9bf36b710 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 7276520f5fc81..7ea13e320e855 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 c1017ffc83f33..81bb036ad748e 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 6e542243b666f..f52b256a7a6b2 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 b7f62441649f0..7ed3054f5ab56 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 8d13731badf14..309777442ce0b 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 76ef3015d99f1..f286eddb4f99e 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_core_lifecycle_server_mocks.devdocs.json index dd259b586305c..9415e1494b34a 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.devdocs.json +++ b/api_docs/kbn_core_lifecycle_server_mocks.devdocs.json @@ -232,15 +232,7 @@ "section": "def-common.DocLinksServiceSetup", "text": "DocLinksServiceSetup" }, - "; elasticsearch: ", - { - "pluginId": "@kbn/core-elasticsearch-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchServerMocksPluginApi", - "section": "def-common.MockedElasticSearchServiceStart", - "text": "MockedElasticSearchServiceStart" - }, - "; http: ", + "; elasticsearch: MockedInternalElasticsearchServiceStart; http: ", { "pluginId": "@kbn/core-http-server-mocks", "scope": "common", @@ -257,13 +249,7 @@ "text": "MetricsServiceSetup" }, ">; savedObjects: jest.Mocked<", - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsServiceStart", - "text": "SavedObjectsServiceStart" - }, + "InternalSavedObjectsServiceStart", ">; uiSettings: jest.Mocked<", { "pluginId": "@kbn/core-ui-settings-server", diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 875dc58bba294..7694547e0cea5 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 44d818448aa9d..dabdf0d6896d4 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 f35f47654b623..c7be59ab88183 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 ec2feb40197b8..224b3e432f335 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-04-16 +date: 2024-04-18 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 f1f3c98f8bdcf..aa246b4b92c6b 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 12053942b5a07..23ce0b159b7f9 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 63d54e2c9874b..9fe83b27cc562 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 4e88e4b6580fe..366a082980163 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 6b61928222ad2..34ed42a718029 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-04-16 +date: 2024-04-18 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 560c21c29d250..ce7c4f7d1675c 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 c6f5c891ccc0b..3a44853aefe3e 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 c8c38b72797f4..93a09043026ba 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 9821a5c1b8ca2..f32f2c12d1618 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-04-16 +date: 2024-04-18 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 45bd1b47d4b9e..41294bdaa38d4 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 ba5b02e66e7c9..68be090df3f06 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 321775c4ab131..8c10a691144ac 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 e540ff5b961e7..7b34943886eed 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 0522c7c9ee1ba..9c6d0712830db 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 1bb916259d0d0..42fb47f2537bd 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 775b45736a2bc..d24d2885a3419 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 a1847f8149d58..eb57bceaaf5f0 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 ae2e4ed2dbc4c..2a1bcd33a740a 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 caeb6d9cd7bcb..411f523c0937d 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index f544c9f10cb12..0c4d9862cb321 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 889e1dee74669..31dede6803a72 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 0e8691acd473f..820dad38205f3 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-04-16 +date: 2024-04-18 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 33fad47218a96..94af0e9d561f6 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 a148ef137d66a..899cba295a8cf 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-04-16 +date: 2024-04-18 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 5333c8a44700a..8be10ccc97348 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 0c29efc054c19..4fd6b3f2085d8 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 51d88490098e5..31c99a31ac2ad 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 22e8924d86a93..2d151c909150a 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.devdocs.json b/api_docs/kbn_core_root_server_internal.devdocs.json index e6a2510e0c9e3..abedad4752873 100644 --- a/api_docs/kbn_core_root_server_internal.devdocs.json +++ b/api_docs/kbn_core_root_server_internal.devdocs.json @@ -213,208 +213,6 @@ } ], "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server", - "type": "Class", - "tags": [], - "label": "Server", - "description": [], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.configService", - "type": "Object", - "tags": [], - "label": "configService", - "description": [], - "signature": [ - "ConfigService" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.pluginsInitialized", - "type": "CompoundType", - "tags": [], - "label": "#pluginsInitialized", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.Unnamed", - "type": "Function", - "tags": [], - "label": "Constructor", - "description": [], - "signature": [ - "any" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "rawConfigProvider", - "description": [], - "signature": [ - { - "pluginId": "@kbn/config", - "scope": "common", - "docId": "kibKbnConfigPluginApi", - "section": "def-common.RawConfigurationProvider", - "text": "RawConfigurationProvider" - } - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.Unnamed.$2", - "type": "Object", - "tags": [], - "label": "env", - "description": [], - "signature": [ - { - "pluginId": "@kbn/config", - "scope": "common", - "docId": "kibKbnConfigPluginApi", - "section": "def-common.Env", - "text": "Env" - } - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "loggingSystem", - "description": [], - "signature": [ - "ILoggingSystem" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.preboot", - "type": "Function", - "tags": [], - "label": "preboot", - "description": [], - "signature": [ - "() => Promise<", - "InternalCorePreboot", - " | undefined>" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.setup", - "type": "Function", - "tags": [], - "label": "setup", - "description": [], - "signature": [ - "() => Promise<", - "InternalCoreSetup", - ">" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.start", - "type": "Function", - "tags": [], - "label": "start", - "description": [], - "signature": [ - "() => Promise<", - "InternalCoreStart", - ">" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.stop", - "type": "Function", - "tags": [], - "label": "stop", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-root-server-internal", - "id": "def-common.Server.setupCoreConfig", - "type": "Function", - "tags": [], - "label": "setupCoreConfig", - "description": [], - "signature": [ - "() => void" - ], - "path": "packages/core/root/core-root-server-internal/src/server.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false } ], "functions": [ diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 1b6b02d4f3d2d..0402650a50625 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 25 | 1 | 24 | 0 | +| 13 | 1 | 12 | 0 | ## Common diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 27699f9a27481..68ddf138224a1 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 27851d20bf073..d56f401c53dd1 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-04-16 +date: 2024-04-18 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 a017d811e199c..755d12cce0bb6 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json index 42f9783143152..22752cea44fca 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json @@ -3272,6 +3272,17 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.HASH_TO_VERSION_MAP.slosettings3d1b76c39bfb2cc8296b024d73854724", + "type": "string", + "tags": [], + "label": "'slo-settings|3d1b76c39bfb2cc8296b024d73854724'", + "description": [], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", "id": "def-common.HASH_TO_VERSION_MAP.slodc7f35c0cf07d71bb36f154996fe10c6", 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 9517422d9b921..2a1e79b7290e0 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 224 | 0 | 181 | 11 | +| 225 | 0 | 182 | 11 | ## Common diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index daf8dbb9af2d5..80c7b5a79dda9 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 ffcb190c09236..8f6bbce7fa920 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 a34c6a9523757..7257bfdc6efed 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 a96c0e7c031c8..6729c498f619e 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 04ab8647bfff1..a4a5555e46603 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-04-16 +date: 2024-04-18 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 4fb861272524e..92539bbb55254 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 2f15906a3d794..0a4d8ce7035cb 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 12fb098ea9576..113276d8ebd23 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 7e03621459710..2b25e920b9b60 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 64c864e3aff07..2fc77327f0396 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json index 3f399a10ea298..bf0bc606f0add 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json @@ -38,13 +38,7 @@ "<", "InternalSavedObjectsServiceSetup", ", ", - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsServiceStart", - "text": "SavedObjectsServiceStart" - }, + "InternalSavedObjectsServiceStart", ">" ], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts", @@ -130,13 +124,7 @@ "({ elasticsearch, pluginsInitialized, docLinks, node, }: ", "SavedObjectsStartDeps", ") => Promise<", - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsServiceStart", - "text": "SavedObjectsServiceStart" - }, + "InternalSavedObjectsServiceStart", ">" ], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts", @@ -1195,29 +1183,7 @@ ], "interfaces": [], "enums": [], - "misc": [ - { - "parentPluginId": "@kbn/core-saved-objects-server-internal", - "id": "def-common.InternalSavedObjectsServiceStart", - "type": "Type", - "tags": [], - "label": "InternalSavedObjectsServiceStart", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsServiceStart", - "text": "SavedObjectsServiceStart" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "misc": [], "objects": [ { "parentPluginId": "@kbn/core-saved-objects-server-internal", diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index c9c54ce039240..b04ea5575a94c 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 72 | 0 | 71 | 4 | +| 71 | 0 | 70 | 5 | ## Common @@ -34,6 +34,3 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ### Classes -### Consts, variables and types - - diff --git a/api_docs/kbn_core_saved_objects_server_mocks.devdocs.json b/api_docs/kbn_core_saved_objects_server_mocks.devdocs.json index 5921b0ffc7da9..f51de0095a7f6 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server_mocks.devdocs.json @@ -109,13 +109,7 @@ "text": "ISavedObjectTypeRegistry" }, "> | undefined) => jest.Mocked<", - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsServiceStart", - "text": "SavedObjectsServiceStart" - }, + "InternalSavedObjectsServiceStart", ">" ], "path": "packages/core/saved-objects/core-saved-objects-server-mocks/src/saved_objects_service.mock.ts", diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index c3cbca5d5b744..924b13fe2999c 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 41f6fef7a5d1c..c8c922f080b59 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index eb84a2b6c563b..b060b600c6123 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index d1effaeaf9a1a..97f7471532e78 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 876dbb8a13ffc..3df1d32bd78ea 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index efd051e5cc8ee..116bd6ff4a696 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index c87298c5585a6..f3c122cc41b2f 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 81cc07feec0d7..41dd575990081 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 41d35a72efa42..58afb64d3f60d 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 7afacf50563db..bf89057c26374 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-04-16 +date: 2024-04-18 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 65d10ff912964..259aa8272b6b8 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 074b7b500e915..9248593d9dc1a 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-04-16 +date: 2024-04-18 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 fe5165dc16d2c..0f0f3f738351f 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 1fe99eb1e60e2..be5bf7eb5a395 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 6ad72589e7e13..0b425fe9748df 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-04-16 +date: 2024-04-18 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 788cf6651c491..94431a9db585f 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 a8d064fa63dcc..d5d8cf56036ad 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-04-16 +date: 2024-04-18 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 bc89db4981643..6f63c4c89f0eb 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-04-16 +date: 2024-04-18 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 2ca5bf6fdb410..c583c5d51d93e 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-04-16 +date: 2024-04-18 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 11561cbb6995d..b112ed66b291e 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 00322d667119c..0dce8bfa67ec3 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 c989b1b621ee8..b32c570961564 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 0ddc418583940..15ec3acb3b312 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 b893dbf2c691b..d17fc38633056 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 deb84f69ae7f3..9216449abf192 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 7936a4790347f..9206facced512 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-04-16 +date: 2024-04-18 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 1ecde85b5a8ef..cb2939b530d2c 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-04-16 +date: 2024-04-18 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 26a077166294f..64da4c0cb83e4 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 eda3cb45d8688..03e049a410469 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 87e7dc816af2c..967ebcb73e72d 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-04-16 +date: 2024-04-18 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 dbbb8695b7bb0..c74ca72abea25 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-04-16 +date: 2024-04-18 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 e705b616e8ca0..75f664bf92c9a 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 7d5414e683b89..c43822c665ea6 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-04-16 +date: 2024-04-18 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 d46d28d1eaf76..04d520ebc5da3 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: 2024-04-16 +date: 2024-04-18 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 072d95fcaf7c2..0928e7931b325 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 603bc7f3519b6..f3eac85fdd660 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-04-16 +date: 2024-04-18 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 7668554bb18f1..fc59d4953a27f 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 1cd3abc5617f0..f927efd1bd092 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 28c0d71f66945..0620e9c855017 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-04-16 +date: 2024-04-18 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 19d7464c5fbef..0ee117e98fc07 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 915c5b63fdac2..f96515101143c 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index d7c313aeca8c4..24e2da11c90b6 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 10447e3948d29..856753a0af886 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index c1691265ab18d..ebe9f13a2a87d 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index c92220e290e65..7b602f1e6e473 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-04-16 +date: 2024-04-18 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 9db339f95796a..89302a037623b 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-04-16 +date: 2024-04-18 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 a9086de2b8c05..98f3851b3c2d0 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index ad6fdc8cd4347..9316e870e9c7b 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.devdocs.json b/api_docs/kbn_deeplinks_management.devdocs.json index 95c470c287ed1..d8f71a95dfb1e 100644 --- a/api_docs/kbn_deeplinks_management.devdocs.json +++ b/api_docs/kbn_deeplinks_management.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" + "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"spaces\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"cross_cluster_replication\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" + "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"spaces\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"securityAiAssistantManagement\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"cross_cluster_replication\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index f08f673dd6a50..d452724826044 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-04-16 +date: 2024-04-18 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 1b474eb868e0d..a5842f5f78d22 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-04-16 +date: 2024-04-18 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 137261b520825..8c5b40e4f73f9 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-04-16 +date: 2024-04-18 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 3071b6165fbd2..e380bce077d84 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.devdocs.json b/api_docs/kbn_deeplinks_security.devdocs.json index 4ca3bf4553f80..bc173c4506bfb 100644 --- a/api_docs/kbn_deeplinks_security.devdocs.json +++ b/api_docs/kbn_deeplinks_security.devdocs.json @@ -58,7 +58,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\"" + "\"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:ai_insights\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\"" ], "path": "packages/deeplinks/security/index.ts", "deprecated": false, @@ -73,7 +73,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"\" | \"cases\" | \"rules\" | \"alerts\" | \"policy\" | \"overview\" | \"dashboards\" | \"cases_create\" | \"cases_configure\" | \"hosts\" | \"users\" | \"cloud_defend-policies\" | \"cloud_security_posture-dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"kubernetes\" | \"network\" | \"explore\" | \"assets\" | \"cloud_defend\" | \"administration\" | \"blocklist\" | \"cloud_security_posture-rules\" | \"data_quality\" | \"detections\" | \"detection_response\" | \"endpoints\" | \"event_filters\" | \"exceptions\" | \"host_isolation_exceptions\" | \"hosts-all\" | \"hosts-anomalies\" | \"hosts-risk\" | \"hosts-events\" | \"hosts-sessions\" | \"hosts-uncommon_processes\" | \"investigations\" | \"get_started\" | \"machine_learning-landing\" | \"network-anomalies\" | \"network-dns\" | \"network-events\" | \"network-flows\" | \"network-http\" | \"network-tls\" | \"response_actions_history\" | \"rules-add\" | \"rules-create\" | \"rules-landing\" | \"threat_intelligence\" | \"timelines\" | \"timelines-templates\" | \"trusted_apps\" | \"users-all\" | \"users-anomalies\" | \"users-authentications\" | \"users-events\" | \"users-risk\" | \"entity_analytics\" | \"entity_analytics-management\" | \"entity_analytics-asset-classification\" | \"coverage-overview\"" + "\"\" | \"cases\" | \"rules\" | \"alerts\" | \"policy\" | \"overview\" | \"dashboards\" | \"cases_create\" | \"cases_configure\" | \"hosts\" | \"users\" | \"cloud_defend-policies\" | \"cloud_security_posture-dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"kubernetes\" | \"network\" | \"explore\" | \"assets\" | \"cloud_defend\" | \"administration\" | \"ai_insights\" | \"blocklist\" | \"cloud_security_posture-rules\" | \"data_quality\" | \"detections\" | \"detection_response\" | \"endpoints\" | \"event_filters\" | \"exceptions\" | \"host_isolation_exceptions\" | \"hosts-all\" | \"hosts-anomalies\" | \"hosts-risk\" | \"hosts-events\" | \"hosts-sessions\" | \"hosts-uncommon_processes\" | \"investigations\" | \"get_started\" | \"machine_learning-landing\" | \"network-anomalies\" | \"network-dns\" | \"network-events\" | \"network-flows\" | \"network-http\" | \"network-tls\" | \"response_actions_history\" | \"rules-add\" | \"rules-create\" | \"rules-landing\" | \"threat_intelligence\" | \"timelines\" | \"timelines-templates\" | \"trusted_apps\" | \"users-all\" | \"users-anomalies\" | \"users-authentications\" | \"users-events\" | \"users-risk\" | \"entity_analytics\" | \"entity_analytics-management\" | \"entity_analytics-asset-classification\" | \"coverage-overview\"" ], "path": "packages/deeplinks/security/index.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index ef4243f13a3fc..cab25cf009ec3 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 71f29f9791f6d..46d8917433ef6 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 8879879268862..021a0a82e43c0 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-04-16 +date: 2024-04-18 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 658061693ae77..d795166262b79 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-04-16 +date: 2024-04-18 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 d9903ea96473f..19d92c8810ece 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-04-16 +date: 2024-04-18 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 edb2fe445c5b4..a558ab2d9b9a3 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-04-16 +date: 2024-04-18 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 c64c1343daa25..d99ea162033a9 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-04-16 +date: 2024-04-18 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 aa4d29e530c28..32930375890b4 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-04-16 +date: 2024-04-18 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 4e44026e681ff..71f5c9e5ad78f 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-04-16 +date: 2024-04-18 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 5530698ab56c1..96157013068ba 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 1b17cc63cafc0..3125d773cfb9f 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 f6ea6789c9de7..6a7aa2250426d 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-04-16 +date: 2024-04-18 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 6882f2fe115bf..8fcdb65feccd8 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 f9f6eb56b3ad2..4868b8ce6d299 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_ebt_tools.devdocs.json index 61d6c5217507e..2962bfceac8da 100644 --- a/api_docs/kbn_ebt_tools.devdocs.json +++ b/api_docs/kbn_ebt_tools.devdocs.json @@ -374,6 +374,134 @@ "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.key6", + "type": "string", + "tags": [ + "group" + ], + "label": "key6", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.value6", + "type": "number", + "tags": [ + "group" + ], + "label": "value6", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.key7", + "type": "string", + "tags": [ + "group" + ], + "label": "key7", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.value7", + "type": "number", + "tags": [ + "group" + ], + "label": "value7", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.key8", + "type": "string", + "tags": [ + "group" + ], + "label": "key8", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.value8", + "type": "number", + "tags": [ + "group" + ], + "label": "value8", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.key9", + "type": "string", + "tags": [ + "group" + ], + "label": "key9", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ebt-tools", + "id": "def-common.PerformanceMetricEvent.value9", + "type": "number", + "tags": [ + "group" + ], + "label": "value9", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-ebt-tools/src/performance_metric_events/schema.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index acfd875b125e7..a224ea1a7a248 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 19 | 0 | 11 | 0 | +| 27 | 0 | 19 | 0 | ## Common diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 2a9e06947fa87..3d530b244fa16 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index ff5629d7dc57c..6c434ba986eeb 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index a3deed9f0a87e..0ef6a0d28d008 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -90,7 +90,7 @@ "\nDefault Elastic AI Assistant logo\n\nTODO: Can be removed once added to EUI" ], "signature": [ - "({ size }: ", + "({ className, size }: ", "AssistantAvatarProps", ") => JSX.Element" ], @@ -103,7 +103,7 @@ "id": "def-public.AssistantAvatar.$1", "type": "Object", "tags": [], - "label": "{ size = 's' }", + "label": "{ className, size = 's' }", "description": [], "signature": [ "AssistantAvatarProps" @@ -302,6 +302,54 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.ConnectorSelectorInline", + "type": "Function", + "tags": [], + "label": "ConnectorSelectorInline", + "description": [ + "\nA compact wrapper of the ConnectorSelector component used in the Settings modal." + ], + "signature": [ + "React.FunctionComponent" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.ConnectorSelectorInline.$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": "@kbn/elastic-assistant", + "id": "def-public.ConnectorSelectorInline.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.getConversationById", @@ -493,6 +541,38 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.UpgradeButtons", + "type": "Function", + "tags": [], + "label": "UpgradeButtons", + "description": [], + "signature": [ + "React.NamedExoticComponent<{ basePath: string; }> & { readonly type: ({ basePath }: { basePath: string; }) => JSX.Element; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/upgrade/upgrade_buttons.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.UpgradeButtons.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.useAssistantContext", @@ -521,7 +601,7 @@ "\n`useAssistantOverlay` is a hook that registers context with the assistant overlay, and\nreturns an optional `showAssistantOverlay` function to display the assistant overlay.\nAs an alterative to using the `showAssistantOverlay` returned from this hook, you may\nuse the `NewChatByTitle` component and pass it the `promptContextId` returned by this hook.\n\nUSE THIS WHEN: You want to register context in one part of the tree, and then show\na _New chat_ button in another part of the tree without passing around the data, or when\nyou want to build a custom `New chat` button with features not not provided by the\n`NewChat` component." ], "signature": [ - "(category: string, conversationTitle: string | null, description: string, getPromptContext: () => Promise | Promise>, id: string | null, suggestedUserPrompt: string | null | undefined, tooltip: React.ReactNode) => UseAssistantOverlay" + "(category: string, conversationTitle: string | null, description: string, getPromptContext: () => Promise | Promise>, id: string | null, suggestedUserPrompt: string | null | undefined, tooltip: React.ReactNode, replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined) => UseAssistantOverlay" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/use_assistant_overlay/index.tsx", "deprecated": false, @@ -631,6 +711,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.useAssistantOverlay.$8", + "type": "CompoundType", + "tags": [], + "label": "replacements", + "description": [], + "signature": [ + "Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | null | undefined" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/use_assistant_overlay/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -680,6 +775,53 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.useLoadConnectors", + "type": "Function", + "tags": [], + "label": "useLoadConnectors", + "description": [], + "signature": [ + "({ http, toasts, }: ", + "Props", + ") => ", + "UseQueryResult", + "<", + "AIConnector", + "[], ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.IHttpFetchError", + "text": "IHttpFetchError" + }, + ">" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.useLoadConnectors.$1", + "type": "Object", + "tags": [], + "label": "{\n http,\n toasts,\n}", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -2213,6 +2355,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.PromptContext.replacements", + "type": "CompoundType", + "tags": [], + "label": "replacements", + "description": [ + "\nReplacements associated with the context, i.e. replacements for an insight provided as context" + ], + "signature": [ + "Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_context/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.PromptContext.suggestedUserPrompt", @@ -2328,6 +2486,53 @@ ], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AI_INSIGHTS_STORAGE_KEY", + "type": "string", + "tags": [], + "label": "AI_INSIGHTS_STORAGE_KEY", + "description": [], + "signature": [ + "\"aiInsights\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.DEFAULT_ASSISTANT_NAMESPACE", + "type": "string", + "tags": [], + "label": "DEFAULT_ASSISTANT_NAMESPACE", + "description": [], + "signature": [ + "\"elasticAssistantDefault\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.DEFAULT_LATEST_ALERTS", + "type": "number", + "tags": [], + "label": "DEFAULT_LATEST_ALERTS", + "description": [ + "The default `n` latest alerts, ordered by risk score, sent as context to the assistant" + ], + "signature": [ + "20" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.ELASTIC_AI_ASSISTANT_TITLE", @@ -2340,6 +2545,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.KNOWLEDGE_BASE_LOCAL_STORAGE_KEY", + "type": "string", + "tags": [], + "label": "KNOWLEDGE_BASE_LOCAL_STORAGE_KEY", + "description": [], + "signature": [ + "\"knowledgeBase\"" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.PromptContextTemplate", @@ -2350,7 +2570,7 @@ "\nThis interface is used to pass a default or base set of contexts to the Elastic AI Assistant when\ninitializing it. This is used to provide 'category' options when users create Quick Prompts.\nAlso, useful for collating all of a solutions' prompts in one place.\n\ne.g. see Security Solution's x-pack/plugins/security_solution/public/assistant/prompt_contexts/index.tsx" ], "signature": [ - "{ category: string; description: string; tooltip: React.ReactNode; suggestedUserPrompt?: string | undefined; }" + "{ category: string; description: string; tooltip: React.ReactNode; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; suggestedUserPrompt?: string | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_context/types.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index eaa3ee488fe95..71945e33e799c 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 155 | 0 | 135 | 8 | +| 168 | 0 | 142 | 9 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index 85199284287bc..4ce5d86b810d9 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -27,7 +27,7 @@ "label": "getAnonymizedValue", "description": [], "signature": [ - "({ currentReplacements, rawValue, }: { currentReplacements: Record | undefined; rawValue: string; }) => string" + "({ currentReplacements, rawValue, }: { currentReplacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; rawValue: string; }) => string" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/get_anonymized_value/index.ts", "deprecated": false, @@ -47,12 +47,12 @@ { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.getAnonymizedValue.$1.currentReplacements", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "currentReplacements", "description": [], "signature": [ - "Record | undefined" + "Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/get_anonymized_value/index.ts", "deprecated": false, @@ -520,7 +520,7 @@ "label": "transformRawData", "description": [], "signature": [ - "({ anonymizationFields, currentReplacements, getAnonymizedValue, onNewReplacements, rawData, }: { anonymizationFields?: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[] | undefined; currentReplacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; getAnonymizedValue: ({ currentReplacements, rawValue, }: { currentReplacements: Record | undefined; rawValue: string; }) => string; onNewReplacements?: ((replacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\">) => void) | undefined; rawData: string | Record; }) => string" + "({ anonymizationFields, currentReplacements, getAnonymizedValue, onNewReplacements, rawData, }: { anonymizationFields?: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[] | undefined; currentReplacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; getAnonymizedValue: ({ currentReplacements, rawValue, }: { currentReplacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; rawValue: string; }) => string; onNewReplacements?: ((replacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\">) => void) | undefined; rawData: string | Record; }) => string" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/transform_raw_data/index.tsx", "deprecated": false, @@ -573,7 +573,7 @@ "label": "getAnonymizedValue", "description": [], "signature": [ - "({ currentReplacements, rawValue, }: { currentReplacements: Record | undefined; rawValue: string; }) => string" + "({ currentReplacements, rawValue, }: { currentReplacements: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; rawValue: string; }) => string" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/transform_raw_data/index.tsx", "deprecated": false, @@ -593,12 +593,12 @@ { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.transformRawData.$1.getAnonymizedValue.$1.currentReplacements", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "currentReplacements", "description": [], "signature": [ - "Record | undefined" + "Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/transform_raw_data/index.tsx", "deprecated": false, @@ -676,6 +676,68 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsight", + "type": "Type", + "tags": [], + "label": "AlertsInsight", + "description": [ + "\nAn insight generated from one or more alerts" + ], + "signature": [ + "{ title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsightsPostRequestBody", + "type": "Type", + "tags": [], + "label": "AlertsInsightsPostRequestBody", + "description": [], + "signature": [ + "{ connectorId: string; actionTypeId: string; size: number; subAction: \"invokeAI\" | \"invokeStream\"; alertsIndexPattern: string; anonymizationFields: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[]; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsightsPostRequestBodyInput", + "type": "Type", + "tags": [], + "label": "AlertsInsightsPostRequestBodyInput", + "description": [], + "signature": [ + "{ connectorId: string; actionTypeId: string; size: number; subAction: \"invokeAI\" | \"invokeStream\"; alertsIndexPattern: string; anonymizationFields: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[]; model?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsightsPostResponse", + "type": "Type", + "tags": [], + "label": "AlertsInsightsPostResponse", + "description": [], + "signature": [ + "{ connector_id?: string | undefined; insights?: { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }[] | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; status?: string | undefined; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.ApiConfig", @@ -776,7 +838,7 @@ "\nInterface for features available to the elastic assistant" ], "signature": [ - "{ readonly assistantModelEvaluation: boolean; }" + "{ readonly assistantAlertsInsights: boolean; readonly assistantModelEvaluation: boolean; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", "deprecated": false, @@ -1617,7 +1679,7 @@ "label": "GetCapabilitiesResponse", "description": [], "signature": [ - "{ assistantModelEvaluation: boolean; }" + "{ assistantAlertsInsights: boolean; assistantModelEvaluation: boolean; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts", "deprecated": false, @@ -2229,6 +2291,51 @@ } ], "objects": [ + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsight", + "type": "Object", + "tags": [], + "label": "AlertsInsight", + "description": [], + "signature": [ + "Zod.ZodObject<{ alertIds: Zod.ZodArray; detailsMarkdown: Zod.ZodString; entitySummaryMarkdown: Zod.ZodString; mitreAttackTactics: Zod.ZodOptional>; summaryMarkdown: Zod.ZodString; title: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }, { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsightsPostRequestBody", + "type": "Object", + "tags": [], + "label": "AlertsInsightsPostRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ alertsIndexPattern: Zod.ZodString; anonymizationFields: Zod.ZodArray; field: Zod.ZodString; allowed: Zod.ZodOptional; anonymized: Zod.ZodOptional; updatedAt: Zod.ZodOptional; updatedBy: Zod.ZodOptional; createdAt: Zod.ZodOptional; createdBy: Zod.ZodOptional; namespace: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }, { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }>, \"many\">; connectorId: Zod.ZodString; actionTypeId: Zod.ZodString; model: Zod.ZodOptional; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; size: Zod.ZodNumber; subAction: Zod.ZodEnum<[\"invokeAI\", \"invokeStream\"]>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; size: number; subAction: \"invokeAI\" | \"invokeStream\"; alertsIndexPattern: string; anonymizationFields: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[]; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; }, { connectorId: string; actionTypeId: string; size: number; subAction: \"invokeAI\" | \"invokeStream\"; alertsIndexPattern: string; anonymizationFields: { id: string; field: string; timestamp?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; updatedAt?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; createdBy?: string | undefined; namespace?: string | undefined; }[]; model?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.AlertsInsightsPostResponse", + "type": "Object", + "tags": [], + "label": "AlertsInsightsPostResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ connector_id: Zod.ZodOptional; insights: Zod.ZodOptional; detailsMarkdown: Zod.ZodString; entitySummaryMarkdown: Zod.ZodString; mitreAttackTactics: Zod.ZodOptional>; summaryMarkdown: Zod.ZodString; title: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }, { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }>, \"many\">>; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; status: Zod.ZodOptional; trace_data: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { connector_id?: string | undefined; insights?: { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }[] | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; status?: string | undefined; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { connector_id?: string | undefined; insights?: { title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; mitreAttackTactics?: string[] | undefined; }[] | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; status?: string | undefined; trace_data?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>" + ], + "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/insights/alerts/post_alerts_insights_route.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.API_VERSIONS", @@ -2691,7 +2798,7 @@ "\nDefault features available to the elastic assistant" ], "signature": [ - "{ readonly assistantModelEvaluation: false; }" + "{ readonly assistantAlertsInsights: false; readonly assistantModelEvaluation: false; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/capabilities/index.ts", "deprecated": false, @@ -2916,7 +3023,7 @@ "label": "GetCapabilitiesResponse", "description": [], "signature": [ - "Zod.ZodObject<{ assistantModelEvaluation: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { assistantModelEvaluation: boolean; }, { assistantModelEvaluation: boolean; }>" + "Zod.ZodObject<{ assistantAlertsInsights: Zod.ZodBoolean; assistantModelEvaluation: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { assistantAlertsInsights: boolean; assistantModelEvaluation: boolean; }, { assistantAlertsInsights: boolean; assistantModelEvaluation: boolean; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index c35378b1738e7..294e361c42a67 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 225 | 0 | 211 | 0 | +| 232 | 0 | 217 | 2 | ## Common diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 9f5fbbf3a4497..8321aa764e006 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-04-16 +date: 2024-04-18 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 a3575f3aeafe3..347839d80f2fe 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-04-16 +date: 2024-04-18 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 e7430a7d0dea3..01c0ff0ea4f88 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-04-16 +date: 2024-04-18 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 f4033c9f22157..a65224126371c 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-04-16 +date: 2024-04-18 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 6a44ad64603bf..fbe37330d0f90 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-04-16 +date: 2024-04-18 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 456381e782302..6e3cad308fa00 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index c15013e007b6e..be506e59a2a66 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 7bafe23c8d0f6..be6f0bfa1675a 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 1ec70772ee16b..b07a64619d3df 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -1497,7 +1497,7 @@ "section": "def-common.ESQLSingleAstItem", "text": "ESQLSingleAstItem" }, - ", argDef: { name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; literalOnly?: boolean | undefined; literalOptions?: string[] | undefined; } | { name: string; type: string; optional?: boolean | undefined; innerType?: string | undefined; values?: string[] | undefined; valueDescriptions?: string[] | undefined; literalOnly?: boolean | undefined; wildcards?: boolean | undefined; }, references: ", + ", argDef: { name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; } | { name: string; type: string; optional?: boolean | undefined; innerType?: string | undefined; values?: string[] | undefined; valueDescriptions?: string[] | undefined; constantOnly?: boolean | undefined; wildcards?: boolean | undefined; }, references: ", "ReferenceMaps", ", parentCommand: string | undefined, nameHit: string | undefined) => boolean | undefined" ], @@ -1534,7 +1534,7 @@ "label": "argDef", "description": [], "signature": [ - "{ name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; literalOnly?: boolean | undefined; literalOptions?: string[] | undefined; } | { name: string; type: string; optional?: boolean | undefined; innerType?: string | undefined; values?: string[] | undefined; valueDescriptions?: string[] | undefined; literalOnly?: boolean | undefined; wildcards?: boolean | undefined; }" + "{ name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; } | { name: string; type: string; optional?: boolean | undefined; innerType?: string | undefined; values?: string[] | undefined; valueDescriptions?: string[] | undefined; constantOnly?: boolean | undefined; wildcards?: boolean | undefined; }" ], "path": "packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts", "deprecated": false, @@ -3241,7 +3241,7 @@ "label": "signatures", "description": [], "signature": [ - "{ params: { name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; literalOnly?: boolean | undefined; literalOptions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: string; examples?: string[] | undefined; }[]" + "{ params: { name: string; type: string; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: string; examples?: string[] | undefined; }[]" ], "path": "packages/kbn-esql-validation-autocomplete/src/definitions/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 8faf8024232d5..b40f87fc59ab8 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 5a03be1e409bd..24a25da21cbcf 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-04-16 +date: 2024-04-18 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 92346cb5410e6..8d94802853c7a 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-04-16 +date: 2024-04-18 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 c192fcf4aee1a..fd1618b41f6b0 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-04-16 +date: 2024-04-18 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 b3bdfb59eb9af..cf4da37aa0b8f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-04-16 +date: 2024-04-18 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 8e61d7c219e63..d04b594c8c7e0 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 534735b164d36..fbe66ca24883d 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 489a77428dfba..6d6e8529f59ef 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index f2a25b94cd411..0fcf73da416ca 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 605deca2d24b7..a665929959512 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index d4dee6dd76749..ebd5af2db8476 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-04-16 +date: 2024-04-18 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 fa85b11ccee2e..4650083065852 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-04-16 +date: 2024-04-18 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 7c6efb3966be7..b1d88b52c21b8 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index d66e47a21cfcb..ff56d506651dc 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-04-16 +date: 2024-04-18 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 5dbcbf3a5f6d3..0a3a4e8a42ea8 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-04-16 +date: 2024-04-18 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 c85d1881f3a70..e15dbab689739 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 0f4e39732b7bf..4e16dc0ffd803 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-04-16 +date: 2024-04-18 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 de4bdade0d5f3..4fe377ac425e1 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-04-16 +date: 2024-04-18 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 3f33a68adbde6..8d1f0c455257a 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-04-16 +date: 2024-04-18 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 9541a345278c6..dda589e4f0466 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-04-16 +date: 2024-04-18 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 9092df548e264..77d9fe4986845 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-04-16 +date: 2024-04-18 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 15bfa66e22218..f3b6b20eccaea 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.devdocs.json b/api_docs/kbn_index_management.devdocs.json index e7a2015875695..710b81245c2cf 100644 --- a/api_docs/kbn_index_management.devdocs.json +++ b/api_docs/kbn_index_management.devdocs.json @@ -1914,7 +1914,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/packages/index-management/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index d74d0804ced1b..5bc4e178aba76 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 18918fb43fef9..28be0d5bb69c7 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-04-16 +date: 2024-04-18 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 8eb092c986ed1..5639bb7520c0a 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-04-16 +date: 2024-04-18 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 77f9117b12147..92095a0fa8da0 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 6a605fa25b27d..ce5b442829187 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c3d5e6b349a73..beb0834e55a07 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-04-16 +date: 2024-04-18 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 e66a4a81aa1e2..cbe9c292c3314 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-04-16 +date: 2024-04-18 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 6ae3ea5c27f60..f3de2af827e9a 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-04-16 +date: 2024-04-18 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 c0c16920bc372..e0dde39ccd85a 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-04-16 +date: 2024-04-18 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 6cbb7b3959946..33dff9a7df5bd 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-04-16 +date: 2024-04-18 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 56a1e0ad6a5df..531b1a88bc462 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index b1267cca03252..ae1c182950cf8 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index b531b0e3f1cae..985a7e910dec0 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-04-16 +date: 2024-04-18 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 4935f2e7fc630..00446b2ab8b59 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index e031ba30af0fc..fb549294828db 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 5042add84c164..b36c4f060e7cf 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-04-16 +date: 2024-04-18 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 5cf0d8b3efc83..3bfeb191d205b 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-04-16 +date: 2024-04-18 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 71583751bf281..f9bceee9dea17 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-04-16 +date: 2024-04-18 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 bcc0d2512c4fd..e1e80f6e1ee2b 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-04-16 +date: 2024-04-18 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 3c635ba373af4..31caf3c2bf493 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-04-16 +date: 2024-04-18 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 b44a4052ea3db..1f3aae278e5c6 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-04-16 +date: 2024-04-18 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 5e14f30d50f8e..b83643b4c1797 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-04-16 +date: 2024-04-18 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 d54db6678ae3e..fcb86626d7a43 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-04-16 +date: 2024-04-18 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 445c88ccf6499..d346b02e8ae7c 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-04-16 +date: 2024-04-18 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 c8b70869d3c4b..2744a96e76994 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-04-16 +date: 2024-04-18 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 d4f9c35de199a..9ead3d84fcac4 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-04-16 +date: 2024-04-18 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 07edc82d3f004..45c985a0fa59a 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-04-16 +date: 2024-04-18 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 32745a0dbe4bc..90124cca97aba 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-04-16 +date: 2024-04-18 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 8e9d6c5d4a255..5c6baa3643c9c 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-04-16 +date: 2024-04-18 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 2f76c2f97e482..2a5278ad24819 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 db9a350876c0d..01a06c867a607 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 f3bec3aeaa419..95ec3eb67dd61 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 00e5300a1e17a..12c6e42e97056 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index f3594481eea1b..9f8d81b1ad1ef 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-04-16 +date: 2024-04-18 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 575e441e80aaf..d3be2c05e268d 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-04-16 +date: 2024-04-18 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 0a1483fd5604b..bcd0d6bbc558e 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 3dc2df50eb6cf..63d8259d42e96 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-04-16 +date: 2024-04-18 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 8fe3a10454e4f..a8639fd63a56f 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-04-16 +date: 2024-04-18 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 1079a21cbabcf..9bcff0268138d 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 b17262e21e83e..bc850c30f9c4c 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 9906597a32578..b6da71a89b81a 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-04-16 +date: 2024-04-18 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 882db6095794e..e63f919797621 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-04-16 +date: 2024-04-18 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 7cc73ceb0e62f..e2c71eab0ea7d 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-04-16 +date: 2024-04-18 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 f9fbbdb825c38..7600c0a7e1e81 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-04-16 +date: 2024-04-18 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 7297df2b14093..3e43353e8ed1f 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-04-16 +date: 2024-04-18 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 e4a9c05711117..c6411cc5b4f98 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-04-16 +date: 2024-04-18 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 d331d877b6993..f6a9878416079 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 d298a5dc5e206..eed9825b377fa 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 b7e86f22058dd..01def4447125b 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 3215d349e428f..8d63aa58cb361 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 a64deabf4cc41..67f04444484b6 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 f813ebb9a7b51..164a14fb8ec8d 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index fe40be3d49a4a..e4e7cd3f10a83 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 32d044705cfff..7a3a8beea72b4 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index f2787251b73b6..70c9f24e7db97 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 416a08a868641..d8f897cc5f116 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 001c693766b96..29825620ef062 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.devdocs.json b/api_docs/kbn_monaco.devdocs.json index fe022a1f19064..9875106fea658 100644 --- a/api_docs/kbn_monaco.devdocs.json +++ b/api_docs/kbn_monaco.devdocs.json @@ -17,7 +17,94 @@ "objects": [] }, "common": { - "classes": [], + "classes": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ConsoleParsedRequestsProvider", + "type": "Class", + "tags": [], + "label": "ConsoleParsedRequestsProvider", + "description": [], + "path": "packages/kbn-monaco/src/console/console_parsed_requests_provider.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ConsoleParsedRequestsProvider.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-monaco/src/console/console_parsed_requests_provider.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ConsoleParsedRequestsProvider.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "workerProxyService", + "description": [], + "signature": [ + "ConsoleWorkerProxyService" + ], + "path": "packages/kbn-monaco/src/console/console_parsed_requests_provider.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ConsoleParsedRequestsProvider.Unnamed.$2", + "type": "CompoundType", + "tags": [], + "label": "model", + "description": [], + "signature": [ + "editor", + ".ITextModel | null" + ], + "path": "packages/kbn-monaco/src/console/console_parsed_requests_provider.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ConsoleParsedRequestsProvider.getRequests", + "type": "Function", + "tags": [], + "label": "getRequests", + "description": [], + "signature": [ + "() => Promise<", + { + "pluginId": "@kbn/monaco", + "scope": "common", + "docId": "kibKbnMonacoPluginApi", + "section": "def-common.ParsedRequest", + "text": "ParsedRequest" + }, + "[]>" + ], + "path": "packages/kbn-monaco/src/console/console_parsed_requests_provider.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [ { "parentPluginId": "@kbn/monaco", @@ -57,6 +144,49 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.getParsedRequestsProvider", + "type": "Function", + "tags": [], + "label": "getParsedRequestsProvider", + "description": [], + "signature": [ + "(model: ", + "editor", + ".ITextModel | null) => ", + { + "pluginId": "@kbn/monaco", + "scope": "common", + "docId": "kibKbnMonacoPluginApi", + "section": "def-common.ConsoleParsedRequestsProvider", + "text": "ConsoleParsedRequestsProvider" + } + ], + "path": "packages/kbn-monaco/src/console/language.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.getParsedRequestsProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "model", + "description": [], + "signature": [ + "editor", + ".ITextModel | null" + ], + "path": "packages/kbn-monaco/src/console/language.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/monaco", "id": "def-common.registerLanguage", @@ -1012,6 +1142,78 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest", + "type": "Interface", + "tags": [], + "label": "ParsedRequest", + "description": [], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest.startOffset", + "type": "number", + "tags": [], + "label": "startOffset", + "description": [], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest.endOffset", + "type": "number", + "tags": [], + "label": "endOffset", + "description": [], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest.method", + "type": "string", + "tags": [], + "label": "method", + "description": [], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest.url", + "type": "string", + "tags": [], + "label": "url", + "description": [], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ParsedRequest.data", + "type": "Array", + "tags": [], + "label": "data", + "description": [], + "signature": [ + "Record[] | undefined" + ], + "path": "packages/kbn-monaco/src/console/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/monaco", "id": "def-common.SyntaxErrors", diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 0a145f08328fa..cb99b91c90234 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.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 | |-------------------|-----------|------------------------|-----------------| -| 107 | 0 | 107 | 2 | +| 120 | 0 | 120 | 3 | ## Common @@ -31,6 +31,9 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh ### Functions +### Classes + + ### Interfaces diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 52dd803a975d7..cb1e860b7d0df 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-04-16 +date: 2024-04-18 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 b7f03faf62202..2c795647a8f83 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 489990d0a9363..c93155417f45d 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index d1acc359e4866..48214360ecef9 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index d196a04ac3786..fe85d236e60ab 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 093a5715f019a..7abb4fc6a7bd0 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-04-16 +date: 2024-04-18 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 010c80c5588a7..0e8d4cd1c6b78 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-04-16 +date: 2024-04-18 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 e4b094b9a1e92..077d1ebdfe626 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-04-16 +date: 2024-04-18 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 2e311d6943642..f6a323e363fe3 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 01847e87f2858..a68e1574d32b4 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 9c5faa8ed4f79..f6b4f007898a6 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 8a3a852e87e0f..5300f44e800d4 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index c9e207834c906..bcc9e30fae852 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-04-16 +date: 2024-04-18 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 4aea098117a6d..96b5f900184f0 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 8a4ec15bd19fc..700d3337ebb53 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 7b02dfce404ee..5428d1e04e9d2 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.devdocs.json b/api_docs/kbn_profiling_utils.devdocs.json index c9eb2b60452f0..8265e744445e8 100644 --- a/api_docs/kbn_profiling_utils.devdocs.json +++ b/api_docs/kbn_profiling_utils.devdocs.json @@ -1633,6 +1633,78 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions", + "type": "Interface", + "tags": [], + "label": "ESTopNFunctions", + "description": [], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions.self_count", + "type": "number", + "tags": [], + "label": "self_count", + "description": [], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions.total_count", + "type": "number", + "tags": [], + "label": "total_count", + "description": [], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions.self_annual_co2_tons", + "type": "number", + "tags": [], + "label": "self_annual_co2_tons", + "description": [], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions.self_annual_cost_usd", + "type": "number", + "tags": [], + "label": "self_annual_cost_usd", + "description": [], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ESTopNFunctions.topn", + "type": "Array", + "tags": [], + "label": "topn", + "description": [], + "signature": [ + "TopNFunction[]" + ], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/profiling-utils", "id": "def-common.Executable", @@ -2425,6 +2497,21 @@ } ], "misc": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.AggregationField", + "type": "Type", + "tags": [], + "label": "AggregationField", + "description": [], + "signature": [ + "\"service.name\" | \"transaction.name\"" + ], + "path": "packages/kbn-profiling-utils/common/es_functions.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/profiling-utils", "id": "def-common.FileID", diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 982a460216aa6..ae7cf8a7c070a 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 161 | 0 | 48 | 0 | +| 168 | 0 | 55 | 0 | ## Common diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index bc7f67c0b5373..e7e385c700a07 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-04-16 +date: 2024-04-18 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 5a422f544d3ca..8e08f39f35a21 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-04-16 +date: 2024-04-18 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 08ba3de1b46fe..f4992be82216f 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-04-16 +date: 2024-04-18 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 6a76bd25ec12f..e6640c45ed4d3 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-04-16 +date: 2024-04-18 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 f297fd4a637bd..e3070cb80d559 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-04-16 +date: 2024-04-18 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 a83a45d0ed2d3..ca43bb82c74ea 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-04-16 +date: 2024-04-18 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 43dfb3ae03b1d..acd7cda007888 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 64999db8024fd..5782e0503d7c9 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-04-16 +date: 2024-04-18 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 4ea9a02b599c5..840899fd54c10 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-04-16 +date: 2024-04-18 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 36a3e20348d7d..0bca550e8871c 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-04-16 +date: 2024-04-18 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 8b43e3feb1f88..4850e36af4875 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-04-16 +date: 2024-04-18 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 cd1aa708e7121..7568e998ee443 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-04-16 +date: 2024-04-18 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 0d14d37dcd732..bb05da8f4b4d2 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.devdocs.json b/api_docs/kbn_reporting_csv_share_panel.devdocs.json new file mode 100644 index 0000000000000..0d40f0a4db866 --- /dev/null +++ b/api_docs/kbn_reporting_csv_share_panel.devdocs.json @@ -0,0 +1,276 @@ +{ + "id": "@kbn/reporting-csv-share-panel", + "client": { + "classes": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction", + "type": "Class", + "tags": [], + "label": "ReportingCsvPanelAction", + "description": [], + "signature": [ + { + "pluginId": "@kbn/reporting-csv-share-panel", + "scope": "public", + "docId": "kibKbnReportingCsvSharePanelPluginApi", + "section": "def-public.ReportingCsvPanelAction", + "text": "ReportingCsvPanelAction" + }, + " implements ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.ActionDefinition", + "text": "ActionDefinition" + }, + "<", + "ActionContext", + ">" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"\"" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"generateCsvReport\"" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "{ core, csvConfig, apiClient, startServices$, usesUiCapabilities }", + "description": [], + "signature": [ + "Params" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.getIconType", + "type": "Function", + "tags": [], + "label": "getIconType", + "description": [], + "signature": [ + "() => string" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.getDisplayName", + "type": "Function", + "tags": [], + "label": "getDisplayName", + "description": [], + "signature": [ + "() => string" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.getSharingData", + "type": "Function", + "tags": [], + "label": "getSharingData", + "description": [], + "signature": [ + "(savedSearch: ", + { + "pluginId": "savedSearch", + "scope": "public", + "docId": "kibSavedSearchPluginApi", + "section": "def-public.SavedSearch", + "text": "SavedSearch" + }, + ") => Promise<{ getSearchSource: ({ addGlobalTimeFilter, absoluteTime, }: { addGlobalTimeFilter?: boolean | undefined; absoluteTime?: boolean | undefined; }) => ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SerializedSearchSourceFields", + "text": "SerializedSearchSourceFields" + }, + "; columns: string[]; }>" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.getSharingData.$1", + "type": "Object", + "tags": [], + "label": "savedSearch", + "description": [], + "signature": [ + { + "pluginId": "savedSearch", + "scope": "public", + "docId": "kibSavedSearchPluginApi", + "section": "def-public.SavedSearch", + "text": "SavedSearch" + } + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.isCompatible", + "type": "Function", + "tags": [], + "label": "isCompatible", + "description": [], + "signature": [ + "(context: ", + "ActionContext", + ") => Promise" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.isCompatible.$1", + "type": "Object", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "ActionContext" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.execute", + "type": "Function", + "tags": [], + "label": "execute", + "description": [], + "signature": [ + "(context: ", + "ActionContext", + ") => Promise" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-csv-share-panel", + "id": "def-public.ReportingCsvPanelAction.execute.$1", + "type": "Object", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "ActionContext" + ], + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx new file mode 100644 index 0000000000000..c564a82c9bf06 --- /dev/null +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnReportingCsvSharePanelPluginApi +slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel +title: "@kbn/reporting-csv-share-panel" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/reporting-csv-share-panel plugin +date: 2024-04-18 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] +--- +import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 13 | 0 | 13 | 1 | + +## Client + +### Classes + + diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index e9ccb5628970d..d1722251469b4 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 0200411b453cb..add7b55aacc1f 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 74ff2c1034a04..0c50e51fea21b 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index a8b2ad25a0237..fab607500ddeb 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 3c6295fbb830c..3fc42c23a798c 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 9a6d02b2103a2..ec5c08021d3da 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 1f259bcf342f4..ffb156485fbef 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.devdocs.json b/api_docs/kbn_reporting_public.devdocs.json index 7a24ee1418835..cd212bb9b6618 100644 --- a/api_docs/kbn_reporting_public.devdocs.json +++ b/api_docs/kbn_reporting_public.devdocs.json @@ -1278,7 +1278,16 @@ "path": "packages/kbn-reporting/public/reporting_api_client.ts", "deprecated": true, "trackAdoption": false, - "references": [], + "references": [ + { + "plugin": "@kbn/reporting-csv-share-panel", + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx" + }, + { + "plugin": "@kbn/reporting-csv-share-panel", + "path": "packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts" + } + ], "children": [ { "parentPluginId": "@kbn/reporting-public", diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 55b0416ddfb14..61b1e01b10fde 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 7387ae4ddb6ad..046bfb756bb31 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index eaa841d3444f5..49e995bcd13fc 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-04-16 +date: 2024-04-18 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 a988e0e430960..9fba2406eac13 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.devdocs.json b/api_docs/kbn_router_to_openapispec.devdocs.json new file mode 100644 index 0000000000000..c7fb0ec866aad --- /dev/null +++ b/api_docs/kbn_router_to_openapispec.devdocs.json @@ -0,0 +1,140 @@ +{ + "id": "@kbn/router-to-openapispec", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/router-to-openapispec", + "id": "def-common.generateOpenApiDocument", + "type": "Function", + "tags": [], + "label": "generateOpenApiDocument", + "description": [], + "signature": [ + "(appRouters: { routers: ", + "Router", + "<", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RequestHandlerContextBase", + "text": "RequestHandlerContextBase" + }, + ">[]; versionedRouters: ", + { + "pluginId": "@kbn/core-http-router-server-internal", + "scope": "common", + "docId": "kibKbnCoreHttpRouterServerInternalPluginApi", + "section": "def-common.CoreVersionedRouter", + "text": "CoreVersionedRouter" + }, + "[]; }, opts: ", + "GenerateOpenApiDocumentOptions", + ") => ", + "OpenAPIV3", + ".Document<{}>" + ], + "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/router-to-openapispec", + "id": "def-common.generateOpenApiDocument.$1", + "type": "Object", + "tags": [], + "label": "appRouters", + "description": [], + "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/router-to-openapispec", + "id": "def-common.generateOpenApiDocument.$1.routers", + "type": "Array", + "tags": [], + "label": "routers", + "description": [], + "signature": [ + "Router", + "<", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.RequestHandlerContextBase", + "text": "RequestHandlerContextBase" + }, + ">[]" + ], + "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/router-to-openapispec", + "id": "def-common.generateOpenApiDocument.$1.versionedRouters", + "type": "Array", + "tags": [], + "label": "versionedRouters", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-router-server-internal", + "scope": "common", + "docId": "kibKbnCoreHttpRouterServerInternalPluginApi", + "section": "def-common.CoreVersionedRouter", + "text": "CoreVersionedRouter" + }, + "[]" + ], + "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/router-to-openapispec", + "id": "def-common.generateOpenApiDocument.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "GenerateOpenApiDocumentOptions" + ], + "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx new file mode 100644 index 0000000000000..daa92f08b8042 --- /dev/null +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnRouterToOpenapispecPluginApi +slug: /kibana-dev-docs/api/kbn-router-to-openapispec +title: "@kbn/router-to-openapispec" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/router-to-openapispec plugin +date: 2024-04-18 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] +--- +import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; + + + +Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 5 | 0 | 5 | 1 | + +## Common + +### Functions + + diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 71a3b990262f7..98142676778fd 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 1074b4a6e1dd8..d812eae8f4447 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index d1301871aaec5..3f512646387a4 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1661,6 +1661,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.METRIC_THRESHOLD_ALERT_TYPE_ID", + "type": "string", + "tags": [], + "label": "METRIC_THRESHOLD_ALERT_TYPE_ID", + "description": [], + "signature": [ + "\"metrics.alert.threshold\"" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ML_ANOMALY_DETECTION_RULE_TYPE_ID", diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 1148507dab966..44205a617b4cc 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 123 | 0 | 120 | 0 | +| 124 | 0 | 121 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index b1ca937ff2031..ebebd5aa36981 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-04-16 +date: 2024-04-18 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 a70c115b771e9..29aa44178e6c4 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-04-16 +date: 2024-04-18 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 74c3b58890a6a..142fed875da9d 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 9544678a19d17..00a604403d590 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 250b713f3865b..2ca54dafef19c 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 48a2f907f9006..375b25f4a7eae 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-04-16 +date: 2024-04-18 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_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 712aff0a20e14..9baa1c4d15a0e 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index c089b1ddaf866..1fc78320a7f82 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 77055fb41bc6b..44d8c2ab3e297 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 732ae45357a19..3a2b6217b3c0b 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 7bd5c6dc9e959..cd87cf5751ce4 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-04-16 +date: 2024-04-18 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 6f18ff2a61ddd..4097879f26b64 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-04-16 +date: 2024-04-18 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 8ec2d0c01bfdb..74d72d5cd4702 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-04-16 +date: 2024-04-18 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 5a1573c4a72c5..18df717275644 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_securitysolution_autocomplete.devdocs.json index 472566e8db99c..821f1ac19a8b0 100644 --- a/api_docs/kbn_securitysolution_autocomplete.devdocs.json +++ b/api_docs/kbn_securitysolution_autocomplete.devdocs.json @@ -126,7 +126,7 @@ "label": "AutocompleteFieldMatchComponent", "description": [], "signature": [ - "{ ({ placeholder, rowLabel, selectedField, selectedValue, indexPattern, isLoading, isDisabled, isClearable, isRequired, fieldInputWidth, autocompleteService, onChange, onError, \"aria-label\": ariaLabel, }: React.PropsWithChildren): JSX.Element; displayName: string | undefined; }" + "{ ({ placeholder, rowLabel, selectedField, selectedValue, indexPattern, isLoading, isDisabled, isClearable, isRequired, fieldInputWidth, autocompleteService, onChange, onError, onWarning, warning, \"aria-label\": ariaLabel, }: React.PropsWithChildren): JSX.Element; displayName: string | undefined; }" ], "path": "packages/kbn-securitysolution-autocomplete/src/field_value_match/index.tsx", "deprecated": false, @@ -137,7 +137,7 @@ "id": "def-common.AutocompleteFieldMatchComponent.$1", "type": "CompoundType", "tags": [], - "label": "{\n placeholder,\n rowLabel,\n selectedField,\n selectedValue,\n indexPattern,\n isLoading,\n isDisabled = false,\n isClearable = false,\n isRequired = false,\n fieldInputWidth,\n autocompleteService,\n onChange,\n onError,\n 'aria-label': ariaLabel,\n}", + "label": "{\n placeholder,\n rowLabel,\n selectedField,\n selectedValue,\n indexPattern,\n isLoading,\n isDisabled = false,\n isClearable = false,\n isRequired = false,\n fieldInputWidth,\n autocompleteService,\n onChange,\n onError,\n onWarning,\n warning,\n 'aria-label': ariaLabel,\n}", "description": [], "signature": [ "React.PropsWithChildren" diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index b9b445f994fb6..1147f32de18f3 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-04-16 +date: 2024-04-18 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 254d6f9ef62ec..67963a38c496e 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-04-16 +date: 2024-04-18 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 91c0be28c6c1f..152c5fbb6881b 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-04-16 +date: 2024-04-18 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 ca87bc3f7a53e..32b45dbcd0152 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 97243356ce799..d82024b767986 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-04-16 +date: 2024-04-18 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 1ae37589979dc..ba475ceea246c 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-04-16 +date: 2024-04-18 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 245cbfd0388c3..88350258f3389 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 1b121afe28ac7..016063cff5372 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-04-16 +date: 2024-04-18 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 21ce9125b08c5..bca029ad06399 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-04-16 +date: 2024-04-18 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 de3c04d3738d1..56c30459a022b 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-04-16 +date: 2024-04-18 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 742701d35c142..285a6431eafeb 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 ae175212a0d4b..18ba5fbc92723 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-04-16 +date: 2024-04-18 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 32c516000cdc4..2c3c7524cbe3d 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-04-16 +date: 2024-04-18 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 00a2cec6a0ced..8f143a7194eef 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-04-16 +date: 2024-04-18 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 f3f1fa8c233a3..9b257ba056f7c 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 f65256e03cdca..643412a797a0d 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-04-16 +date: 2024-04-18 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 96f1a3396efca..b2da5f299536f 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-04-16 +date: 2024-04-18 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.devdocs.json b/api_docs/kbn_securitysolution_utils.devdocs.json index 54b6831fbe09d..784cec5638880 100644 --- a/api_docs/kbn_securitysolution_utils.devdocs.json +++ b/api_docs/kbn_securitysolution_utils.devdocs.json @@ -251,62 +251,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/securitysolution-utils", - "id": "def-common.hasWildcardAndInvalidOperator", - "type": "Function", - "tags": [], - "label": "hasWildcardAndInvalidOperator", - "description": [], - "signature": [ - "({ operator, value, }: { operator: \"match\" | \"wildcard\" | \"match_any\"; value: string; }) => boolean" - ], - "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/securitysolution-utils", - "id": "def-common.hasWildcardAndInvalidOperator.$1", - "type": "Object", - "tags": [], - "label": "{\n operator,\n value,\n}", - "description": [], - "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/securitysolution-utils", - "id": "def-common.hasWildcardAndInvalidOperator.$1.operator", - "type": "CompoundType", - "tags": [], - "label": "operator", - "description": [], - "signature": [ - "\"match\" | \"wildcard\" | \"match_any\"" - ], - "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/securitysolution-utils", - "id": "def-common.hasWildcardAndInvalidOperator.$1.value", - "type": "string", - "tags": [], - "label": "value", - "description": [], - "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/securitysolution-utils", "id": "def-common.isPathValid", @@ -576,6 +520,62 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.validateHasWildcardWithWrongOperator", + "type": "Function", + "tags": [], + "label": "validateHasWildcardWithWrongOperator", + "description": [], + "signature": [ + "({ operator, value, }: { operator: \"match\" | \"wildcard\" | \"nested\" | \"exists\" | \"match_any\"; value: string; }) => boolean" + ], + "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.validateHasWildcardWithWrongOperator.$1", + "type": "Object", + "tags": [], + "label": "{\n operator,\n value,\n}", + "description": [], + "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.validateHasWildcardWithWrongOperator.$1.operator", + "type": "CompoundType", + "tags": [], + "label": "operator", + "description": [], + "signature": [ + "\"match\" | \"wildcard\" | \"nested\" | \"exists\" | \"match_any\"" + ], + "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.validateHasWildcardWithWrongOperator.$1.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-utils", "id": "def-common.validatePotentialWildcardInput", @@ -797,6 +797,28 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.EventFiltersTypes", + "type": "Type", + "tags": [], + "label": "EventFiltersTypes", + "description": [], + "signature": [ + "\"nested\" | \"exists\" | ", + { + "pluginId": "@kbn/securitysolution-utils", + "scope": "common", + "docId": "kibKbnSecuritysolutionUtilsPluginApi", + "section": "def-common.EntryTypes", + "text": "EntryTypes" + } + ], + "path": "packages/kbn-securitysolution-utils/src/path_validations/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-utils", "id": "def-common.FILEPATH_WARNING", diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 70f630c471d43..5263eca83b48c 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detection-engine](https://github.com/orgs/elastic/tea | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 48 | 0 | 43 | 0 | +| 49 | 0 | 44 | 0 | ## Common diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 7c8f2b909c697..dcca4dfa69e60 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-04-16 +date: 2024-04-18 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 08d953d063115..6f2fd31cb9c8a 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-04-16 +date: 2024-04-18 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 18643f8eea234..6f453fef2d45f 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-04-16 +date: 2024-04-18 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 8cd55950cf30d..51efd6c2b8d40 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-04-16 +date: 2024-04-18 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 8f3f8e2f235c5..c4d441b244206 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-04-16 +date: 2024-04-18 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 547915734bdab..5ea4e8d9f0281 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-04-16 +date: 2024-04-18 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 8d53cb3e87f65..3b395909c0e97 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-04-16 +date: 2024-04-18 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 8872a3fcd86f7..fa16c5f0b076b 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-04-16 +date: 2024-04-18 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 267be65cad41c..85f7390016201 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-04-16 +date: 2024-04-18 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 ed2f7b91d526f..d461528d0a288 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 71f5462ac0007..800afb73430c7 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index f15c9a71b9aeb..2df358f71057c 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-04-16 +date: 2024-04-18 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 c272fe4af8510..de582f535f0ae 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-04-16 +date: 2024-04-18 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 f188f3ed3f837..120a29a586fac 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 920a37cd8ae39..d89a13bf95eae 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 5fa72a779af59..ba5bd6e6d1279 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index bbd57335302d0..88f40299b26a5 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-04-16 +date: 2024-04-18 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 e4f57effa5f1d..ab11a971ff219 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-04-16 +date: 2024-04-18 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 16d1f2e3e39a8..41bb1ad80ec49 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 969d377cad01a..f1cc02d3aa558 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 b32ca79ff59be..983eae4918a72 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-04-16 +date: 2024-04-18 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 eafda575c6a18..db0ecc1ccbccd 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-04-16 +date: 2024-04-18 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 6e4afdff89d2d..b0118afff036d 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-04-16 +date: 2024-04-18 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 158ea3efe9d86..7dadd53700ed0 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-04-16 +date: 2024-04-18 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 663120b1bc3ca..094c326ccdfaf 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-04-16 +date: 2024-04-18 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 aec69a383f6e3..8d31541a482a8 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 3cfbff02c567e..2592d6d7433b3 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-04-16 +date: 2024-04-18 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 7c9cb442a8363..071cddbe63152 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 c6ec8fab5f9ba..5dbc5628896fa 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-04-16 +date: 2024-04-18 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 34fbe1788fc1e..fe07eec17c623 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 48146e307ae5b..38d839b8a1e14 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-04-16 +date: 2024-04-18 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 013da7b99fa92..0708b4205c711 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 5da4b48df4a51..ec7d80fe62cae 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-04-16 +date: 2024-04-18 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 e3adb4d5a8272..cb0fb4df353c3 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 f5e143c839159..523183af70a29 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-04-16 +date: 2024-04-18 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 83b7298eae599..ae9245184032d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-04-16 +date: 2024-04-18 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 5644a02b5987f..22f1be659c3e4 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 27caa2baeb27a..237b77c3c3cd7 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 0a596e640cf1b..17a3e50f44147 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-04-16 +date: 2024-04-18 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 8d677feaec60d..7d56c7b3eb3b7 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-04-16 +date: 2024-04-18 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 159b3335e017c..461aae7049edc 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 03c35f1af586a..0c08ebaaa5e84 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-04-16 +date: 2024-04-18 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 580e28f109966..70e0a84ba2ca1 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-04-16 +date: 2024-04-18 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 4be2870c93e5a..a1eb31a656f15 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-04-16 +date: 2024-04-18 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 7d677e865c892..0e18f4cfb59aa 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-04-16 +date: 2024-04-18 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 b7347caf1cadc..bcb5f76136a11 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.devdocs.json b/api_docs/kbn_shared_ux_tabbed_modal.devdocs.json index 75761ef8367a5..7e71b0187a010 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.devdocs.json +++ b/api_docs/kbn_shared_ux_tabbed_modal.devdocs.json @@ -157,7 +157,7 @@ "label": "modalActionBtn", "description": [], "signature": [ - "IModalTabActionBtn" + "IModalTabActionBtn | undefined" ], "path": "packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx", "deprecated": false, diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 62d45d5df66dc..6afb7b3795ed9 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index ea98384546d6f..c138e93ab76da 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-04-16 +date: 2024-04-18 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 75b4c84fa7fe2..b5d6d56dcc976 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -563,7 +563,7 @@ "signature": [ "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -578,7 +578,7 @@ "signature": [ "{ type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -593,7 +593,7 @@ "signature": [ "\"occurrences\" | \"timeslices\"" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -608,7 +608,7 @@ "signature": [ "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -663,7 +663,7 @@ }, " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -678,7 +678,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -693,7 +693,7 @@ "signature": [ "{ list: { sloId: string; instanceId: string; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -708,7 +708,7 @@ "signature": [ "{ list: { sloId: string; instanceId: string; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -721,9 +721,33 @@ "label": "FetchHistoricalSummaryParams", "description": [], "signature": [ - "{ list: { sloId: string; instanceId: string; }[]; }" + "{ list: ({ sloId: string; instanceId: 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; }; groupBy: string | string[]; revision: number; } & { remoteName?: string | undefined; })[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -738,7 +762,7 @@ "signature": [ "{ sloId: string; instanceId: string; data: ({ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; })[]; }[]" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -753,7 +777,7 @@ "signature": [ "{ search?: string | undefined; includeOutdatedOnly?: boolean | undefined; page?: string | undefined; perPage?: string | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -766,9 +790,9 @@ "label": "FindSLODefinitionsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; })[]; }" + "{ page: number; perPage: number; total: number; results: { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -781,9 +805,9 @@ "label": "FindSLOGroupsParams", "description": [], "signature": [ - "{ page?: string | undefined; perPage?: string | undefined; groupBy?: \"status\" | \"ungrouped\" | \"slo.tags\" | \"slo.indicator.type\" | undefined; groupsFilter?: string | string[] | undefined; kqlQuery?: string | undefined; filters?: string | undefined; }" + "{ page?: string | undefined; perPage?: string | undefined; groupBy?: \"status\" | \"_index\" | \"ungrouped\" | \"slo.tags\" | \"slo.indicator.type\" | undefined; groupsFilter?: string | string[] | undefined; kqlQuery?: string | undefined; filters?: string | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -798,7 +822,7 @@ "signature": [ "{ page: number; perPage: number; total: number; results: { group: string; groupBy: string; summary: { total: number; worst: { sliValue: number; status: string; slo: { id: string; instanceId: string; name: string; }; }; violated: number; healthy: number; degrading: number; noData: number; }; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -813,7 +837,7 @@ "signature": [ "{ filters?: string | undefined; kqlQuery?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"status\" | \"error_budget_consumed\" | \"error_budget_remaining\" | \"sli_value\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -826,9 +850,9 @@ "label": "FindSLOResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; })[]; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -849,9 +873,9 @@ "section": "def-common.Duration", "text": "Duration" }, - " | undefined; }) | undefined; instanceId?: string | undefined; groupBy?: string | undefined; groupings?: { [x: string]: unknown; } | undefined; }" + " | undefined; }) | undefined; instanceId?: string | undefined; groupBy?: string | undefined; remoteName?: string | undefined; groupings?: { [x: string]: unknown; } | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -866,7 +890,7 @@ "signature": [ "({ date: string; sliValue: number; } & { events?: { good: number; bad: number; total: number; } | undefined; })[]" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -881,7 +905,7 @@ "signature": [ "{ burnRates: { name: string; burnRate: number; sli: number; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -896,7 +920,7 @@ "signature": [ "{ groupBy: string | string[]; instances: string[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -909,9 +933,9 @@ "label": "GetSLOParams", "description": [], "signature": [ - "{ instanceId?: string | undefined; }" + "{ instanceId?: string | undefined; remoteName?: string | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -924,9 +948,39 @@ "label": "GetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.GetSLOSettingsResponse", + "type": "Type", + "tags": [], + "label": "GetSLOSettingsResponse", + "description": [], + "signature": [ + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.GroupingsSchema", + "type": "Type", + "tags": [], + "label": "GroupingsSchema", + "description": [], + "signature": [ + "{ [x: string]: string | number; }" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -941,7 +995,7 @@ "signature": [ "{ total: number; worst: { sliValue: number; status: string; slo: { id: string; instanceId: string; name: string; }; }; violated: number; healthy: number; degrading: number; noData: number; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -956,7 +1010,7 @@ "signature": [ "{ type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -971,7 +1025,7 @@ "signature": [ "{ date: string; } & { 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/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -986,7 +1040,7 @@ "signature": [ "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1001,7 +1055,7 @@ "signature": [ "\"sli.apm.transactionDuration\" | \"sli.apm.transactionErrorRate\" | \"sli.synthetics.availability\" | \"sli.kql.custom\" | \"sli.metric.custom\" | \"sli.metric.timeslice\" | \"sli.histogram.custom\"" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1016,7 +1070,7 @@ "signature": [ "{ type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1031,7 +1085,7 @@ "signature": [ "{ kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1046,7 +1100,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/manage.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1061,7 +1115,7 @@ "signature": [ "{ type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1076,80 +1130,95 @@ "signature": [ "{ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.QuerySchema", + "id": "def-common.PutSLOSettingsParams", "type": "Type", "tags": [], - "label": "QuerySchema", + "label": "PutSLOSettingsParams", "description": [], "signature": [ - "string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }" + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.ResetSLOParams", + "id": "def-common.PutSLOSettingsResponse", "type": "Type", "tags": [], - "label": "ResetSLOParams", + "label": "PutSLOSettingsResponse", "description": [], "signature": [ - "{ id: string; }" + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.ResetSLOResponse", + "id": "def-common.QuerySchema", "type": "Type", "tags": [], - "label": "ResetSLOResponse", + "label": "QuerySchema", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; }" + "string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.SLOGroupWithSummaryResponse", + "id": "def-common.ResetSLOParams", "type": "Type", "tags": [], - "label": "SLOGroupWithSummaryResponse", + "label": "ResetSLOParams", "description": [], "signature": [ - "{ group: string; groupBy: string; summary: { total: number; worst: { sliValue: number; status: string; slo: { id: string; instanceId: string; name: string; }; }; violated: number; healthy: number; degrading: number; noData: number; }; }" + "{ id: string; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.SLOResponse", + "id": "def-common.ResetSLOResponse", + "type": "Type", + "tags": [], + "label": "ResetSLOResponse", + "description": [], + "signature": [ + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.SLODefinitionResponse", "type": "Type", "tags": [], - "label": "SLOResponse", + "label": "SLODefinitionResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1164,7 +1233,7 @@ "label": "SLOWithSummaryResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1181,7 +1250,7 @@ "signature": [ "{ type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1196,7 +1265,7 @@ "signature": [ "{ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1211,7 +1280,7 @@ "signature": [ "{ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1226,7 +1295,7 @@ "signature": [ "{ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1241,22 +1310,22 @@ "signature": [ "{ type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.TimeWindow", + "id": "def-common.TimeWindowType", "type": "Type", "tags": [], - "label": "TimeWindow", + "label": "TimeWindowType", "description": [], "signature": [ "\"rolling\" | \"calendarAligned\"" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1271,7 +1340,7 @@ "signature": [ "{ 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 | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1326,7 +1395,7 @@ }, " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1339,9 +1408,9 @@ "label": "UpdateSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string | string[]; createdAt: string; updatedAt: string; version: number; } & { instanceId?: string | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3079,7 +3148,25 @@ "NumberC", "; }>]>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.createSLOResponseSchema", + "type": "Object", + "tags": [], + "label": "createSLOResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; }>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3141,7 +3228,7 @@ "StringC", "; }>>; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3161,7 +3248,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3228,14 +3315,92 @@ "<{ list: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ sloId: ", "StringC", "; instanceId: ", "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>; }>]>; groupBy: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + ", ", + "ArrayC", + "<", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>>]>; revision: ", + "NumberC", + "; }>, ", + "PartialC", + "<{ remoteName: ", + "StringC", + "; }>]>>; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3293,7 +3458,7 @@ "BooleanC", "; }>; }>]>>; }>>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3319,7 +3484,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3342,8 +3507,6 @@ "; results: ", "ArrayC", "<", - "IntersectionC", - "<[", "TypeC", "<{ id: ", "StringC", @@ -4679,9 +4842,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -4703,13 +4864,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -4723,23 +4890,11 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", - "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>]>>; }>" + "; }>>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4769,7 +4924,9 @@ "LiteralC", "<\"status\">, ", "LiteralC", - "<\"slo.indicator.type\">]>; groupsFilter: ", + "<\"slo.indicator.type\">, ", + "LiteralC", + "<\"_index\">]>; groupsFilter: ", "UnionC", "<[", "ArrayC", @@ -4783,7 +4940,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4839,7 +4996,7 @@ "NumberC", "; }>; }>>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4881,7 +5038,7 @@ "LiteralC", "<\"desc\">]>; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4906,8 +5063,6 @@ "<", "IntersectionC", "<[", - "IntersectionC", - "<[", "TypeC", "<{ id: ", "StringC", @@ -6243,9 +6398,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -6267,13 +6420,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -6287,23 +6446,9 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>]>, ", - "IntersectionC", - "<[", "TypeC", "<{ summary: ", "TypeC", @@ -6341,7 +6486,13 @@ "NumberC", "]>>; }>, ", "PartialC", - "<{ meta: ", + "<{ instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; meta: ", "PartialC", "<{ synthetics: ", "TypeC", @@ -6351,9 +6502,15 @@ "StringC", "; configId: ", "StringC", - "; }>; }>; }>]>]>>; }>" + "; }>; }>; remote: ", + "TypeC", + "<{ remoteName: ", + "StringC", + "; kibanaUrl: ", + "StringC", + "; }>; }>]>>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7675,6 +7832,8 @@ "StringC", "; groupBy: ", "StringC", + "; remoteName: ", + "StringC", "; groupings: ", "RecordC", "<", @@ -7683,7 +7842,7 @@ "UnknownC", ">; }>]>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7717,7 +7876,7 @@ "NumberC", "; }>; }>]>>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7736,6 +7895,8 @@ "<{ id: ", "StringC", "; }>; body: ", + "IntersectionC", + "<[", "TypeC", "<{ instanceId: ", "UnionC", @@ -7759,9 +7920,13 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>>; }>; }>" + ", string, unknown>; }>>; }>, ", + "PartialC", + "<{ remoteName: ", + "StringC", + "; }>]>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7787,7 +7952,7 @@ "NumberC", "; }>>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7807,7 +7972,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7835,7 +8000,7 @@ "StringC", ">; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7865,9 +8030,11 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; }>; }>]>" + "]>; remoteName: ", + "StringC", + "; }>; }>]>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -7880,8 +8047,6 @@ "label": "getSLOResponseSchema", "description": [], "signature": [ - "IntersectionC", - "<[", "IntersectionC", "<[", "TypeC", @@ -9219,9 +9384,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -9243,13 +9406,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -9263,23 +9432,9 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>]>, ", - "IntersectionC", - "<[", "TypeC", "<{ summary: ", "TypeC", @@ -9317,7 +9472,13 @@ "NumberC", "]>>; }>, ", "PartialC", - "<{ meta: ", + "<{ instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; meta: ", "PartialC", "<{ synthetics: ", "TypeC", @@ -9327,9 +9488,43 @@ "StringC", "; configId: ", "StringC", - "; }>; }>; }>]>]>" + "; }>; }>; remote: ", + "TypeC", + "<{ remoteName: ", + "StringC", + "; kibanaUrl: ", + "StringC", + "; }>; }>]>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.groupBySchema", + "type": "Object", + "tags": [], + "label": "groupBySchema", + "description": [], + "signature": [ + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + ", ", + "ArrayC", + "<", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>>]>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -9763,7 +9958,7 @@ "BooleanC", "; }>; }>]>" ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11318,7 +11513,7 @@ "signature": [ "StringC" ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", + "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11374,7 +11569,7 @@ "AnyC", ">; }>>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", + "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11394,7 +11589,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/manage.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -11987,32 +12182,46 @@ }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.previewDataSchema", + "id": "def-common.putSLOSettingsParamsSchema", "type": "Object", "tags": [], - "label": "previewDataSchema", + "label": "putSLOSettingsParamsSchema", "description": [], "signature": [ - "IntersectionC", - "<[", "TypeC", - "<{ date: ", - "Type", - "; sliValue: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ events: ", + "<{ body: ", "TypeC", - "<{ good: ", - "NumberC", - "; bad: ", - "NumberC", - "; total: ", - "NumberC", - "; }>; }>]>" + "<{ useAllRemoteClusters: ", + "BooleanC", + "; selectedRemoteClusters: ", + "ArrayC", + "<", + "StringC", + ">; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.putSLOSettingsResponseSchema", + "type": "Object", + "tags": [], + "label": "putSLOSettingsResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ useAllRemoteClusters: ", + "BooleanC", + "; selectedRemoteClusters: ", + "ArrayC", + "<", + "StringC", + ">; }>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -12072,6 +12281,26 @@ "AnyC", ">; }>>; }>]>" ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.remoteSchema", + "type": "Object", + "tags": [], + "label": "remoteSchema", + "description": [], + "signature": [ + "TypeC", + "<{ remoteName: ", + "StringC", + "; kibanaUrl: ", + "StringC", + "; }>" + ], "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, @@ -12092,7 +12321,7 @@ "StringC", "; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -12105,8 +12334,6 @@ "label": "resetSLOResponseSchema", "description": [], "signature": [ - "IntersectionC", - "<[", "TypeC", "<{ id: ", "StringC", @@ -13442,9 +13669,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -13466,13 +13691,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -13486,23 +13717,11 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", - "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>]>" + "; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -13512,2886 +13731,11 @@ "id": "def-common.rollingTimeWindowSchema", "type": "Object", "tags": [], - "label": "rollingTimeWindowSchema", - "description": [], - "signature": [ - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/time_window.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.rollingTimeWindowTypeSchema", - "type": "Object", - "tags": [], - "label": "rollingTimeWindowTypeSchema", - "description": [], - "signature": [ - "LiteralC", - "<\"rolling\">" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/time_window.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.settingsSchema", - "type": "Object", - "tags": [], - "label": "settingsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ 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>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.sloGroupWithSummaryResponseSchema", - "type": "Object", - "tags": [], - "label": "sloGroupWithSummaryResponseSchema", - "description": [], - "signature": [ - "TypeC", - "<{ group: ", - "StringC", - "; groupBy: ", - "StringC", - "; summary: ", - "TypeC", - "<{ total: ", - "NumberC", - "; worst: ", - "TypeC", - "<{ sliValue: ", - "NumberC", - "; status: ", - "StringC", - "; slo: ", - "TypeC", - "<{ id: ", - "StringC", - "; instanceId: ", - "StringC", - "; name: ", - "StringC", - "; }>; }>; violated: ", - "NumberC", - "; healthy: ", - "NumberC", - "; degrading: ", - "NumberC", - "; noData: ", - "NumberC", - "; }>; }>" - ], - "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.sloIdSchema", - "type": "Object", - "tags": [], - "label": "sloIdSchema", - "description": [], - "signature": [ - "StringC" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.sloResponseSchema", - "type": "Object", - "tags": [], - "label": "sloResponseSchema", - "description": [], - "signature": [ - "IntersectionC", - "<[", - "TypeC", - "<{ id: ", - "StringC", - "; 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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.synthetics.availability\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ monitorIds: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ tags: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; projects: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.kql.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; total: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.metric.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"sum\">; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; }>; total: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"sum\">; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; }>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.metric.timeslice\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; metric: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "KeyofC", - "<{ avg: boolean; max: boolean; min: boolean; sum: boolean; cardinality: boolean; last_value: boolean; std_deviation: boolean; }>; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"percentile\">; field: ", - "StringC", - "; percentile: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; threshold: ", - "NumberC", - "; comparator: ", - "KeyofC", - "<{ GT: string; GTE: string; LT: string; LTE: string; }>; }>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"value_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>]>; 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>; }>]>; revision: ", - "NumberC", - "; settings: ", - "TypeC", - "<{ 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>; }>; enabled: ", - "BooleanC", - "; tags: ", - "ArrayC", - "<", - "StringC", - ">; groupBy: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - ", ", - "ArrayC", - "<", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "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.sloSchema", - "type": "Object", - "tags": [], - "label": "sloSchema", - "description": [], - "signature": [ - "TypeC", - "<{ id: ", - "StringC", - "; 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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.synthetics.availability\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ monitorIds: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ tags: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; projects: ", - "ArrayC", - "<", - "TypeC", - "<{ value: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; label: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.kql.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; total: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.metric.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"sum\">; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; }>; total: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"sum\">; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; }>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.metric.timeslice\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; metric: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "KeyofC", - "<{ avg: boolean; max: boolean; min: boolean; sum: boolean; cardinality: boolean; last_value: boolean; std_deviation: boolean; }>; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"doc_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"percentile\">; field: ", - "StringC", - "; percentile: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", - "StringC", - "; threshold: ", - "NumberC", - "; comparator: ", - "KeyofC", - "<{ GT: string; GTE: string; LT: string; LTE: string; }>; }>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>, ", - "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: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"value_count\">; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", - "PartialC", - "<{ filter: ", - "UnionC", - "<[", - "StringC", - ", ", - "TypeC", - "<{ kqlQuery: ", - "StringC", - "; filters: ", - "ArrayC", - "<", - "TypeC", - "<{ meta: ", - "PartialC", - "<{ alias: ", - "UnionC", - "<[", - "StringC", - ", ", - "NullC", - "]>; disabled: ", - "BooleanC", - "; negate: ", - "BooleanC", - "; controlledBy: ", - "StringC", - "; group: ", - "StringC", - "; index: ", - "StringC", - "; isMultiIndex: ", - "BooleanC", - "; type: ", - "StringC", - "; key: ", - "StringC", - "; params: ", - "AnyC", - "; value: ", - "StringC", - "; }>; query: ", - "RecordC", - "<", - "StringC", - ", ", - "AnyC", - ">; }>>; }>]>; }>]>; }>]>; 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: ", + "label": "rollingTimeWindowSchema", + "description": [], + "signature": [ + "TypeC", + "<{ duration: ", "Type", "<", { @@ -16401,7 +13745,39 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; settings: ", + ", string, unknown>; type: ", + "LiteralC", + "<\"rolling\">; }>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/time_window.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.rollingTimeWindowTypeSchema", + "type": "Object", + "tags": [], + "label": "rollingTimeWindowTypeSchema", + "description": [], + "signature": [ + "LiteralC", + "<\"rolling\">" + ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/time_window.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.settingsSchema", + "type": "Object", + "tags": [], + "label": "settingsSchema", + "description": [], + "signature": [ "TypeC", "<{ syncDelay: ", "Type", @@ -16423,35 +13799,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; revision: ", - "NumberC", - "; enabled: ", - "BooleanC", - "; tags: ", - "ArrayC", - "<", - "StringC", - ">; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; groupBy: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - ", ", - "ArrayC", - "<", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>>]>; version: ", - "NumberC", - "; }>" + ", string, unknown>; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", "deprecated": false, @@ -16460,16 +13808,12 @@ }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.sloWithSummaryResponseSchema", + "id": "def-common.sloDefinitionSchema", "type": "Object", "tags": [], - "label": "sloWithSummaryResponseSchema", + "label": "sloDefinitionSchema", "description": [], "signature": [ - "IntersectionC", - "<[", - "IntersectionC", - "<[", "TypeC", "<{ id: ", "StringC", @@ -17805,9 +15149,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -17829,13 +15171,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -17849,83 +15197,104 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", - "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", + "; }>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.sloGroupWithSummaryResponseSchema", + "type": "Object", + "tags": [], + "label": "sloGroupWithSummaryResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ group: ", "StringC", - "]>; }>]>, ", - "IntersectionC", - "<[", + "; groupBy: ", + "StringC", + "; summary: ", "TypeC", - "<{ summary: ", + "<{ total: ", + "NumberC", + "; worst: ", "TypeC", - "<{ status: ", - "UnionC", - "<[", - "LiteralC", - "<\"NO_DATA\">, ", - "LiteralC", - "<\"HEALTHY\">, ", - "LiteralC", - "<\"DEGRADING\">, ", - "LiteralC", - "<\"VIOLATED\">]>; sliValue: ", + "<{ sliValue: ", "NumberC", - "; errorBudget: ", + "; status: ", + "StringC", + "; slo: ", "TypeC", - "<{ initial: ", + "<{ id: ", + "StringC", + "; instanceId: ", + "StringC", + "; name: ", + "StringC", + "; }>; }>; violated: ", "NumberC", - "; consumed: ", + "; healthy: ", "NumberC", - "; remaining: ", + "; degrading: ", "NumberC", - "; isEstimated: ", - "BooleanC", - "; }>; }>; groupings: ", - "RecordC", - "<", - "StringC", - ", ", - "UnionC", - "<[", - "StringC", - ", ", + "; noData: ", "NumberC", - "]>>; }>, ", - "PartialC", - "<{ meta: ", - "PartialC", - "<{ synthetics: ", + "; }>; }>" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.sloIdSchema", + "type": "Object", + "tags": [], + "label": "sloIdSchema", + "description": [], + "signature": [ + "StringC" + ], + "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.sloSettingsSchema", + "type": "Object", + "tags": [], + "label": "sloSettingsSchema", + "description": [], + "signature": [ "TypeC", - "<{ monitorId: ", - "StringC", - "; locationId: ", - "StringC", - "; configId: ", + "<{ useAllRemoteClusters: ", + "BooleanC", + "; selectedRemoteClusters: ", + "ArrayC", + "<", "StringC", - "; }>; }>; }>]>]>" + ">; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/schema/settings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.sloWithSummarySchema", + "id": "def-common.sloWithDataResponseSchema", "type": "Object", "tags": [], - "label": "sloWithSummarySchema", + "label": "sloWithDataResponseSchema", "description": [], "signature": [ "IntersectionC", @@ -19351,9 +16720,33 @@ "StringC", ", ", "NumberC", - "]>>; }>]>" + "]>>; }>, ", + "PartialC", + "<{ instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; meta: ", + "PartialC", + "<{ synthetics: ", + "TypeC", + "<{ monitorId: ", + "StringC", + "; locationId: ", + "StringC", + "; configId: ", + "StringC", + "; }>; }>; remote: ", + "TypeC", + "<{ remoteName: ", + "StringC", + "; kibanaUrl: ", + "StringC", + "; }>; }>]>" ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -21801,7 +19194,7 @@ "StringC", "]>>]>; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -21814,8 +19207,6 @@ "label": "updateSLOResponseSchema", "description": [], "signature": [ - "IntersectionC", - "<[", "TypeC", "<{ id: ", "StringC", @@ -23151,9 +20542,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; revision: ", - "NumberC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "TypeC", "<{ syncDelay: ", "Type", @@ -23175,13 +20564,19 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>; enabled: ", + ", string, unknown>; }>; revision: ", + "NumberC", + "; enabled: ", "BooleanC", "; tags: ", "ArrayC", "<", "StringC", - ">; groupBy: ", + ">; createdAt: ", + "Type", + "; updatedAt: ", + "Type", + "; groupBy: ", "UnionC", "<[", "LiteralC", @@ -23195,23 +20590,11 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>>]>; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; version: ", + "]>>]>; version: ", "NumberC", - "; }>, ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>]>" + "; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 789a0364cde66..48179bbcd016b 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 165 | 0 | 165 | 0 | +| 171 | 0 | 171 | 0 | ## Common diff --git a/api_docs/kbn_solution_nav_analytics.mdx b/api_docs/kbn_solution_nav_analytics.mdx index c43ba975f02c6..e50fcda4e019a 100644 --- a/api_docs/kbn_solution_nav_analytics.mdx +++ b/api_docs/kbn_solution_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-analytics title: "@kbn/solution-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-analytics plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-analytics'] --- import kbnSolutionNavAnalyticsObj from './kbn_solution_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index 927950754dc08..bd5118a895aa8 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 843b9e4c635ef..251f3a6c5615c 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 341d02747be38..e39f976724660 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index c6173fa7b9048..a2358bd00562b 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 41764022a2d90..688a300682908 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-04-16 +date: 2024-04-18 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 2c8e1db959643..e06f6d395633e 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-04-16 +date: 2024-04-18 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 60aff254f3976..8e497093077b6 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 4bb0c5f0b0fcc..c60b48d5465dc 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index 4d6eede1c4d9a..3c3bc71f68089 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -3303,7 +3303,7 @@ "signature": [ "Pick<", "ServerlessOptions", - ", \"host\" | \"tag\" | \"image\" | \"dataPath\" | \"resources\" | \"kibanaUrl\" | \"projectType\"> | undefined" + ", \"host\" | \"tag\" | \"image\" | \"dataPath\" | \"kibanaUrl\" | \"resources\" | \"projectType\"> | undefined" ], "path": "packages/kbn-test/src/es/test_es_cluster.ts", "deprecated": false, diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 6cf84a87f9114..8e7a5cf56abde 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 990910750e5a1..e071f629796a2 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 5287729b38e29..3c3e4f73e08b8 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-04-16 +date: 2024-04-18 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 b9c017833942c..227cd6e0eac0b 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-04-16 +date: 2024-04-18 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 da5d05fb4675f..6726a6bf12bd3 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 39954baa42835..d256243b87635 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 6fa7810410e8d..3dea1c15c7d14 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 8fff7a0f09ffd..e3e44e6654124 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 286d8b2470bcb..b3a25384b06fc 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-04-16 +date: 2024-04-18 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 140259debad80..7700453209909 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-04-16 +date: 2024-04-18 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 e100753b638e6..ac998e05178fb 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-04-16 +date: 2024-04-18 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 04686385ead35..6c0a3cd8c4102 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-04-16 +date: 2024-04-18 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 7f0cb6d5e8d3e..dfc2ec47945a0 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 23c3d47385761..8aed5040c8b0c 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -743,7 +743,8 @@ "label": "rowHeight", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode", + " | undefined" ], "path": "packages/kbn-unified-data-table/src/components/row_height_settings.tsx", "deprecated": false, @@ -810,7 +811,9 @@ "label": "onChangeRowHeight", "description": [], "signature": [ - "(newHeightMode: \"custom\" | \"auto\" | \"single\" | undefined) => void" + "(newHeightMode: ", + "RowHeightMode", + " | undefined) => void" ], "path": "packages/kbn-unified-data-table/src/components/row_height_settings.tsx", "deprecated": false, @@ -824,7 +827,8 @@ "label": "newHeightMode", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode", + " | undefined" ], "path": "packages/kbn-unified-data-table/src/components/row_height_settings.tsx", "deprecated": false, diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 0a3dbea282a8a..29c21f501f357 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.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 | |-------------------|-----------|------------------------|-----------------| -| 151 | 0 | 83 | 1 | +| 151 | 0 | 83 | 2 | ## Common diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 70fb4234a2160..66512143aadfa 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-04-16 +date: 2024-04-18 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 74596871730ba..982e17b0c690b 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 1bc63fb2052a4..f002e12022edd 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 132adae437c0c..ea472f39377a7 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-04-16 +date: 2024-04-18 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 0bca9de29ca7c..9f4c06c330e79 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-04-16 +date: 2024-04-18 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 768fa68d66983..0dd0e8b5ba246 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-04-16 +date: 2024-04-18 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 cfd1945c8bab7..a9fc8461c5361 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-04-16 +date: 2024-04-18 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 6a00447ee4d59..55320a8b9c787 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-04-16 +date: 2024-04-18 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 8f1b687793a34..0590668152354 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 1aa238ce8daf4..3d7ae6a752f37 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 8ad846e16bfb8..4957ba17ff726 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-04-16 +date: 2024-04-18 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 75b37db9fd4b7..a241c63d63a67 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 7345fd465913d..e22c9d8983095 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index fb28cfee7d0c3..4be052a115965 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-04-16 +date: 2024-04-18 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 59a23a0487234..3d244c4093fcd 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -511,42 +511,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "uiActions", - "path": "src/plugins/ui_actions/public/context_menu/open_context_menu.tsx" - }, - { - "plugin": "uiActions", - "path": "src/plugins/ui_actions/public/context_menu/open_context_menu.tsx" - }, - { - "plugin": "uiActions", - "path": "src/plugins/ui_actions/public/context_menu/open_context_menu.tsx" - }, - { - "plugin": "home", - "path": "src/plugins/home/public/application/application.tsx" - }, - { - "plugin": "home", - "path": "src/plugins/home/public/application/application.tsx" - }, - { - "plugin": "home", - "path": "src/plugins/home/public/application/application.tsx" - }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, { "plugin": "spaces", "path": "x-pack/plugins/spaces/public/management/spaces_management_app.tsx" @@ -779,18 +743,6 @@ "plugin": "visualizations", "path": "src/plugins/visualizations/public/visualize_app/index.tsx" }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx" - }, { "plugin": "expressionXY", "path": "src/plugins/chart_expressions/expression_xy/public/expression_renderers/xy_chart_renderer.tsx" @@ -1083,22 +1035,6 @@ "plugin": "expressionShape", "path": "src/plugins/expression_shape/public/expression_renderers/progress_renderer.tsx" }, - { - "plugin": "licenseManagement", - "path": "x-pack/plugins/license_management/public/shared_imports.ts" - }, - { - "plugin": "licenseManagement", - "path": "x-pack/plugins/license_management/public/application/app_providers.tsx" - }, - { - "plugin": "licenseManagement", - "path": "x-pack/plugins/license_management/public/application/app_providers.tsx" - }, - { - "plugin": "licenseManagement", - "path": "x-pack/plugins/license_management/public/application/app_providers.tsx" - }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx" @@ -1219,38 +1155,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/shared_imports.ts" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/index.tsx" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/index.tsx" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/index.tsx" - }, { "plugin": "crossClusterReplication", "path": "x-pack/plugins/cross_cluster_replication/public/shared_imports.ts" }, - { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/public/app/index.tsx" - }, - { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/public/app/index.tsx" - }, - { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/public/app/index.tsx" - }, { "plugin": "graph", "path": "x-pack/plugins/graph/public/application.tsx" @@ -1267,38 +1175,10 @@ "plugin": "grokdebugger", "path": "x-pack/plugins/grokdebugger/public/shared_imports.ts" }, - { - "plugin": "indexLifecycleManagement", - "path": "x-pack/plugins/index_lifecycle_management/public/shared_imports.ts" - }, - { - "plugin": "indexLifecycleManagement", - "path": "x-pack/plugins/index_lifecycle_management/public/application/index.tsx" - }, - { - "plugin": "indexLifecycleManagement", - "path": "x-pack/plugins/index_lifecycle_management/public/application/index.tsx" - }, - { - "plugin": "indexLifecycleManagement", - "path": "x-pack/plugins/index_lifecycle_management/public/application/index.tsx" - }, { "plugin": "ingestPipelines", "path": "x-pack/plugins/ingest_pipelines/public/shared_imports.ts" }, - { - "plugin": "ingestPipelines", - "path": "x-pack/plugins/ingest_pipelines/public/application/index.tsx" - }, - { - "plugin": "ingestPipelines", - "path": "x-pack/plugins/ingest_pipelines/public/application/index.tsx" - }, - { - "plugin": "ingestPipelines", - "path": "x-pack/plugins/ingest_pipelines/public/application/index.tsx" - }, { "plugin": "metricsDataAccess", "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" @@ -1311,18 +1191,6 @@ "plugin": "metricsDataAccess", "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx" - }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx" - }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/observability_solution/exploratory_view/public/application/index.tsx" - }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/public/shared_components/osquery_results/osquery_result_wrapper.tsx" @@ -1387,18 +1255,6 @@ "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/index.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/index.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/index.tsx" - }, { "plugin": "painlessLab", "path": "x-pack/plugins/painless_lab/public/shared_imports.ts" @@ -1415,26 +1271,6 @@ "plugin": "painlessLab", "path": "x-pack/plugins/painless_lab/public/application/index.tsx" }, - { - "plugin": "remoteClusters", - "path": "x-pack/plugins/remote_clusters/public/shared_imports.ts" - }, - { - "plugin": "rollup", - "path": "x-pack/plugins/rollup/public/shared_imports.ts" - }, - { - "plugin": "rollup", - "path": "x-pack/plugins/rollup/public/application.tsx" - }, - { - "plugin": "rollup", - "path": "x-pack/plugins/rollup/public/application.tsx" - }, - { - "plugin": "rollup", - "path": "x-pack/plugins/rollup/public/application.tsx" - }, { "plugin": "searchprofiler", "path": "x-pack/plugins/searchprofiler/public/shared_imports.ts" @@ -1475,22 +1311,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/app/app.tsx" }, - { - "plugin": "snapshotRestore", - "path": "x-pack/plugins/snapshot_restore/public/shared_imports.ts" - }, - { - "plugin": "snapshotRestore", - "path": "x-pack/plugins/snapshot_restore/public/application/app_providers.tsx" - }, - { - "plugin": "snapshotRestore", - "path": "x-pack/plugins/snapshot_restore/public/application/app_providers.tsx" - }, - { - "plugin": "snapshotRestore", - "path": "x-pack/plugins/snapshot_restore/public/application/app_providers.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/app.tsx" @@ -1503,50 +1323,6 @@ "plugin": "transform", "path": "x-pack/plugins/transform/public/app/app.tsx" }, - { - "plugin": "upgradeAssistant", - "path": "x-pack/plugins/upgrade_assistant/public/shared_imports.ts" - }, - { - "plugin": "upgradeAssistant", - "path": "x-pack/plugins/upgrade_assistant/public/application/app.tsx" - }, - { - "plugin": "upgradeAssistant", - "path": "x-pack/plugins/upgrade_assistant/public/application/app.tsx" - }, - { - "plugin": "upgradeAssistant", - "path": "x-pack/plugins/upgrade_assistant/public/application/app.tsx" - }, - { - "plugin": "watcher", - "path": "x-pack/plugins/watcher/public/application/shared_imports.ts" - }, - { - "plugin": "watcher", - "path": "x-pack/plugins/watcher/public/application/index.tsx" - }, - { - "plugin": "watcher", - "path": "x-pack/plugins/watcher/public/application/index.tsx" - }, - { - "plugin": "watcher", - "path": "x-pack/plugins/watcher/public/application/index.tsx" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/app.tsx" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/app.tsx" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/app.tsx" - }, { "plugin": "apm", "path": "x-pack/plugins/observability_solution/apm/public/application/index.tsx" @@ -1571,42 +1347,6 @@ "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx" - }, - { - "plugin": "ux", - "path": "x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx" - }, - { - "plugin": "ux", - "path": "x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx" - }, - { - "plugin": "ux", - "path": "x-pack/plugins/observability_solution/ux/public/application/ux_app.tsx" - }, { "plugin": "filesManagement", "path": "src/plugins/files_management/public/mount_management_section.tsx" @@ -1619,18 +1359,6 @@ "plugin": "filesManagement", "path": "src/plugins/files_management/public/mount_management_section.tsx" }, - { - "plugin": "kibanaOverview", - "path": "src/plugins/kibana_overview/public/application.tsx" - }, - { - "plugin": "kibanaOverview", - "path": "src/plugins/kibana_overview/public/application.tsx" - }, - { - "plugin": "kibanaOverview", - "path": "src/plugins/kibana_overview/public/application.tsx" - }, { "plugin": "visDefaultEditor", "path": "src/plugins/vis_default_editor/public/default_editor_controller.tsx" @@ -2392,26 +2120,6 @@ "plugin": "visualizations", "path": "src/plugins/visualizations/public/visualize_app/index.tsx" }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/components/edition_modal/open_modal.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/components/assign_flyout/open_assign_flyout.tsx" - }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/components/assign_flyout/open_assign_flyout.tsx" - }, { "plugin": "dataViewFieldEditor", "path": "src/plugins/data_view_field_editor/public/shared_imports.ts" @@ -2512,14 +2220,6 @@ "plugin": "observabilityShared", "path": "x-pack/plugins/observability_solution/observability_shared/public/components/header_menu/header_menu_portal.tsx" }, - { - "plugin": "banners", - "path": "x-pack/plugins/banners/public/plugin.tsx" - }, - { - "plugin": "banners", - "path": "x-pack/plugins/banners/public/plugin.tsx" - }, { "plugin": "maps", "path": "x-pack/plugins/maps/public/render_app.tsx" @@ -2772,54 +2472,6 @@ "plugin": "graph", "path": "x-pack/plugins/graph/public/application.tsx" }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx" - }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/components/cluster/listing/listing.js" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/components/cluster/listing/listing.js" - }, - { - "plugin": "monitoring", - "path": "x-pack/plugins/monitoring/public/components/cluster/listing/listing.js" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx" @@ -2872,90 +2524,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx" }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/toast_title.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/browser_test_results.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/delete_monitor.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/global_params/delete_param.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/show_sync_errors.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/show_sync_errors.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/simple_test_results.tsx" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/test_now_mode/manual_test_run_mode/simple_test_results.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/alert_types/alert_messages.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx" - }, - { - "plugin": "uptime", - "path": "x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx" - }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx" @@ -3004,14 +2572,6 @@ "plugin": "embeddable", "path": "src/plugins/embeddable/public/lib/test_samples/embeddables/contact_card/contact_card_exportable_embeddable_factory.tsx" }, - { - "plugin": "uiActions", - "path": "src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx" - }, - { - "plugin": "uiActions", - "path": "src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx" - }, { "plugin": "visTypeVislib", "path": "src/plugins/vis_types/vislib/public/vis_controller.tsx" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index f72943b423c8a..4684a10075818 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 3a69d2c6eb898..efc93af5cd9e9 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-04-16 +date: 2024-04-18 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 f334d39719d5e..b37b68c80c724 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 71907198d393a..f6a2d4aee3d53 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -2198,7 +2198,8 @@ "label": "rowHeight", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode", + " | undefined" ], "path": "x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx", "deprecated": false, @@ -2212,7 +2213,8 @@ "label": "headerRowHeight", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode", + " | undefined" ], "path": "x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx", "deprecated": false, diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 9f90215fbb707..d56d62f1f331b 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 670 | 0 | 569 | 61 | +| 670 | 0 | 569 | 62 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index c66da05d38c90..50205bb063427 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-04-16 +date: 2024-04-18 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 495bd7f66379a..a98816bebef3e 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.devdocs.json b/api_docs/licensing.devdocs.json index fbc75b9837f15..9d7204e47f330 100644 --- a/api_docs/licensing.devdocs.json +++ b/api_docs/licensing.devdocs.json @@ -2212,19 +2212,19 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts" + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts" + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts" + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts" + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts" }, { "plugin": "painlessLab", @@ -2262,6 +2262,18 @@ "plugin": "upgradeAssistant", "path": "x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts" + }, { "plugin": "actions", "path": "x-pack/plugins/actions/server/lib/license_state.test.ts" diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 303bebeaced48..38292414fe371 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-04-16 +date: 2024-04-18 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 ff7b7b265ba87..ced308ec8e619 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-04-16 +date: 2024-04-18 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 5dc4448c26c61..6b40d5c0523cf 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 0deb37b3a64ce..e6d22106383c9 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json index 91031a315e24c..4f6c8ba40a16e 100644 --- a/api_docs/logs_shared.devdocs.json +++ b/api_docs/logs_shared.devdocs.json @@ -2945,7 +2945,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/plugins/observability_solution/logs_shared/public/types.ts", "deprecated": false, diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 4a0a3b8c49b5a..48dcd5a5cfbc1 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.devdocs.json b/api_docs/management.devdocs.json index c8239c131bc1d..91aac4c918ad2 100644 --- a/api_docs/management.devdocs.json +++ b/api_docs/management.devdocs.json @@ -630,10 +630,6 @@ "plugin": "security", "path": "x-pack/plugins/security/public/management/api_keys/api_keys_management_app.tsx" }, - { - "plugin": "remoteClusters", - "path": "x-pack/plugins/remote_clusters/public/plugin.ts" - }, { "plugin": "security", "path": "x-pack/plugins/security/public/management/users/users_management_app.tsx" @@ -646,10 +642,6 @@ "plugin": "security", "path": "x-pack/plugins/security/public/management/role_mappings/role_mappings_management_app.tsx" }, - { - "plugin": "savedObjectsTagging", - "path": "x-pack/plugins/saved_objects_tagging/public/management/mount_section.tsx" - }, { "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts" @@ -657,42 +649,6 @@ { "plugin": "reporting", "path": "x-pack/plugins/reporting/public/management/mount_management_section.tsx" - }, - { - "plugin": "licenseManagement", - "path": "x-pack/plugins/license_management/public/plugin.ts" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/mount_management_section.ts" - }, - { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/public/plugin.ts" - }, - { - "plugin": "indexLifecycleManagement", - "path": "x-pack/plugins/index_lifecycle_management/public/plugin.tsx" - }, - { - "plugin": "ingestPipelines", - "path": "x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts" - }, - { - "plugin": "rollup", - "path": "x-pack/plugins/rollup/public/application.tsx" - }, - { - "plugin": "snapshotRestore", - "path": "x-pack/plugins/snapshot_restore/public/application/mount_management_section.ts" - }, - { - "plugin": "upgradeAssistant", - "path": "x-pack/plugins/upgrade_assistant/public/plugin.ts" - }, - { - "plugin": "watcher", - "path": "x-pack/plugins/watcher/public/plugin.ts" } ] } diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 2b9cce6d2a3bf..5b4143d434186 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-04-16 +date: 2024-04-18 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 e688b8e80f375..8ba4237d90717 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-04-16 +date: 2024-04-18 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 575efaeeb8987..4f8589c872462 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-04-16 +date: 2024-04-18 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 25a32c171dc0f..be9ed8a1e1825 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-04-16 +date: 2024-04-18 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 47363994b0b91..58cf63fd8e9a0 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 0045970989588..10d355b07189e 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 4caac02afbf82..99bee910ba3c9 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-04-16 +date: 2024-04-18 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 7aeea48673192..b0ccd6080822d 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.devdocs.json b/api_docs/navigation.devdocs.json index 9e3f9bad9baf2..1073eb98482d8 100644 --- a/api_docs/navigation.devdocs.json +++ b/api_docs/navigation.devdocs.json @@ -805,6 +805,20 @@ "path": "src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "navigation", + "id": "def-public.TopNavMenuData.intl", + "type": "Object", + "tags": [], + "label": "intl", + "description": [], + "signature": [ + "ReactIntl.InjectedIntl | undefined" + ], + "path": "src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 0d1e2c3efe575..9e98e9751a872 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.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 | |-------------------|-----------|------------------------|-----------------| -| 48 | 0 | 46 | 5 | +| 49 | 0 | 47 | 5 | ## Client diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 2ec87b063c8f4..b654b1b49e877 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-04-16 +date: 2024-04-18 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 3b1f7a048ccc7..698a9aafc9d52 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-04-16 +date: 2024-04-18 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 5bfe95fa2eb4d..f440b20eb158c 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-04-16 +date: 2024-04-18 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 45d46771e0ea5..b1d18b6c1e16e 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2690,7 +2690,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", "deprecated": false, @@ -12221,6 +12221,104 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces", + "type": "Object", + "tags": [], + "label": "[profilingFetchTopNFunctionsFromStacktraces]", + "description": [], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.category", + "type": "Array", + "tags": [], + "label": "category", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.schema", + "type": "Object", + "tags": [], + "label": "schema", + "description": [], + "signature": [ + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "" + ], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.profilingFetchTopNFunctionsFromStacktraces.requiresPageReload", + "type": "boolean", + "tags": [], + "label": "requiresPageReload", + "description": [], + "signature": [ + "false" + ], + "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "initialIsOpen": false @@ -13888,6 +13986,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-common.profilingFetchTopNFunctionsFromStacktraces", + "type": "string", + "tags": [], + "label": "profilingFetchTopNFunctionsFromStacktraces", + "description": [], + "signature": [ + "\"observability:profilingFetchTopNFunctionsFromStacktraces\"" + ], + "path": "x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-common.profilingPervCPUWattArm64", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index c0e7585c314fc..dac124a847050 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 670 | 2 | 661 | 14 | +| 678 | 2 | 669 | 14 | ## Client diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index d4df21a16fc41..9d02c4d1d2cc5 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -1692,7 +1692,7 @@ "label": "callApi", "description": [], "signature": [ - "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", + "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", { "pluginId": "@kbn/server-route-repository", "scope": "common", @@ -2084,7 +2084,9 @@ }, ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "; \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\": { endpoint: \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\"; params?: ", + "IntersectionC", + "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -2110,14 +2112,90 @@ "section": "def-common.Message", "text": "Message" }, - ", unknown>>; screenContexts: ", + ", unknown>>; connectorId: ", + "StringC", + "; persist: ", + "Type", + "; }>, ", + "PartialC", + "<{ conversationId: ", + "StringC", + "; title: ", + "StringC", + "; responseLanguage: ", + "StringC", + "; instructions: ", + "ArrayC", + "<", + "UnionC", + "<[", + "StringC", + ", ", + "TypeC", + "<{ doc_id: ", + "StringC", + "; text: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "PartialC", + "<{ actions: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; }>, ", + "PartialC", + "<{ parameters: ", + "AnyC", + "; }>]>>; }>; }>]> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ messages: ", "ArrayC", "<", "Type", "<", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", ", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", unknown>>; connectorId: ", "StringC", "; persist: ", @@ -2142,7 +2220,19 @@ "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }> | undefined; handler: ({}: ", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ screenContexts: ", + "ArrayC", + "<", + "Type", + "<", + "ObservabilityAIAssistantScreenContextRequest", + ", ", + "ObservabilityAIAssistantScreenContextRequest", + ", unknown>>; }>; }>]> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -2152,9 +2242,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; }; }) => Promise<", + "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -2612,7 +2702,9 @@ }, ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "; \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\": { endpoint: \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\"; params?: ", + "IntersectionC", + "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -2638,14 +2730,90 @@ "section": "def-common.Message", "text": "Message" }, - ", unknown>>; screenContexts: ", + ", unknown>>; connectorId: ", + "StringC", + "; persist: ", + "Type", + "; }>, ", + "PartialC", + "<{ conversationId: ", + "StringC", + "; title: ", + "StringC", + "; responseLanguage: ", + "StringC", + "; instructions: ", + "ArrayC", + "<", + "UnionC", + "<[", + "StringC", + ", ", + "TypeC", + "<{ doc_id: ", + "StringC", + "; text: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "PartialC", + "<{ actions: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; }>, ", + "PartialC", + "<{ parameters: ", + "AnyC", + "; }>]>>; }>; }>]> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ messages: ", "ArrayC", "<", "Type", "<", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", ", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", unknown>>; connectorId: ", "StringC", "; persist: ", @@ -2670,7 +2838,19 @@ "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }> | undefined; handler: ({}: ", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ screenContexts: ", + "ArrayC", + "<", + "Type", + "<", + "ObservabilityAIAssistantScreenContextRequest", + ", ", + "ObservabilityAIAssistantScreenContextRequest", + ", unknown>>; }>; }>]> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -2680,9 +2860,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; }; }) => Promise<", + "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -3728,7 +3908,9 @@ }, ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "; \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\": { endpoint: \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\"; params?: ", + "IntersectionC", + "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -3754,14 +3936,90 @@ "section": "def-common.Message", "text": "Message" }, - ", unknown>>; screenContexts: ", + ", unknown>>; connectorId: ", + "StringC", + "; persist: ", + "Type", + "; }>, ", + "PartialC", + "<{ conversationId: ", + "StringC", + "; title: ", + "StringC", + "; responseLanguage: ", + "StringC", + "; instructions: ", + "ArrayC", + "<", + "UnionC", + "<[", + "StringC", + ", ", + "TypeC", + "<{ doc_id: ", + "StringC", + "; text: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "PartialC", + "<{ actions: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; }>, ", + "PartialC", + "<{ parameters: ", + "AnyC", + "; }>]>>; }>; }>]> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ messages: ", "ArrayC", "<", "Type", "<", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", ", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", unknown>>; connectorId: ", "StringC", "; persist: ", @@ -3786,7 +4044,19 @@ "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }> | undefined; handler: ({}: ", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ screenContexts: ", + "ArrayC", + "<", + "Type", + "<", + "ObservabilityAIAssistantScreenContextRequest", + ", ", + "ObservabilityAIAssistantScreenContextRequest", + ", unknown>>; }>; }>]> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -3796,9 +4066,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; }; }) => Promise<", + "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -4374,7 +4644,9 @@ }, ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "; \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\": { endpoint: \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\"; params?: ", + "IntersectionC", + "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -4400,14 +4672,90 @@ "section": "def-common.Message", "text": "Message" }, - ", unknown>>; screenContexts: ", + ", unknown>>; connectorId: ", + "StringC", + "; persist: ", + "Type", + "; }>, ", + "PartialC", + "<{ conversationId: ", + "StringC", + "; title: ", + "StringC", + "; responseLanguage: ", + "StringC", + "; instructions: ", + "ArrayC", + "<", + "UnionC", + "<[", + "StringC", + ", ", + "TypeC", + "<{ doc_id: ", + "StringC", + "; text: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "PartialC", + "<{ actions: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; }>, ", + "PartialC", + "<{ parameters: ", + "AnyC", + "; }>]>>; }>; }>]> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ messages: ", "ArrayC", "<", "Type", "<", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", ", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", unknown>>; connectorId: ", "StringC", "; persist: ", @@ -4432,7 +4780,19 @@ "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }> | undefined; handler: ({}: ", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ screenContexts: ", + "ArrayC", + "<", + "Type", + "<", + "ObservabilityAIAssistantScreenContextRequest", + ", ", + "ObservabilityAIAssistantScreenContextRequest", + ", unknown>>; }>; }>]> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -4442,9 +4802,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; }; }) => Promise<", + "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -4543,7 +4903,7 @@ "label": "ObservabilityAIAssistantAPIEndpoint", "description": [], "signature": [ - "\"POST /internal/observability_ai_assistant/chat\" | \"POST /internal/observability_ai_assistant/chat/complete\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"POST /internal/observability_ai_assistant/conversation\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\" | \"GET /internal/observability_ai_assistant/functions\" | \"POST /internal/observability_ai_assistant/functions/recall\" | \"POST /internal/observability_ai_assistant/functions/summarize\" | \"POST /internal/observability_ai_assistant/kb/setup\" | \"GET /internal/observability_ai_assistant/kb/status\" | \"GET /internal/observability_ai_assistant/kb/entries\" | \"POST /internal/observability_ai_assistant/kb/entries/import\" | \"POST /internal/observability_ai_assistant/kb/entries/save\" | \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"" + "\"POST /internal/observability_ai_assistant/chat\" | \"POST /internal/observability_ai_assistant/chat/complete\" | \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"POST /internal/observability_ai_assistant/conversation\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\" | \"GET /internal/observability_ai_assistant/functions\" | \"POST /internal/observability_ai_assistant/functions/recall\" | \"POST /internal/observability_ai_assistant/functions/summarize\" | \"POST /internal/observability_ai_assistant/kb/setup\" | \"GET /internal/observability_ai_assistant/kb/status\" | \"GET /internal/observability_ai_assistant/kb/entries\" | \"POST /internal/observability_ai_assistant/kb/entries/import\" | \"POST /internal/observability_ai_assistant/kb/entries/save\" | \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts", "deprecated": false, @@ -5626,7 +5986,9 @@ }, ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "; \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\": { endpoint: \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\"; params?: ", + "IntersectionC", + "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -5652,14 +6014,90 @@ "section": "def-common.Message", "text": "Message" }, - ", unknown>>; screenContexts: ", + ", unknown>>; connectorId: ", + "StringC", + "; persist: ", + "Type", + "; }>, ", + "PartialC", + "<{ conversationId: ", + "StringC", + "; title: ", + "StringC", + "; responseLanguage: ", + "StringC", + "; instructions: ", + "ArrayC", + "<", + "UnionC", + "<[", + "StringC", + ", ", + "TypeC", + "<{ doc_id: ", + "StringC", + "; text: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "PartialC", + "<{ actions: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; }>, ", + "PartialC", + "<{ parameters: ", + "AnyC", + "; }>]>>; }>; }>]> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ messages: ", "ArrayC", "<", "Type", "<", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", ", - "ObservabilityAIAssistantScreenContextRequest", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, ", unknown>>; connectorId: ", "StringC", "; persist: ", @@ -5684,7 +6122,19 @@ "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }> | undefined; handler: ({}: ", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ screenContexts: ", + "ArrayC", + "<", + "Type", + "<", + "ObservabilityAIAssistantScreenContextRequest", + ", ", + "ObservabilityAIAssistantScreenContextRequest", + ", unknown>>; }>; }>]> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -5694,9 +6144,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; }; }) => Promise<", + "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 670d6661c21fb..0ba876bdfbe1e 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index c21f6d4f59092..552f1945f4bbc 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index e7b46638f8a6d..7cf8e2da0d69f 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 6117a0fa84bc3..f6c9e6a310cd8 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index e00bbdad26b2a..e7270c8482553 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 7d9a4c509036c..732405642f4b5 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -3667,6 +3667,46 @@ "common": { "classes": [], "functions": [ + { + "parentPluginId": "observabilityShared", + "id": "def-common.colorTransformer", + "type": "Function", + "tags": [], + "label": "colorTransformer", + "description": [], + "signature": [ + "(color: ", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.Color", + "text": "Color" + }, + ") => string" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/color_palette.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-common.colorTransformer.$1", + "type": "CompoundType", + "tags": [], + "label": "color", + "description": [], + "signature": [ + "\"color0\" | \"color1\" | \"color2\" | \"color3\" | \"color4\" | \"color5\" | \"color6\" | \"color7\" | \"color8\" | \"color9\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/color_palette.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.getInspectResponse", @@ -4043,6 +4083,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.Color", + "type": "Type", + "tags": [], + "label": "Color", + "description": [], + "signature": [ + "\"color0\" | \"color1\" | \"color2\" | \"color3\" | \"color4\" | \"color5\" | \"color6\" | \"color7\" | \"color8\" | \"color9\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/color_palette.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.CONTAINER_ID", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 3c696e96e716d..5ad762245bf03 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 343 | 1 | 338 | 22 | +| 346 | 1 | 341 | 22 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 5e0d4b3d893cd..ef105fea61122 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-04-16 +date: 2024-04-18 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 36926253ba21f..2572e7222f526 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-04-16 +date: 2024-04-18 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 ddc235e3866a5..be402de34ecb0 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 781 | 670 | 42 | +| 783 | 672 | 42 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 47272 | 239 | 35967 | 1839 | +| 47399 | 239 | 36075 | 1849 | ## Plugin Directory @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 67 | 0 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 857 | 1 | 825 | 54 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 858 | 1 | 826 | 54 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 125 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | @@ -56,18 +56,18 @@ 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 | 271 | 0 | 252 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 108 | 0 | 105 | 12 | | | [@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. | 3288 | 31 | 2622 | 23 | +| | [@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. | 3287 | 31 | 2621 | 23 | | | [@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. | 1070 | 0 | 370 | 4 | +| | [@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. | 1069 | 0 | 369 | 4 | | | [@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 | 3 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of dataset quality, where users can easily get an overview on the datasets they have. | 10 | 0 | 10 | 5 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 156 | 0 | 108 | 27 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 44 | 0 | 30 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 45 | 0 | 31 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 559 | 1 | 453 | 8 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | @@ -118,7 +118,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | 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) | - | 609 | 3 | 416 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 670 | 0 | 569 | 61 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 670 | 0 | 569 | 62 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -135,17 +135,17 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 15 | 3 | 13 | 1 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 9 | 0 | 9 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 48 | 0 | 46 | 5 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 47 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 670 | 2 | 661 | 14 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 678 | 2 | 669 | 14 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 251 | 1 | 249 | 25 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 21 | 0 | 21 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 343 | 1 | 338 | 22 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 346 | 1 | 341 | 22 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 | @@ -170,15 +170,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 15 | 0 | 9 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 409 | 0 | 199 | 2 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 188 | 0 | 119 | 36 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 189 | 0 | 119 | 36 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 25 | 0 | 24 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | Serverless customizations for observability. | 6 | 0 | 6 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Serverless customizations for search. | 6 | 0 | 6 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 134 | 0 | 134 | 8 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 120 | 0 | 61 | 11 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 61 | 0 | 61 | 1 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 136 | 0 | 77 | 11 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 62 | 0 | 62 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 22 | 1 | 22 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 256 | 0 | 65 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | @@ -194,11 +194,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 240 | 1 | 196 | 17 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 595 | 1 | 569 | 60 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 593 | 1 | 567 | 58 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 149 | 0 | 103 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 11 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 10 | 0 | 7 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 62 | 0 | 29 | 5 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 71 | 0 | 36 | 6 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 152 | 2 | 113 | 23 | | upgradeAssistant | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | This plugin visualizes data from Heartbeat, and integrates with other Observability solutions. | 1 | 0 | 1 | 0 | @@ -235,7 +235,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 87 | 0 | 82 | 2 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 110 | 0 | 98 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 73 | 0 | 73 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 98 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 0 | 0 | @@ -266,7 +266,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 217 | 0 | 180 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 79 | 0 | 50 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 141 | 3 | 138 | 18 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 142 | 3 | 139 | 19 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 8 | 4 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | @@ -340,9 +340,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 22 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 3 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 49 | 7 | 49 | 5 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 49 | 7 | 49 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 0 | 13 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 471 | 1 | 187 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 475 | 1 | 189 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 86 | 0 | 74 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 2 | 0 | @@ -388,11 +388,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 2 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 25 | 1 | 24 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 1 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 112 | 1 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 354 | 1 | 5 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 11 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 224 | 0 | 181 | 11 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 225 | 0 | 182 | 11 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | @@ -403,7 +403,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 128 | 0 | 94 | 45 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 559 | 1 | 132 | 4 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 72 | 0 | 71 | 4 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 71 | 0 | 70 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 14 | 0 | 14 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 3 | 0 | @@ -470,11 +470,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 75 | 0 | 75 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 41 | 0 | 27 | 6 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 11 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 19 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 155 | 0 | 135 | 8 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 225 | 0 | 211 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 168 | 0 | 142 | 9 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 232 | 0 | 217 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 37 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | @@ -562,7 +562,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 18 | 0 | 18 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 31 | 1 | 24 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 22 | 0 | 16 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 107 | 0 | 107 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 120 | 0 | 120 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 55 | 1 | 50 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 10 | 0 | 10 | 2 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 99 | 1 | 99 | 0 | @@ -579,7 +579,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 65 | 0 | 61 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 178 | 0 | 149 | 6 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 161 | 0 | 48 | 0 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 168 | 0 | 55 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 2 | 0 | @@ -593,6 +593,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 6 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 96 | 0 | 86 | 13 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 13 | 0 | 13 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 52 | 0 | 52 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 25 | 0 | 21 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 33 | 0 | @@ -604,9 +605,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 88 | 0 | 87 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 123 | 0 | 120 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 124 | 0 | 121 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 81 | 0 | 81 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 3216 | 0 | 3216 | 0 | @@ -638,7 +640,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 207 | 0 | 160 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 28 | 0 | 25 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 120 | 0 | 116 | 0 | -| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 48 | 0 | 43 | 0 | +| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 49 | 0 | 44 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 62 | 0 | 58 | 1 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 31 | 0 | 30 | 1 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 1 | 0 | 1 | 0 | @@ -687,7 +689,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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) | - | 8 | 0 | 8 | 4 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 16 | 0 | 6 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 165 | 0 | 165 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 171 | 0 | 171 | 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) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | @@ -710,7 +712,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 28 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 54 | 0 | 45 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 8 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 151 | 0 | 83 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 151 | 0 | 83 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 14 | 0 | 13 | 6 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 293 | 0 | 269 | 10 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index d990c09f84cb7..7c3cc0aa458d2 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 3193d4fc8141c..d9577e7f7f301 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.devdocs.json b/api_docs/profiling.devdocs.json index 88b1c4a659fea..c68d7dcd3af81 100644 --- a/api_docs/profiling.devdocs.json +++ b/api_docs/profiling.devdocs.json @@ -102,7 +102,7 @@ "label": "getRoutePaths", "description": [], "signature": [ - "() => { TopN: string; TopNContainers: string; TopNDeployments: string; TopNFunctions: string; TopNHosts: string; TopNThreads: string; TopNTraces: string; Flamechart: string; HasSetupESResources: string; SetupDataCollectionInstructions: string; StorageExplorerSummary: string; StorageExplorerHostStorageDetails: string; StorageExplorerIndicesStorageDetails: string; }" + "() => { TopN: string; TopNContainers: string; TopNDeployments: string; TopNFunctions: string; TopNHosts: string; TopNThreads: string; TopNTraces: string; APMTransactions: string; Flamechart: string; HasSetupESResources: string; SetupDataCollectionInstructions: string; StorageExplorerSummary: string; StorageExplorerHostStorageDetails: string; StorageExplorerIndicesStorageDetails: string; }" ], "path": "x-pack/plugins/observability_solution/profiling/common/index.ts", "deprecated": false, diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index ef2551054b3ce..575a59b8ba049 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.devdocs.json b/api_docs/profiling_data_access.devdocs.json index e674938901dd2..d59879619ada4 100644 --- a/api_docs/profiling_data_access.devdocs.json +++ b/api_docs/profiling_data_access.devdocs.json @@ -65,6 +65,16 @@ "section": "def-common.TopNFunctions", "text": "TopNFunctions" }, + ">; fetchESFunctions: ({ core, esClient, indices, stacktraceIdsField, query, aggregationField, limit, }: ", + "FetchFunctionsParams", + ") => Promise<", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.TopNFunctions", + "text": "TopNFunctions" + }, ">; }; }" ], "path": "x-pack/plugins/observability_solution/profiling_data_access/server/plugin.ts", diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 298a28dc2943b..2fe6b88005f57 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-04-16 +date: 2024-04-18 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 c97a7c18d124f..31dfbdec694bd 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-04-16 +date: 2024-04-18 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 e548d0d560056..08b1eae6c97d0 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-04-16 +date: 2024-04-18 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 7e9ad4611f368..cd08515a3274e 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-04-16 +date: 2024-04-18 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 448930b084365..5f028d3b7f826 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-04-16 +date: 2024-04-18 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 022a8752eec6d..bfee334588619 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-04-16 +date: 2024-04-18 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 bf1e79633a7fe..6ce64db7e98dc 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-04-16 +date: 2024-04-18 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 439ca744ace44..714e888b3d6a3 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-04-16 +date: 2024-04-18 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 87470c3d51e0d..3a7a2de15f058 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-04-16 +date: 2024-04-18 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 b592985ddd880..e10c6af68b19c 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-04-16 +date: 2024-04-18 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 1ada0a04d0db7..a180886f91c69 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-04-16 +date: 2024-04-18 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 b801f2890f17b..da70b6604b5ce 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-04-16 +date: 2024-04-18 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 0e1d4f69851d3..9b272918ee767 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-04-16 +date: 2024-04-18 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 020c3e547c817..0041a6d90ddca 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index e43290905d4ff..ef49ef5372608 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 67ffdaa009b6e..f32c143d9e08c 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index c75ddbfd01707..331470d9ed8b1 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 68539e289e219..0c95ea25b8a44 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-04-16 +date: 2024-04-18 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 22d586327971a..5db6654dcc3a5 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -390,7 +390,7 @@ "label": "data", "description": [], "signature": [ - "({ id: string; type: \"eql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { id: string; type: \"query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"saved_query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"threshold\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { id: string; type: \"threat_match\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { id: string; type: \"machine_learning\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { id: string; type: \"new_terms\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"esql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ id: string; type: \"eql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"saved_query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; } | { id: string; type: \"threshold\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; saved_id?: string | undefined; } | { id: string; type: \"threat_match\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { id: string; type: \"machine_learning\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { id: string; type: \"new_terms\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"esql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForNewTermsRuleEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | undefined" + "\"assistantAlertsInsights\" | \"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForNewTermsRuleEnabled\" | \"alertSuppressionForNonSequenceEqlRuleEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForNewTermsRuleEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | undefined" + "\"assistantAlertsInsights\" | \"assistantModelEvaluation\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForNewTermsRuleEnabled\" | \"alertSuppressionForNonSequenceEqlRuleEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -826,6 +826,22 @@ "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.LinkItem.uiSettingRequired", + "type": "CompoundType", + "tags": [], + "label": "uiSettingRequired", + "description": [ + "\nRequired UI setting to enable a link.\nTo enable a link when a boolean UiSetting is true, pass the key as a string.\nTo enable a link when a specific value is set for a UiSetting, pass an object with key and value." + ], + "signature": [ + "string | { key: string; value: unknown; } | undefined" + ], + "path": "x-pack/plugins/security_solution/public/common/links/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1948,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantAlertsInsights: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly alertSuppressionForNonSequenceEqlRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3014,7 +3030,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantAlertsInsights: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly alertSuppressionForNonSequenceEqlRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3190,7 +3206,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantAlertsInsights: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForNewTermsRuleEnabled: boolean; readonly alertSuppressionForNonSequenceEqlRuleEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3256,7 +3272,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: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: false; readonly expandableTimelineFlyoutEnabled: false; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly alertSuppressionForNewTermsRuleEnabled: false; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: false; readonly aiAssistantFlyoutMode: false; readonly valueListItemsModalEnabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: false; readonly expandableTimelineFlyoutEnabled: false; readonly alertsPageFiltersEnabled: true; readonly assistantAlertsInsights: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly alertSuppressionForNewTermsRuleEnabled: false; readonly alertSuppressionForNonSequenceEqlRuleEnabled: false; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: false; readonly aiAssistantFlyoutMode: false; readonly valueListItemsModalEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 4a8094b0206b2..df7be8143b73e 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 188 | 0 | 119 | 36 | +| 189 | 0 | 119 | 36 | ## Client diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 357b26291c462..36fa9dff6a689 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-04-16 +date: 2024-04-18 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 72ab25a0c07e6..76cfeb3d3b56d 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-04-16 +date: 2024-04-18 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 1db1517e0e63b..ad44cdf320371 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-04-16 +date: 2024-04-18 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 02480dbfe40cc..eee6bb04563f8 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-04-16 +date: 2024-04-18 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 1a5b97e161120..2419ec888ca97 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.devdocs.json b/api_docs/session_view.devdocs.json index 1f34cb1c0c46e..ccf4c1e0cd822 100644 --- a/api_docs/session_view.devdocs.json +++ b/api_docs/session_view.devdocs.json @@ -2145,7 +2145,7 @@ "label": "EventAction", "description": [], "signature": [ - "\"end\" | \"fork\" | \"exec\" | \"text_output\"" + "\"end\" | \"fork\" | \"exec\" | \"text_output\" | \"executed\"" ], "path": "x-pack/plugins/session_view/common/types/v1.ts", "deprecated": false, diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index e0a8c1c22276a..077c98247d937 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.devdocs.json b/api_docs/share.devdocs.json index c3cc9af015071..32ec76690798d 100644 --- a/api_docs/share.devdocs.json +++ b/api_docs/share.devdocs.json @@ -1000,6 +1000,26 @@ "path": "src/plugins/share/public/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareContext.toasts", + "type": "Object", + "tags": [], + "label": "toasts", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-notifications-browser", + "scope": "common", + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-common.IToasts", + "text": "IToasts" + } + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1080,7 +1100,8 @@ "docId": "kibSharePluginApi", "section": "def-public.ShareContextMenuPanelItem", "text": "ShareContextMenuPanelItem" - } + }, + " | undefined" ], "path": "src/plugins/share/public/types.ts", "deprecated": false, @@ -1094,7 +1115,225 @@ "label": "panel", "description": [], "signature": [ - "EuiContextMenuPanelDescriptor" + "EuiContextMenuPanelDescriptor", + " | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.label", + "type": "CompoundType", + "tags": [], + "label": "label", + "description": [], + "signature": [ + "\"PDF\" | \"CSV\" | \"PNG\" | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.reportType", + "type": "string", + "tags": [], + "label": "reportType", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.requiresSavedState", + "type": "CompoundType", + "tags": [], + "label": "requiresSavedState", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.helpText", + "type": "Object", + "tags": [], + "label": "helpText", + "description": [], + "signature": [ + "React.ReactElement> | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.copyURLButton", + "type": "Object", + "tags": [], + "label": "copyURLButton", + "description": [], + "signature": [ + "{ id: string; dataTestSubj: string; label: string; } | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.generateReportButton", + "type": "Object", + "tags": [], + "label": "generateReportButton", + "description": [], + "signature": [ + "React.ReactElement> | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.generateReport", + "type": "Object", + "tags": [], + "label": "generateReport", + "description": [], + "signature": [ + "Function | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.generateReportForPrinting", + "type": "Object", + "tags": [], + "label": "generateReportForPrinting", + "description": [], + "signature": [ + "Function | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.theme", + "type": "Object", + "tags": [], + "label": "theme", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" + }, + " | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.downloadCSVLens", + "type": "Object", + "tags": [], + "label": "downloadCSVLens", + "description": [], + "signature": [ + "Function | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.renderLayoutOptionSwitch", + "type": "CompoundType", + "tags": [], + "label": "renderLayoutOptionSwitch", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.layoutOption", + "type": "string", + "tags": [], + "label": "layoutOption", + "description": [], + "signature": [ + "\"print\" | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.absoluteUrl", + "type": "string", + "tags": [], + "label": "absoluteUrl", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.generateCopyUrl", + "type": "Object", + "tags": [], + "label": "generateCopyUrl", + "description": [], + "signature": [ + "URL | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem.renderCopyURLButton", + "type": "CompoundType", + "tags": [], + "label": "renderCopyURLButton", + "description": [], + "signature": [ + "boolean | undefined" ], "path": "src/plugins/share/public/types.ts", "deprecated": false, @@ -1141,15 +1380,7 @@ "section": "def-public.ShareContext", "text": "ShareContext" }, - ") => ", - { - "pluginId": "share", - "scope": "public", - "docId": "kibSharePluginApi", - "section": "def-public.ShareMenuItem", - "text": "ShareMenuItem" - }, - "[]" + ") => ShareMenuItemType[]" ], "path": "src/plugins/share/public/types.ts", "deprecated": false, @@ -1434,7 +1665,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "src/plugins/share/public/plugin.ts", "deprecated": false, diff --git a/api_docs/share.mdx b/api_docs/share.mdx index da804aa459521..340e66a836919 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 120 | 0 | 61 | 11 | +| 136 | 0 | 77 | 11 | ## Client diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index 6463941f2738b..15f2bbcc3b82e 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -231,7 +231,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; }" + ") => void; isNewVersion: () => boolean; }" ], "path": "x-pack/plugins/observability_solution/slo/public/types.ts", "deprecated": false, @@ -438,6 +438,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "slo", + "id": "def-public.SloPublicPluginsStart.aiops", + "type": "Object", + "tags": [], + "label": "aiops", + "description": [], + "signature": [ + "AiopsPluginStart" + ], + "path": "x-pack/plugins/observability_solution/slo/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "slo", "id": "def-public.SloPublicPluginsStart.cases", @@ -1552,7 +1566,7 @@ "label": "sloPaths", "description": [], "signature": [ - "{ slos: string; slosWelcome: string; slosOutdatedDefinitions: string; sloCreate: string; sloCreateWithEncodedForm: (encodedParams: string) => string; sloEdit: (sloId: string) => string; sloEditWithEncodedForm: (sloId: string, encodedParams: string) => string; sloDetails: (sloId: string, instanceId?: string | undefined) => string; }" + "{ slos: string; slosSettings: string; slosWelcome: string; slosOutdatedDefinitions: string; sloCreate: string; sloCreateWithEncodedForm: (encodedParams: string) => string; sloEdit: (sloId: string) => string; sloEditWithEncodedForm: (sloId: string, encodedParams: string) => string; sloDetails: (sloId: string, instanceId?: string | undefined, remoteName?: string | undefined) => string; }" ], "path": "x-pack/plugins/observability_solution/slo/common/index.ts", "deprecated": false, diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 05a7e3b824f7e..2e0f1dfa917e9 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 61 | 0 | 61 | 1 | +| 62 | 0 | 62 | 1 | ## Client diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 3e8e85a71736e..ebcf44c4adc9d 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-04-16 +date: 2024-04-18 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 2b8606b2ffa9d..665a2690d0edb 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-04-16 +date: 2024-04-18 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 b74564655449f..ad01e383d7c4c 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-04-16 +date: 2024-04-18 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 0a61918c37bb7..255caf9eca967 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-04-16 +date: 2024-04-18 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 2546b8cb1f9bf..ffa5d08144dfa 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-04-16 +date: 2024-04-18 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 7f95b5be12f9c..3fe444ad0d674 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-04-16 +date: 2024-04-18 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 1583106c21f3d..e3f813bbb5911 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-04-16 +date: 2024-04-18 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 65447aa2cb203..119b82eed5988 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-04-16 +date: 2024-04-18 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 0bf0d90f35e34..5bc4fda8cbe67 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-04-16 +date: 2024-04-18 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 556b883807536..0830e7d8745bb 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-04-16 +date: 2024-04-18 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 34c8d1e5f05ac..b7e89fe017eaf 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 7a907089b0517..23bb35243ce83 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-04-16 +date: 2024-04-18 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 75ba25e9900bb..b5f6274b90e72 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index b684140bb3a6f..9832e47dbae5c 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -55,7 +55,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly rulesListDatagrid: boolean; readonly globalAlertsPage: boolean; readonly ruleTagFilter: boolean; readonly ruleStatusFilter: boolean; readonly rulesDetailLogs: boolean; readonly ruleUseExecutionStatus: boolean; readonly ruleKqlBar: boolean; readonly isMustacheAutocompleteOn: boolean; readonly showMustacheAutocompleteSwitch: boolean; readonly ruleFormV2: boolean; }" + "{ readonly rulesListDatagrid: boolean; readonly stackAlertsPage: boolean; readonly ruleTagFilter: boolean; readonly ruleStatusFilter: boolean; readonly rulesDetailLogs: boolean; readonly ruleUseExecutionStatus: boolean; readonly ruleKqlBar: boolean; readonly isMustacheAutocompleteOn: boolean; readonly showMustacheAutocompleteSwitch: boolean; readonly ruleFormV2: boolean; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, @@ -5367,7 +5367,7 @@ "text": "CoreStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false, "children": [ @@ -5387,7 +5387,7 @@ "text": "ActionsPublicPluginSetup" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5407,7 +5407,7 @@ "text": "DataPublicPluginStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5427,7 +5427,7 @@ "text": "DataViewsServicePublic" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5447,7 +5447,7 @@ "text": "PluginStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5467,7 +5467,7 @@ "text": "DashboardStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5490,7 +5490,7 @@ "ActiveCursor", "; }" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5511,7 +5511,7 @@ }, " | undefined" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5532,7 +5532,7 @@ }, " | undefined" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5553,7 +5553,7 @@ }, " | undefined" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5564,7 +5564,7 @@ "tags": [], "label": "isCloud", "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5586,7 +5586,7 @@ }, "[]) => void" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false, "children": [ @@ -5607,7 +5607,7 @@ }, "[]" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -5649,7 +5649,7 @@ }, ") => void; has: (id: string) => boolean; }" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5711,7 +5711,7 @@ }, ">) => void; has: (id: string) => boolean; }" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5724,24 +5724,18 @@ "description": [], "signature": [ "{ update: (id: string, objectType: ", - "AlertsTableConfigurationRegistryWithActions", + "AlertsTableConfigurationRegistry", ") => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", "; get: (id: string) => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", - "; list: () => (", + "; list: () => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", - ")[]; register: (objectType: ", + "[]; register: (objectType: ", "AlertsTableConfigurationRegistry", - ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" + ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; } | undefined; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5762,7 +5756,7 @@ }, "" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5783,7 +5777,7 @@ }, "[]" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5797,7 +5791,7 @@ "signature": [ "HTMLElement" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5817,7 +5811,7 @@ "text": "I18nStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5837,7 +5831,7 @@ "text": "ThemeServiceSetup" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5857,7 +5851,7 @@ "text": "UnifiedSearchPublicPluginStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5877,7 +5871,7 @@ "text": "LicensingPluginStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5897,7 +5891,7 @@ "text": "ExpressionsStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5908,7 +5902,7 @@ "tags": [], "label": "isServerless", "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5938,7 +5932,7 @@ }, "; }" ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false }, @@ -5958,7 +5952,7 @@ "text": "LensPublicStart" } ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", + "path": "x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx", "deprecated": false, "trackAdoption": false } @@ -6219,22 +6213,16 @@ "description": [], "signature": [ "{ update: (id: string, objectType: ", - "AlertsTableConfigurationRegistryWithActions", + "AlertsTableConfigurationRegistry", ") => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", "; get: (id: string) => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", - "; list: () => (", + "; list: () => ", "AlertsTableConfigurationRegistry", - " | ", - "AlertsTableConfigurationRegistryWithActions", - ")[]; register: (objectType: ", + "[]; register: (objectType: ", "AlertsTableConfigurationRegistry", - ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" + ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; } | undefined; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false, @@ -6263,13 +6251,11 @@ }, ">; isLoading: boolean; }; columns: ", "EuiDataGridColumn", - "[]; deletedEventIds: string[]; disabledCellActions: string[]; pageSize: number; pageSizeOptions: number[]; id?: string | undefined; leadingControlColumns: ", + "[]; deletedEventIds: string[]; disabledCellActions: string[]; pageSizeOptions: number[]; id?: string | undefined; leadingControlColumns?: ", "EuiDataGridControlColumn", - "[]; showAlertStatusWithFlapping?: boolean | undefined; trailingControlColumns: ", + "[] | undefined; showAlertStatusWithFlapping?: boolean | undefined; trailingControlColumns?: ", "EuiDataGridControlColumn", - "[]; useFetchAlertsData: () => ", - "FetchAlertData", - "; visibleColumns: string[]; 'data-test-subj': string; updatedAt: number; browserFields: any; onToggleColumn: (columnId: string) => void; onResetColumns: () => void; onChangeVisibleColumns: (newColumns: string[]) => void; onColumnResize?: ", + "[] | undefined; cellContext?: CellContext | undefined; visibleColumns: string[]; 'data-test-subj': string; browserFields: any; onToggleColumn: (columnId: string) => void; onResetColumns: () => void; onChangeVisibleColumns: (newColumns: string[]) => void; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", " | undefined; query: Pick<", "QueryDslQueryContainer", @@ -6287,11 +6273,43 @@ "section": "def-common.AlertConsumers", "text": "AlertConsumers" }, - "[] | undefined; renderCellPopover?: ((props: ", + "[] | undefined; pagination: ", + { + "pluginId": "ruleRegistry", + "scope": "common", + "docId": "kibRuleRegistryPluginApi", + "section": "def-common.RuleRegistrySearchRequestPagination", + "text": "RuleRegistrySearchRequestPagination" + }, + "; sort: ", + "SortCombinations", + "[]; isLoading: boolean; alerts: ", + "Alerts", + "; oldAlertsData: { field: string; value: string[]; }[][]; ecsAlertsData: unknown[]; getInspectQuery: ", + "GetInspectQuery", + "; refetch: () => void; alertsCount: number; onSortChange: (sort: ", + "EuiDataGridColumnSortingConfig", + "[]) => void; onPageChange: (pagination: ", + { + "pluginId": "ruleRegistry", + "scope": "common", + "docId": "kibRuleRegistryPluginApi", + "section": "def-common.RuleRegistrySearchRequestPagination", + "text": "RuleRegistrySearchRequestPagination" + }, + ") => void; renderCellPopover?: ((props: ", "EuiDataGridCellPopoverElementProps", " & { alert: ", "EcsFieldsResponse", - "; }) => React.ReactNode | JSX.Element) | undefined; } & Partial React.ReactNode | JSX.Element) | undefined; fieldFormats: ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FieldFormatsRegistry", + "text": "FieldFormatsRegistry" + }, + "; } & Partial>" ], @@ -6423,46 +6441,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.GetRenderCellValue", - "type": "Type", - "tags": [], - "label": "GetRenderCellValue", - "description": [], - "signature": [ - "({ setFlyoutAlert, context, }: { setFlyoutAlert: ", - "SetFlyoutAlert", - "; context?: T | undefined; }) => (props: ", - "EuiDataGridCellValueElementProps", - " & { data: ", - "TimelineNonEcsData", - "[]; }) => React.ReactNode | JSX.Element" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.GetRenderCellValue.$1", - "type": "Object", - "tags": [], - "label": "__0", - "description": [], - "signature": [ - "{ setFlyoutAlert: ", - "SetFlyoutAlert", - "; context?: T | undefined; }" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "triggersActionsUi", "id": "def-public.Rule", @@ -10306,7 +10284,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly rulesListDatagrid: boolean; readonly globalAlertsPage: boolean; readonly ruleTagFilter: boolean; readonly ruleStatusFilter: boolean; readonly rulesDetailLogs: boolean; readonly ruleUseExecutionStatus: boolean; readonly ruleKqlBar: boolean; readonly isMustacheAutocompleteOn: boolean; readonly showMustacheAutocompleteSwitch: boolean; readonly ruleFormV2: boolean; }" + "{ readonly rulesListDatagrid: boolean; readonly stackAlertsPage: boolean; readonly ruleTagFilter: boolean; readonly ruleStatusFilter: boolean; readonly rulesDetailLogs: boolean; readonly ruleUseExecutionStatus: boolean; readonly ruleKqlBar: boolean; readonly isMustacheAutocompleteOn: boolean; readonly showMustacheAutocompleteSwitch: boolean; readonly ruleFormV2: boolean; }" ], "path": "x-pack/plugins/triggers_actions_ui/common/experimental_features.ts", "deprecated": false, @@ -10385,7 +10363,7 @@ "\nA list of allowed values that can be used in `xpack.trigger_actions_ui.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly rulesListDatagrid: true; readonly globalAlertsPage: false; readonly ruleTagFilter: true; readonly ruleStatusFilter: true; readonly rulesDetailLogs: true; readonly ruleUseExecutionStatus: false; readonly ruleKqlBar: false; readonly isMustacheAutocompleteOn: false; readonly showMustacheAutocompleteSwitch: false; readonly ruleFormV2: false; }" + "{ readonly rulesListDatagrid: true; readonly stackAlertsPage: true; readonly ruleTagFilter: true; readonly ruleStatusFilter: true; readonly rulesDetailLogs: true; readonly ruleUseExecutionStatus: false; readonly ruleKqlBar: false; readonly isMustacheAutocompleteOn: false; readonly showMustacheAutocompleteSwitch: false; readonly ruleFormV2: false; }" ], "path": "x-pack/plugins/triggers_actions_ui/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index be4ae3e76a988..113197b84ac98 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 595 | 1 | 569 | 60 | +| 593 | 1 | 567 | 58 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index c47aa9bef3a49..e7684a26bba96 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-04-16 +date: 2024-04-18 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 d3510f44c4f4c..9d89a112db914 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-04-16 +date: 2024-04-18 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 4d0954ecae1e9..df68f89ff9a2f 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.devdocs.json b/api_docs/unified_histogram.devdocs.json index 6b53c653dfdca..ea83b62c3c8ce 100644 --- a/api_docs/unified_histogram.devdocs.json +++ b/api_docs/unified_histogram.devdocs.json @@ -36,6 +36,53 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.fieldSupportsBreakdown", + "type": "Function", + "tags": [], + "label": "fieldSupportsBreakdown", + "description": [], + "signature": [ + "(field: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + ") => boolean" + ], + "path": "src/plugins/unified_histogram/public/utils/field_supports_breakdown.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.fieldSupportsBreakdown.$1", + "type": "Object", + "tags": [], + "label": "field", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + } + ], + "path": "src/plugins/unified_histogram/public/utils/field_supports_breakdown.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "unifiedHistogram", "id": "def-public.getBreakdownField", @@ -465,6 +512,56 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.UnifiedBreakdownFieldSelector", + "type": "Function", + "tags": [], + "label": "UnifiedBreakdownFieldSelector", + "description": [ + "\nA resizable layout component with two panels that renders a histogram with a hits\ncounter in the top panel, and a main display (data table, etc.) in the bottom panel." + ], + "signature": [ + "React.ForwardRefExoticComponent<", + { + "pluginId": "unifiedHistogram", + "scope": "public", + "docId": "kibUnifiedHistogramPluginApi", + "section": "def-public.BreakdownFieldSelectorProps", + "text": "BreakdownFieldSelectorProps" + }, + " & ", + { + "pluginId": "@kbn/shared-ux-utility", + "scope": "common", + "docId": "kibKbnSharedUxUtilityPluginApi", + "section": "def-common.WithSuspenseExtendedDeps", + "text": "WithSuspenseExtendedDeps" + }, + " & React.RefAttributes<{}>>" + ], + "path": "src/plugins/unified_histogram/public/chart/lazy.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.UnifiedBreakdownFieldSelector.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "unifiedHistogram", "id": "def-public.UnifiedHistogramContainer", @@ -559,6 +656,101 @@ } ], "interfaces": [ + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.BreakdownFieldSelectorProps", + "type": "Interface", + "tags": [], + "label": "BreakdownFieldSelectorProps", + "description": [], + "path": "src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.BreakdownFieldSelectorProps.dataView", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.BreakdownFieldSelectorProps.breakdown", + "type": "Object", + "tags": [], + "label": "breakdown", + "description": [], + "signature": [ + "UnifiedHistogramBreakdownContext" + ], + "path": "src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.BreakdownFieldSelectorProps.onBreakdownFieldChange", + "type": "Function", + "tags": [], + "label": "onBreakdownFieldChange", + "description": [], + "signature": [ + "((breakdownField: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + " | undefined) => void) | undefined" + ], + "path": "src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "unifiedHistogram", + "id": "def-public.BreakdownFieldSelectorProps.onBreakdownFieldChange.$1", + "type": "Object", + "tags": [], + "label": "breakdownField", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + " | undefined" + ], + "path": "src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "unifiedHistogram", "id": "def-public.UnifiedHistogramChartLoadEvent", diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index dce19fa3d39e9..91d1758c9162b 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.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 | |-------------------|-----------|------------------------|-----------------| -| 62 | 0 | 29 | 5 | +| 71 | 0 | 36 | 6 | ## Client diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 3640a68bc452a..87b3156b36e10 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-04-16 +date: 2024-04-18 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 f6584c098e7d1..5531c0e181ed0 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-04-16 +date: 2024-04-18 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 bc1a5c5b513ee..7fbaf876cf255 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-04-16 +date: 2024-04-18 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 e30df1aac2df6..9adacd3143c46 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-04-16 +date: 2024-04-18 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 2d6478c5feaa2..6eba9e40253a5 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-04-16 +date: 2024-04-18 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 40959b56795e5..fd7d4a08340df 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-04-16 +date: 2024-04-18 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 81910a410b021..d065280fe8b47 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-04-16 +date: 2024-04-18 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 d6fe755e67e62..a0cd9d71ebee2 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-04-16 +date: 2024-04-18 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 995b8588157fa..a7fa76e2ea02b 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-04-16 +date: 2024-04-18 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 9ba1b20366658..deba5cc5c1bf3 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-04-16 +date: 2024-04-18 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 3be3a4a7673e5..362ff8e9f0dc0 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-04-16 +date: 2024-04-18 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 66bbefecb7d18..52472a7085d38 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-04-16 +date: 2024-04-18 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 8ec5a8cd35780..7a04b85f84438 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-04-16 +date: 2024-04-18 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 9f715ae622bb8..b5ee1dbe17f1c 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-04-16 +date: 2024-04-18 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 88a392d3766d4..61b82375a298c 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-04-16 +date: 2024-04-18 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 058334c4cb60f..cf348f0ed1882 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 8a541be587e27..e17f4e3b4af45 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -13032,7 +13032,7 @@ "label": "rowHeight", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode | undefined" ], "path": "src/plugins/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -13046,7 +13046,7 @@ "label": "headerRowHeight", "description": [], "signature": [ - "\"custom\" | \"auto\" | \"single\" | undefined" + "RowHeightMode | undefined" ], "path": "src/plugins/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 1e44e6f135ba0..e91d1a0ba6abe 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-04-16 +date: 2024-04-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 703b4f0339a54..36cda12ee15da 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -144,6 +144,15 @@ For information about the {kib} 8.13.0 release, review the following information In Canvas, an empty text element incorrectly triggers a "Markdown content is required in [readOnly] mode" toast notification. For more information, refer to ({kibana-pull}179457[#179457]). ==== +[discrete] +[[known-177938-8.13]] +.Index templates UI incorrectly sets the `allow_auto_create` field to `false` by default. +[%collapsible] +==== +*Details* + +If you are creating or editing an index template using the Index Templates form under the Index Management page, the `allow_auto_create` field is incorrectly set to `false` by default (the default value should be `undefined`). For more information, refer to ({kibana-issue}177938[#177938]). +==== + [float] [[breaking-changes-8.13.0]] === Breaking changes @@ -532,6 +541,19 @@ Security:: For information about the {kib} 8.12.0 release, review the following information. +[float] +[[known-issues-8.12.0]] +=== Known issues + +[discrete] +[[known-177938-8.12]] +.Index templates UI incorrectly sets the `allow_auto_create` field to `false` by default. +[%collapsible] +==== +*Details* + +If you are creating or editing an index template using the Index Templates form under the Index Management page, the `allow_auto_create` field is incorrectly set to `false` by default (the default value should be `undefined`). For more information, refer to ({kibana-issue}177938[#177938]). +==== + [float] [[breaking-changes-8.12.0]] === Breaking changes diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index 4ab341571668e..9e400f01c88dd 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -486,6 +486,9 @@ If you're enrolled in the AWS Enterprise Discount Program (EDP), enter your disc [[observability-profiling-azure-cost-discount-rate]]`observability:profilingAzureCostDiscountRate`:: If you have an Azure Enterprise Agreement with Microsoft, enter your discount rate to update the profiling cost calculation. +[[observability-profiling-use-topNFunctions-from-stacktraces]]`observability:profilingFetchTopNFunctionsFromStacktraces`:: +Switch to fetch the TopN Functions from the Stacktraces API. + [[observability-profiling-cost-per-vcpu-per-hour]]`observability:profilingCostPervCPUPerHour`:: Default Hourly Cost per CPU Core for machines not on AWS or Azure. diff --git a/examples/ui_action_examples/kibana.jsonc b/examples/ui_action_examples/kibana.jsonc index 3de8e301bae2e..2d7efc3de9cea 100644 --- a/examples/ui_action_examples/kibana.jsonc +++ b/examples/ui_action_examples/kibana.jsonc @@ -10,8 +10,6 @@ "requiredPlugins": [ "uiActions" ], - "requiredBundles": [ - "kibanaReact" - ] + "requiredBundles": [] } } diff --git a/examples/ui_action_examples/public/hello_world_action.tsx b/examples/ui_action_examples/public/hello_world_action.tsx index cb82f8f58a665..46d306f80b5e7 100644 --- a/examples/ui_action_examples/public/hello_world_action.tsx +++ b/examples/ui_action_examples/public/hello_world_action.tsx @@ -8,14 +8,12 @@ import React from 'react'; import { EuiText, EuiModalBody, EuiButton } from '@elastic/eui'; -import { OverlayStart } from '@kbn/core/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { CoreStart } from '@kbn/core/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; export const ACTION_HELLO_WORLD = 'ACTION_HELLO_WORLD'; -interface StartServices { - openModal: OverlayStart['openModal']; -} +type StartServices = Pick; export const createHelloWorldActionDefinition = ( getStartServices: () => Promise @@ -24,15 +22,16 @@ export const createHelloWorldActionDefinition = ( type: ACTION_HELLO_WORLD, getDisplayName: () => 'Hello World!', execute: async () => { - const { openModal } = await getStartServices(); - const overlay = openModal( + const { overlays, ...startServices } = await getStartServices(); + const overlay = overlays.openModal( toMountPoint( Hello world! overlay.close()}> Close - + , + startServices ) ); }, diff --git a/examples/ui_action_examples/public/plugin.ts b/examples/ui_action_examples/public/plugin.ts index 8b740b556cacc..286882ddde94d 100644 --- a/examples/ui_action_examples/public/plugin.ts +++ b/examples/ui_action_examples/public/plugin.ts @@ -29,14 +29,14 @@ export class UiActionExamplesPlugin ) { uiActions.registerTrigger(helloWorldTrigger); - const helloWorldAction = createHelloWorldActionDefinition(async () => ({ - openModal: (await core.getStartServices())[0].overlays.openModal, - })); + const helloWorldAction = createHelloWorldActionDefinition( + async () => (await core.getStartServices())[0] + ); uiActions.addTriggerAction(helloWorldTrigger.id, helloWorldAction); } - public start(core: CoreStart, plugins: UiActionExamplesStartDependencies) {} + public start(_core: CoreStart, _plugins: UiActionExamplesStartDependencies) {} public stop() {} } diff --git a/examples/ui_action_examples/tsconfig.json b/examples/ui_action_examples/tsconfig.json index b87f7cdf0d864..807e2eace4bc4 100644 --- a/examples/ui_action_examples/tsconfig.json +++ b/examples/ui_action_examples/tsconfig.json @@ -14,8 +14,8 @@ "target/**/*", ], "kbn_references": [ - "@kbn/kibana-react-plugin", "@kbn/ui-actions-plugin", "@kbn/core", + "@kbn/react-kibana-mount", ] } diff --git a/examples/ui_actions_explorer/kibana.jsonc b/examples/ui_actions_explorer/kibana.jsonc index e6c2c188c2f97..350a132a16cf7 100644 --- a/examples/ui_actions_explorer/kibana.jsonc +++ b/examples/ui_actions_explorer/kibana.jsonc @@ -12,8 +12,6 @@ "uiActionsExamples", "developerExamples" ], - "requiredBundles": [ - "kibanaReact" - ] + "requiredBundles": [] } } diff --git a/examples/ui_actions_explorer/public/actions/actions.tsx b/examples/ui_actions_explorer/public/actions/actions.tsx index 573778a504df3..63c50b1aec034 100644 --- a/examples/ui_actions_explorer/public/actions/actions.tsx +++ b/examples/ui_actions_explorer/public/actions/actions.tsx @@ -7,10 +7,10 @@ */ import React from 'react'; -import { OverlayStart } from '@kbn/core/public'; +import { CoreStart } from '@kbn/core/public'; import { EuiFieldText, EuiModalBody, EuiButton } from '@elastic/eui'; import { useState } from 'react'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { ActionExecutionContext, createAction, @@ -102,15 +102,19 @@ function EditUserModal({ ); } -export const createEditUserAction = (getOpenModal: () => Promise) => +export const createEditUserAction = (getStartServices: () => Promise) => createAction({ id: ACTION_EDIT_USER, type: ACTION_EDIT_USER, getIconType: () => 'pencil', getDisplayName: () => 'Edit user', execute: async ({ user, update }) => { - const overlay = (await getOpenModal())( - toMountPoint( overlay.close()} />) + const { overlays, ...startServices } = await getStartServices(); + const overlay = overlays.openModal( + toMountPoint( + overlay.close()} />, + startServices + ) ); }, }); diff --git a/examples/ui_actions_explorer/public/app.tsx b/examples/ui_actions_explorer/public/app.tsx index 31ac9c3c29ed9..3b5d3a99274f7 100644 --- a/examples/ui_actions_explorer/public/app.tsx +++ b/examples/ui_actions_explorer/public/app.tsx @@ -17,8 +17,8 @@ import { EuiSpacer, EuiPageHeader, } from '@elastic/eui'; +import { AppMountParameters, CoreStart } from '@kbn/core/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import { AppMountParameters, OverlayStart } from '@kbn/core/public'; import { TriggerContextExample } from './trigger_context_example'; import { ContextMenuExamples } from './context_menu_examples'; import { Overview } from './overview'; @@ -26,10 +26,10 @@ import { HelloWorldExample } from './hello_world_example'; interface Props { uiActionsStartService: UiActionsStart; - openModal: OverlayStart['openModal']; + core: CoreStart; } -const ActionsExplorer = ({ uiActionsStartService, openModal }: Props) => { +const ActionsExplorer = ({ uiActionsStartService, core }: Props) => { return ( @@ -42,10 +42,7 @@ const ActionsExplorer = ({ uiActionsStartService, openModal }: Props) => { - + diff --git a/examples/ui_actions_explorer/public/hello_world_example.tsx b/examples/ui_actions_explorer/public/hello_world_example.tsx index 14fa8cae32606..89f5c23d00940 100644 --- a/examples/ui_actions_explorer/public/hello_world_example.tsx +++ b/examples/ui_actions_explorer/public/hello_world_example.tsx @@ -9,19 +9,19 @@ import React, { useState } from 'react'; import { EuiButton, EuiSpacer, EuiText, EuiModalBody, EuiLink, EuiSwitch } from '@elastic/eui'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { UiActionsStart, createAction } from '@kbn/ui-actions-plugin/public'; -import { OverlayStart } from '@kbn/core/public'; +import { CoreStart } from '@kbn/core/public'; import { HELLO_WORLD_TRIGGER_ID, ACTION_HELLO_WORLD } from '@kbn/ui-actions-examples-plugin/public'; const DYNAMIC_ACTION_ID = `${ACTION_HELLO_WORLD}-Waldo`; interface Props { uiActionsStartService: UiActionsStart; - openModal: OverlayStart['openModal']; + startServices: Pick; } -export const HelloWorldExample = ({ uiActionsStartService, openModal }: Props) => { +export const HelloWorldExample = ({ uiActionsStartService, startServices }: Props) => { const [isChecked, setIsChecked] = useState(false); const actionsMessage = isChecked ? '2 actions attached' : '1 action attached'; @@ -70,14 +70,15 @@ export const HelloWorldExample = ({ uiActionsStartService, openModal }: Props) = type: ACTION_HELLO_WORLD, getDisplayName: () => 'Say hello to Waldo', execute: async () => { - const overlay = openModal( + const overlay = startServices.overlays.openModal( toMountPoint( Hello Waldo{' '} overlay.close()}> Close - + , + startServices ) ); }, diff --git a/examples/ui_actions_explorer/public/plugin.tsx b/examples/ui_actions_explorer/public/plugin.tsx index fdb2357f40cdd..fc95dad91615a 100644 --- a/examples/ui_actions_explorer/public/plugin.tsx +++ b/examples/ui_actions_explorer/public/plugin.tsx @@ -51,7 +51,7 @@ export class UiActionsExplorerPlugin implements Plugin (await startServices)[0].overlays.openModal) + createEditUserAction(async () => (await startServices)[0]) ); deps.uiActions.addTriggerAction(COUNTRY_TRIGGER, viewInMapsAction); @@ -68,10 +68,7 @@ export class UiActionsExplorerPlugin implements Plugin { } ); + it('constructs lazily provided validations once (idempotency)', async () => { + const router = new Router('', logger, enhanceWithContext, routerOptions); + const lazyValidation = jest.fn(() => fooValidation); + router.post( + { + path: '/', + validate: lazyValidation, + }, + (context, req, res) => res.ok() + ); + const [{ handler }] = router.getRoutes(); + for (let i = 0; i < 10; i++) { + await handler( + createRequestMock({ + params: { foo: 1 }, + query: { foo: 1 }, + payload: { foo: 1 }, + }), + mockResponseToolkit + ); + } + expect(lazyValidation).toHaveBeenCalledTimes(1); + }); + describe('Options', () => { it('throws if validation for a route is not defined explicitly', () => { const router = new Router('', logger, enhanceWithContext, routerOptions); diff --git a/packages/core/http/core-http-router-server-internal/src/router.ts b/packages/core/http/core-http-router-server-internal/src/router.ts index 150c778f8c574..81ee29e76e4f1 100644 --- a/packages/core/http/core-http-router-server-internal/src/router.ts +++ b/packages/core/http/core-http-router-server-internal/src/router.ts @@ -7,6 +7,7 @@ */ import type { Request, ResponseToolkit } from '@hapi/hapi'; +import { once } from 'lodash'; import apm from 'elastic-apm-node'; import { isConfigSchema } from '@kbn/config-schema'; import type { Logger } from '@kbn/logging'; @@ -134,19 +135,19 @@ export interface RouterOptions { } /** @internal */ -interface InternalRegistrarOptions { +export interface InternalRegistrarOptions { isVersioned: boolean; } /** @internal */ -type InternalRegistrar = ( +export type InternalRegistrar = ( route: RouteConfig, handler: RequestHandler, internalOpts?: InternalRegistrarOptions ) => ReturnType>; /** @internal */ -interface InternalRouterRoute extends RouterRoute { +export interface InternalRouterRoute extends RouterRoute { readonly isVersioned: boolean; } @@ -181,6 +182,9 @@ export class Router, internalOptions: { isVersioned: boolean } = { isVersioned: false } ) => { + if (typeof route.validate === 'function') { + route = { ...route, validate: once(route.validate) }; + } const routeSchemas = routeSchemasFromRouteConfig(route, method); this.routes.push({ diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts index d1b1d3392cca5..ac247f1a6b0ce 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.ts @@ -14,7 +14,7 @@ import { createRouter } from './mocks'; import { CoreVersionedRouter } from '.'; import { passThroughValidation } from './core_versioned_route'; import { Method } from './types'; -import { createRequest } from './core_versioned_route.test.utils'; +import { createRequest } from './core_versioned_route.test.util'; describe('Versioned route', () => { let router: Router; @@ -192,6 +192,36 @@ describe('Versioned route', () => { } ); + it('constructs lazily provided validations once (idempotency)', async () => { + let handler: RequestHandler; + (router.post as jest.Mock).mockImplementation((opts: unknown, fn) => (handler = fn)); + const versionedRouter = CoreVersionedRouter.from({ router }); + const lazyValidation = jest.fn(() => fooValidation); + versionedRouter.post({ path: '/test/{id}', access: 'internal' }).addVersion( + { + version: '1', + validate: lazyValidation, + }, + handlerFn + ); + + for (let i = 0; i < 10; i++) { + const { status } = await handler!( + {} as any, + createRequest({ + version: '1', + body: { foo: 1 }, + params: { foo: 1 }, + query: { foo: 1 }, + }), + responseFactory + ); + expect(status).toBe(200); + } + + expect(lazyValidation).toHaveBeenCalledTimes(1); + }); + describe('when in dev', () => { // NOTE: Temporary test to ensure single public API version is enforced it('only allows "2023-10-31" as public route versions', () => { diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.utils.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.util.ts similarity index 100% rename from packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.utils.ts rename to packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.test.util.ts diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts index 0978ea2e2c7e8..bdd6ff2e06856 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_route.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ import { schema } from '@kbn/config-schema'; +import { once } from 'lodash'; import { ELASTIC_HTTP_VERSION_HEADER, ELASTIC_HTTP_VERSION_QUERY_PARAM, @@ -237,7 +238,14 @@ export class CoreVersionedRoute implements VersionedRoute { public addVersion(options: Options, handler: RequestHandler): VersionedRoute { this.validateVersion(options.version); - this.handlers.set(options.version, { fn: handler, options }); + this.handlers.set(options.version, { + fn: handler, + options: { + ...options, + validate: + typeof options.validate === 'function' ? once(options.validate) : options.validate, + }, + }); return this; } diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/index.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/index.ts index 1567574a3ba46..6511bcabdd057 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/index.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/index.ts @@ -7,4 +7,5 @@ */ export { resolvers as versionHandlerResolvers } from './handler_resolvers'; export { CoreVersionedRouter } from './core_versioned_router'; -export type { HandlerResolutionStrategy } from './types'; +export type { HandlerResolutionStrategy, VersionedRouterRoute } from './types'; +export { ALLOWED_PUBLIC_VERSION } from './route_version_utils'; diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts index 6d22046ed81e1..42fc5607e59e4 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/route_version_utils.ts @@ -23,7 +23,7 @@ const INTERNAL_VERSION_REGEX = /^[1-9][0-9]*$/; * release date we only allow one public version temporarily. * @internal */ -const ALLOWED_PUBLIC_VERSION = '2023-10-31'; +export const ALLOWED_PUBLIC_VERSION = '2023-10-31'; export function isAllowedPublicVersion(version: string): undefined | string { if (ALLOWED_PUBLIC_VERSION !== version) { diff --git a/packages/core/http/core-http-router-server-internal/src/versioned_router/types.ts b/packages/core/http/core-http-router-server-internal/src/versioned_router/types.ts index b1b99d5bcaf57..846df664cf2f9 100644 --- a/packages/core/http/core-http-router-server-internal/src/versioned_router/types.ts +++ b/packages/core/http/core-http-router-server-internal/src/versioned_router/types.ts @@ -17,13 +17,9 @@ export type Method = Exclude; /** @internal */ export interface VersionedRouterRoute { - /** @internal */ method: string; - /** @internal */ path: string; - /** @internal */ options: Omit, 'path'>; - /** @internal */ handlers: Array<{ fn: RequestHandler; options: AddVersionOpts; diff --git a/packages/core/http/core-http-server/index.ts b/packages/core/http/core-http-server/index.ts index d317cdacf77e3..fef0a3cb19ebc 100644 --- a/packages/core/http/core-http-server/index.ts +++ b/packages/core/http/core-http-server/index.ts @@ -105,7 +105,13 @@ export type { RouteValidatorFullConfigRequest, RouteValidatorFullConfigResponse, } from './src/router'; -export { validBodyOutput, RouteValidationError, getRequestValidation } from './src/router'; +export { + validBodyOutput, + RouteValidationError, + getRequestValidation, + getResponseValidation, + isFullValidatorContainer, +} from './src/router'; export type { ICspConfig } from './src/csp'; diff --git a/packages/core/http/core-http-server/src/router/index.ts b/packages/core/http/core-http-server/src/router/index.ts index 8f4cf7bd9045f..61ef84a48c63f 100644 --- a/packages/core/http/core-http-server/src/router/index.ts +++ b/packages/core/http/core-http-server/src/router/index.ts @@ -75,4 +75,4 @@ export type { LifecycleResponseFactory, } from './response_factory'; export type { RawRequest, FakeRawRequest } from './raw_request'; -export { getRequestValidation, isFullValidatorContainer } from './utils'; +export { getRequestValidation, getResponseValidation, isFullValidatorContainer } from './utils'; diff --git a/packages/core/http/core-http-server/src/router/router.ts b/packages/core/http/core-http-server/src/router/router.ts index 50d4ce33ff135..0a20874b3c31b 100644 --- a/packages/core/http/core-http-server/src/router/router.ts +++ b/packages/core/http/core-http-server/src/router/router.ts @@ -124,6 +124,10 @@ export interface RouterRoute { method: RouteMethod; path: string; options: RouteConfigOptions; + /** + * @note if providing a function to lazily load your validation schemas assume + * that the function will only be called once. + */ validationSchemas?: | (() => RouteValidator) | RouteValidator diff --git a/packages/core/http/core-http-server/src/router/utils.test.ts b/packages/core/http/core-http-server/src/router/utils.test.ts index 4ead53898bb8c..db0e48cf65926 100644 --- a/packages/core/http/core-http-server/src/router/utils.test.ts +++ b/packages/core/http/core-http-server/src/router/utils.test.ts @@ -8,7 +8,7 @@ import type { ObjectType } from '@kbn/config-schema'; import type { RouteValidator } from './route_validator'; -import { getRequestValidation, isFullValidatorContainer } from './utils'; +import { getRequestValidation, getResponseValidation, isFullValidatorContainer } from './utils'; type Validator = RouteValidator; @@ -41,3 +41,30 @@ describe('getRequestValidation', () => { expect(getRequestValidation(fullValidator)).toBe(validationDummy); }); }); + +describe('getResponseValidation', () => { + it('extracts validation config', () => { + const validationDummy = { + body: {} as unknown as ObjectType, + }; + const fullValidatorContainer: Validator = { + request: {}, + response: validationDummy, + }; + + expect(getResponseValidation(fullValidatorContainer)).toBe(validationDummy); + }); + + it('returns "undefined" when there is no response validation configured', () => { + const validationDummy = { + body: {} as unknown as ObjectType, + }; + const fullValidatorContainer: Validator = { + request: {}, + }; + const fullValidator: Validator = validationDummy; + + expect(getResponseValidation(fullValidatorContainer)).toBe(undefined); + expect(getResponseValidation(fullValidator)).toBe(undefined); + }); +}); diff --git a/packages/core/http/core-http-server/src/router/utils.ts b/packages/core/http/core-http-server/src/router/utils.ts index a4bedd5157217..cb0adcc7b8c4e 100644 --- a/packages/core/http/core-http-server/src/router/utils.ts +++ b/packages/core/http/core-http-server/src/router/utils.ts @@ -9,6 +9,7 @@ import { RouteValidator, RouteValidatorFullConfigRequest, + RouteValidatorFullConfigResponse, RouteValidatorRequestAndResponses, } from './route_validator'; @@ -37,3 +38,17 @@ export function getRequestValidation( if (typeof value === 'function') value = value(); return isFullValidatorContainer(value) ? value.request : value; } + +/** + * Extracts {@link RouteValidatorFullConfigRequest} from the validation container. + * This utility is intended to be used by code introspecting router validation configuration. + * @public + */ +export function getResponseValidation( + value: + | RouteValidator + | (() => RouteValidator) +): undefined | RouteValidatorFullConfigResponse { + if (typeof value === 'function') value = value(); + return isFullValidatorContainer(value) ? value.response : undefined; +} diff --git a/packages/core/http/core-http-server/src/versioning/types.ts b/packages/core/http/core-http-server/src/versioning/types.ts index 49f22da7e8b6f..b064b07841777 100644 --- a/packages/core/http/core-http-server/src/versioning/types.ts +++ b/packages/core/http/core-http-server/src/versioning/types.ts @@ -53,6 +53,20 @@ export type VersionedRouteConfig = Omit< * @default false */ enableQueryVersion?: boolean; + + /** + * Human-friendly description of this route, should be usable for documentation + * + * @example + * ```ts + * router.get({ + * path: '/api/foo/{id}', + * access: 'public', + * description: `Retrieve foo resources given an ID. To retrieve a list of IDs use the GET /api/foo API.`, + * }) + * ``` + */ + description?: string; }; /** @@ -226,6 +240,8 @@ export interface AddVersionOpts { version: ApiVersion; /** * Validation for this version of a route + * @note if providing a function to lazily load your validation schemas assume + * that the function will only be called once. * @public */ validate: false | VersionedRouteValidation | (() => VersionedRouteValidation); // Provide a way to lazily load validation schemas diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts index dd9f9a3941bb4..a04e762eaf67d 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts @@ -218,6 +218,7 @@ export const HASH_TO_VERSION_MAP = { 'siem-ui-timeline-note|28393dfdeb4e4413393eb5f7ec8c5436': '10.0.0', 'siem-ui-timeline-pinned-event|293fce142548281599060e07ad2c9ddb': '10.0.0', 'siem-ui-timeline|f6739fd4b17646a6c86321a746c247ef': '10.1.0', + 'slo-settings|3d1b76c39bfb2cc8296b024d73854724': '10.0.0', 'slo|dc7f35c0cf07d71bb36f154996fe10c6': '10.1.0', 'space|c3aec2a5d4afcb75554fed96411170e1': '10.0.0', 'spaces-usage-stats|3d1b76c39bfb2cc8296b024d73854724': '10.0.0', diff --git a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts index 4b4ab735d5eea..c11a51b7d41fe 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts +++ b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts @@ -493,22 +493,16 @@ export class CoreUsageDataService typeRegistry.registerType(coreUsageStatsType); }; - const getClient = () => { - const debugLogger = (message: string) => this.logger.debug(message); - - return new CoreUsageStatsClient( - debugLogger, - http.basePath, - internalRepositoryPromise, - this.stop$ - ); - }; - - this.coreUsageStatsClient = getClient(); + this.coreUsageStatsClient = new CoreUsageStatsClient( + (message: string) => this.logger.debug(message), + http.basePath, + internalRepositoryPromise, + this.stop$ + ); const contract: InternalCoreUsageDataSetup = { registerType, - getClient, + getClient: () => this.coreUsageStatsClient!, registerUsageCounter: (usageCounter) => { this.incrementUsageCounter = (params) => usageCounter.incrementCounter(params); }, diff --git a/packages/deeplinks/management/deep_links.ts b/packages/deeplinks/management/deep_links.ts index 1cb22c52c2800..bb0dda17f6ce9 100644 --- a/packages/deeplinks/management/deep_links.ts +++ b/packages/deeplinks/management/deep_links.ts @@ -28,6 +28,7 @@ export type IntegrationsDeepLinkId = IntegrationsAppId | FleetAppId | OsQueryApp export type ManagementAppId = typeof MANAGEMENT_APP_ID; export type ManagementId = | 'aiAssistantManagementSelection' + | 'securityAiAssistantManagement' | 'observabilityAiAssistantManagement' | 'api_keys' | 'cases' diff --git a/packages/kbn-alerts-ui-shared/index.ts b/packages/kbn-alerts-ui-shared/index.ts index 88445d10a463d..2e766387acf64 100644 --- a/packages/kbn-alerts-ui-shared/index.ts +++ b/packages/kbn-alerts-ui-shared/index.ts @@ -19,3 +19,4 @@ export type { AlertsSearchBarProps } from './src/alerts_search_bar/types'; export * from './src/alert_fields_table'; export * from './src/rule_type_modal'; +export * from './src/alert_filter_controls/types'; diff --git a/packages/kbn-alerts-ui-shared/src/alert_filter_controls/alert_filter_controls.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/alert_filter_controls.tsx new file mode 100644 index 0000000000000..fc2b9fbbc207f --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/alert_filter_controls.tsx @@ -0,0 +1,164 @@ +/* + * Copyright 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 { ComponentProps } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; +import type { Filter } from '@kbn/es-query'; +import { EuiFlexItem } from '@elastic/eui'; +import type { DataViewSpec, DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { AlertConsumers } from '@kbn/rule-data-utils'; +import { HttpStart } from '@kbn/core-http-browser'; +import { NotificationsStart } from '@kbn/core-notifications-browser'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; +import { useAlertDataView } from '../..'; +import { FilterGroupLoading } from './loading'; +import { DEFAULT_CONTROLS } from './constants'; +import { FilterGroup } from './filter_group'; +import { FilterControlConfig } from './types'; + +export type AlertFilterControlsProps = Omit< + ComponentProps, + 'dataViewId' | 'defaultControls' | 'featureIds' | 'Storage' +> & { + /** + * The feature ids used to get the correct alert data view(s) + */ + featureIds?: AlertConsumers[]; + /** + * An array of default control configurations + */ + defaultControls?: FilterControlConfig[]; + /** + * Specify overrides for the virtual data view created by the filter bar + * (builds upon the alert data view generated by the feature ids) + */ + dataViewSpec?: DataViewSpec; + /** + * The services needed by the filter bar + */ + services: { + http: HttpStart; + notifications: NotificationsStart; + dataViews: DataViewsPublicPluginStart; + storage: typeof Storage; + }; +}; + +/** + * A configurable alert filters bar based on the controls embeddable + * + * @example + * + * + */ +export const AlertFilterControls = (props: AlertFilterControlsProps) => { + const { + featureIds = [AlertConsumers.STACK_ALERTS], + defaultControls = DEFAULT_CONTROLS, + dataViewSpec, + onFiltersChange, + services: { + http, + notifications: { toasts }, + dataViews, + storage, + }, + ...restFilterItemGroupProps + } = props; + const [loadingPageFilters, setLoadingPageFilters] = useState(true); + const { dataViews: alertDataViews, loading: loadingDataViews } = useAlertDataView({ + featureIds, + dataViewsService: dataViews, + http, + toasts, + }); + + useEffect(() => { + if (!loadingDataViews) { + // If a data view spec is provided, create a new data view + if (dataViewSpec?.id) { + (async () => { + // Creates an adhoc data view starting from the alert data view + // and applying the overrides specified in the dataViewSpec + const spec = { + ...(alertDataViews?.[0] ?? {}), + ...(dataViewSpec ?? {}), + } as DataViewSpec; + await dataViews.create(spec); + setLoadingPageFilters(false); + })(); + } else { + setLoadingPageFilters(false); + } + } + + return () => dataViews.clearInstanceCache(); + }, [dataViewSpec, alertDataViews, dataViews, loadingDataViews]); + + const handleFilterChanges = useCallback( + (newFilters: Filter[]) => { + if (!onFiltersChange) { + return; + } + const updatedFilters = newFilters.map((filter) => { + return { + ...filter, + meta: { + ...filter.meta, + disabled: false, + }, + }; + }); + + onFiltersChange(updatedFilters); + }, + [onFiltersChange] + ); + + if (loadingPageFilters) { + return ( + + + + ); + } + + return ( + + ); +}; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/buttons.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/buttons.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/common/components/filter_group/buttons.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/buttons.tsx index 71babb11c62e5..690d838221452 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/buttons.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/buttons.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { FC } from 'react'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/constants.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/constants.ts similarity index 52% rename from x-pack/plugins/security_solution/public/common/components/filter_group/constants.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/constants.ts index 9eef5311b278b..0bd3300aa3c29 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/constants.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/constants.ts @@ -1,11 +1,49 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { AddOptionsListControlProps } from '@kbn/controls-plugin/public'; +import { ALERT_RULE_NAME, ALERT_STATUS } from '@kbn/rule-data-utils'; +import { i18n } from '@kbn/i18n'; +import { FilterControlConfig } from './types'; + +export const DEFAULT_CONTROLS: FilterControlConfig[] = [ + { + title: i18n.translate('alertsUIShared.alertFilterControls.defaultControlDisplayNames.status', { + defaultMessage: 'Status', + }), + fieldName: ALERT_STATUS, + selectedOptions: ['active'], + hideActionBar: true, + persist: true, + hideExists: true, + }, + { + title: i18n.translate('alertsUIShared.alertFilterControls.defaultControlDisplayNames.rule', { + defaultMessage: 'Rule', + }), + fieldName: ALERT_RULE_NAME, + hideExists: true, + }, + { + title: i18n.translate('alertsUIShared.alertFilterControls.defaultControlDisplayNames.group', { + defaultMessage: 'Group', + }), + fieldName: 'kibana.alert.group.value', + }, + { + title: i18n.translate('alertsUIShared.alertFilterControls.defaultControlDisplayNames.tags', { + defaultMessage: 'Tags', + }), + fieldName: 'tags', + }, +]; + +export const URL_PARAM_KEY = 'pageFilters'; export const TEST_IDS = { FILTER_CONTROLS: 'filter-group__items', @@ -24,7 +62,6 @@ export const TEST_IDS = { EDIT: 'filter-group__context--edit', DISCARD: `filter-group__context--discard`, }, - FILTER_BY_ASSIGNEES_BUTTON: 'filter-popover-button-assignees', }; export const COMMON_OPTIONS_LIST_CONTROL_INPUTS: Partial = { diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/context_menu.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/context_menu.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/common/components/filter_group/context_menu.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/context_menu.tsx index 2e77a40a70a80..62ed62264197c 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/context_menu.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/context_menu.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { EuiButtonIcon, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from '@elastic/eui'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/filter_group.test.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx similarity index 84% rename from x-pack/plugins/security_solution/public/common/components/filter_group/filter_group.test.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx index 1a56b6c8a28a8..42c335e25d466 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/filter_group.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx @@ -1,25 +1,28 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { FilterGroup } from '.'; -import type { ComponentProps, FC } from 'react'; +import { FilterGroup } from './filter_group'; +import { FC } from 'react'; import React from 'react'; import { act, render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { DEFAULT_DETECTION_PAGE_FILTERS } from '../../../../common/constants'; -import { TestProviders } from '../../mock'; -import type { +import { ControlGroupOutput, ControlGroupInput, ControlGroupContainer, } from '@kbn/controls-plugin/public'; import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; import { initialInputData, sampleOutputData } from './mocks/data'; -import { useGetInitialUrlParamValue } from '../../utils/global_query_string/helpers'; -import { COMMON_OPTIONS_LIST_CONTROL_INPUTS, TEST_IDS } from './constants'; +import { + COMMON_OPTIONS_LIST_CONTROL_INPUTS, + DEFAULT_CONTROLS, + TEST_IDS, + URL_PARAM_KEY, +} from './constants'; import { controlGroupFilterInputMock$, controlGroupFilterOutputMock$, @@ -27,27 +30,13 @@ import { } from './mocks/control_group'; import { getMockedControlGroupRenderer } from './mocks/control_group_renderer'; import { URL_PARAM_ARRAY_EXCEPTION_MSG } from './translations'; +import { AlertConsumers } from '@kbn/rule-data-utils'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import type { FilterGroupProps } from './types'; -jest.mock('../../utils/global_query_string/helpers', () => { - return { - ...jest.requireActual('../../utils/global_query_string/helpers'), - useGetInitialUrlParamValue: jest.fn().mockImplementation(() => () => null), - }; -}); - -jest.mock('../../utils/global_query_string', () => { - return { - ...jest.requireActual('../../utils/global_query_string'), - }; -}); - -jest.mock('../../hooks/use_space_id', () => { - return { - useSpaceId: jest.fn(() => 'test_space_id'), - }; -}); - -const LOCAL_STORAGE_KEY = 'securitySolution.test_space_id.pageFilters'; +const featureIds = [AlertConsumers.STACK_ALERTS]; +const spaceId = 'test-space-id'; +const LOCAL_STORAGE_KEY = `${featureIds.join(',')}.${spaceId}.${URL_PARAM_KEY}`; const controlGroupMock = getControlGroupMock(); @@ -66,37 +55,31 @@ const MockedControlGroupRenderer = getMockedControlGroupRenderer( controlGroupMock as unknown as ControlGroupContainer ); -jest.mock('@kbn/controls-plugin/public/control_group/external_api/control_group_renderer', () => { - const { forwardRef: fR } = jest.requireActual('react'); - // const { ControlGroupRenderer: MockedCGR } = jest.requireActual( - // '@kbn/controls-plugin/public/control_group/external_api/control_group_renderer' - // ); - return { - _esModule: true, - // @ts-expect-error - ControlGroupRenderer: fR((props, ref) => ), - }; -}); - const onFilterChangeMock = jest.fn(); const onInitMock = jest.fn(); -const TestComponent: FC< - ComponentProps & { - filterGroupProps?: Partial>; - } -> = (props) => ( - +const TestComponent: FC> = (props) => { + return ( - -); + ); +}; const openContextMenu = async () => { fireEvent.click(screen.getByTestId(TEST_IDS.CONTEXT_MENU.BTN)); @@ -149,7 +132,7 @@ describe(' Filter Group Component ', () => { }); it('should have add button disable/enable when controls are more/less than max', async () => { - render(); + render(); updateControlGroupInputMock(initialInputData as ControlGroupInput); @@ -179,7 +162,7 @@ describe(' Filter Group Component ', () => { }); it('should open flyout when clicked on ADD', async () => { - render(); + render(); updateControlGroupInputMock(initialInputData as ControlGroupInput); @@ -300,7 +283,7 @@ describe(' Filter Group Component ', () => { const newInputData = { ...initialInputData, panels: { - // status as persistent controls is first in the position with order as 0 + // status as persistent controls is first in the position with order as 0 '0': initialInputData.panels['0'], '1': initialInputData.panels['1'], }, @@ -313,16 +296,13 @@ describe(' Filter Group Component ', () => { fireEvent.click(screen.getByTestId(TEST_IDS.SAVE_CONTROL)); - await waitFor(() => { - // edit model gone - expect(screen.queryAllByTestId(TEST_IDS.SAVE_CONTROL)).toHaveLength(0); - - // check if upsert was called correctly - expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(0); - }); + // edit model gone + await waitFor(() => expect(screen.queryAllByTestId(TEST_IDS.SAVE_CONTROL)).toHaveLength(0)); + // check if upsert was called correctly + expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(0); }); - it('should rebuild and save controls successfully when controls are not in desired order', async () => { + it('should rebuild and save controls successfully when controls are not in desired order', async () => { render(); updateControlGroupInputMock(initialInputData as ControlGroupInput); await openContextMenu(); @@ -352,21 +332,18 @@ describe(' Filter Group Component ', () => { fireEvent.click(screen.getByTestId(TEST_IDS.SAVE_CONTROL)); - await waitFor(() => { - // edit model gone - expect(screen.queryAllByTestId(TEST_IDS.SAVE_CONTROL)).toHaveLength(0); - - // check if upsert was called correctly - expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(2); - // field id is not required to be passed when creating a control - const { id, ...expectedInputData } = initialInputData.panels['0'].explicitInput; - expect(controlGroupMock.addOptionsListControl.mock.calls[0][0]).toMatchObject({ - ...expectedInputData, - }); + // edit model gone + await waitFor(() => expect(screen.queryAllByTestId(TEST_IDS.SAVE_CONTROL)).toHaveLength(0)); + // check if upsert was called correctly + expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(2); + // field id is not required to be passed when creating a control + const { id, ...expectedInputData } = initialInputData.panels['0'].explicitInput; + expect(controlGroupMock.addOptionsListControl.mock.calls[0][0]).toMatchObject({ + ...expectedInputData, }); }); - it('should add persitable controls back on save, if deleted', async () => { + it('should add persistable controls back on save, if deleted', async () => { render(); updateControlGroupInputMock(initialInputData as ControlGroupInput); @@ -396,7 +373,7 @@ describe(' Filter Group Component ', () => { expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(2); expect(controlGroupMock.addOptionsListControl.mock.calls[0][0]).toMatchObject({ ...COMMON_OPTIONS_LIST_CONTROL_INPUTS, - ...DEFAULT_DETECTION_PAGE_FILTERS[0], + ...DEFAULT_CONTROLS[0], }); // field id is not required to be passed when creating a control @@ -491,19 +468,15 @@ describe(' Filter Group Component ', () => { await openContextMenu(); - await waitFor(() => { - expect(screen.getByTestId(TEST_IDS.CONTEXT_MENU.RESET)).toBeVisible(); - }); + await waitFor(() => expect(screen.getByTestId(TEST_IDS.CONTEXT_MENU.RESET)).toBeVisible()); controlGroupMock.addOptionsListControl.mockClear(); controlGroupMock.updateInput.mockClear(); fireEvent.click(screen.getByTestId(TEST_IDS.CONTEXT_MENU.RESET)); - await waitFor(() => { - // blanks the input - expect(controlGroupMock.updateInput.mock.calls.length).toBe(2); - expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(4); - }); + // blanks the input + await waitFor(() => expect(controlGroupMock.updateInput.mock.calls.length).toBe(2)); + expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(5); }); it('should restore controls saved in local storage', () => { @@ -560,7 +533,7 @@ describe(' Filter Group Component ', () => { it('should update controlGroup with new filters and queries when valid query is supplied', async () => { const validQuery = { query: { language: 'kuery', query: '' } }; // pass an invalid query - render(); + render(); await waitFor(() => { expect(controlGroupMock.updateInput).toHaveBeenNthCalledWith( @@ -576,7 +549,7 @@ describe(' Filter Group Component ', () => { it('should not update controlGroup with new filters and queries when invalid query is supplied', async () => { const invalidQuery = { query: { language: 'kuery', query: '\\' } }; // pass an invalid query - render(); + render(); await waitFor(() => { expect(controlGroupMock.updateInput).toHaveBeenCalledWith( @@ -596,16 +569,17 @@ describe(' Filter Group Component ', () => { }); it('should show banner if url filter and stored filters are not same', async () => { - (useGetInitialUrlParamValue as jest.Mock).mockImplementationOnce(() => { - return () => [ - { - fieldName: 'abc', - }, - ]; - }); global.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(initialInputData)); - render(); + render( + + ); updateControlGroupInputMock(initialInputData as ControlGroupInput); await waitFor(() => { expect(screen.getByTestId(TEST_IDS.FILTERS_CHANGED_BANNER)).toBeVisible(); @@ -613,20 +587,21 @@ describe(' Filter Group Component ', () => { }); it('should use url filters if url and stored filters are not same', async () => { - (useGetInitialUrlParamValue as jest.Mock).mockImplementationOnce(() => { - return () => [ - { - fieldName: 'abc', - }, - ]; - }); global.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(initialInputData)); - render(); + render( + + ); updateControlGroupInputMock(initialInputData as ControlGroupInput); expect(controlGroupMock.addOptionsListControl.mock.calls.length).toBe(2); expect(controlGroupMock.addOptionsListControl.mock.calls[0][1]).toMatchObject({ ...COMMON_OPTIONS_LIST_CONTROL_INPUTS, - ...DEFAULT_DETECTION_PAGE_FILTERS[0], + ...DEFAULT_CONTROLS[0], }); expect(controlGroupMock.addOptionsListControl.mock.calls[1][1]).toMatchObject({ @@ -640,15 +615,17 @@ describe(' Filter Group Component ', () => { }); it('should ignore url params if there is an error in using them', async () => { - (useGetInitialUrlParamValue as jest.Mock).mockImplementationOnce(() => { - return () => ({ - fieldName: 'abc', - }); - }); - const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementationOnce(jest.fn()); - render(); + render( + + ); expect(consoleErrorSpy.mock.calls.length).toBe(1); expect(String(consoleErrorSpy.mock.calls[0][0])).toMatch(URL_PARAM_ARRAY_EXCEPTION_MSG); @@ -723,7 +700,9 @@ describe(' Filter Group Component ', () => { jest.clearAllMocks(); global.localStorage.clear(); }); + it('should restore from localstorage when one of the value is exists and exclude is false', async () => { + updateControlGroupInputMock(initialInputData as ControlGroupInput); const savedData = { ...initialInputData, panels: { @@ -753,6 +732,7 @@ describe(' Filter Group Component ', () => { ); }); }); + it('should restore from localstorage when one of the value has both exists and exclude true', async () => { const savedData = { ...initialInputData, diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.tsx similarity index 75% rename from x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.tsx index dd1f9109a4e1e..cc474ddf853e5 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.tsx @@ -1,41 +1,35 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { Filter } from '@kbn/es-query'; +import { buildEsQuery } from '@kbn/es-query'; import type { ControlInputTransform } from '@kbn/controls-plugin/common'; import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; import type { + ControlGroupContainer, ControlGroupInput, ControlGroupInputBuilder, ControlGroupOutput, - ControlGroupContainer, ControlGroupRendererProps, DataControlInput, } from '@kbn/controls-plugin/public'; -import { ControlGroupRenderer } from '@kbn/controls-plugin/public'; -import type { PropsWithChildren } from 'react'; -import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; +import React, { PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import type { Subscription } from 'rxjs'; -import styled from 'styled-components'; import { debounce, isEqual, isEqualWith } from 'lodash'; import type { ControlGroupCreationOptions, FieldFilterPredicate, } from '@kbn/controls-plugin/public/control_group/types'; -import { useInitializeUrlParam } from '../../utils/global_query_string'; -import { URL_PARAM_KEY } from '../../hooks/use_url_state'; -import type { FilterGroupProps, FilterItemObj } from './types'; -import { useFilterUpdatesToUrlSync } from './hooks/use_filter_update_to_url_sync'; -import { APP_ID } from '../../../../common/constants'; +import { ViewMode } from '@kbn/embeddable-plugin/common'; +import type { FilterGroupProps, FilterControlConfig } from './types'; import './index.scss'; import { FilterGroupLoading } from './loading'; -import { withSpaceId } from '../with_space_id'; import { useControlGroupSyncToLocalStorage } from './hooks/use_control_group_sync_to_local_storage'; import { useViewEditMode } from './hooks/use_view_edit_mode'; import { FilterGroupContextMenu } from './context_menu'; @@ -48,53 +42,48 @@ import { } from './utils'; import { FiltersChangedBanner } from './filters_changed_banner'; import { FilterGroupContext } from './filter_group_context'; -import { NUM_OF_CONTROLS } from './config'; -import { COMMON_OPTIONS_LIST_CONTROL_INPUTS, TEST_IDS, TIMEOUTS } from './constants'; +import { COMMON_OPTIONS_LIST_CONTROL_INPUTS, TEST_IDS, TIMEOUTS, URL_PARAM_KEY } from './constants'; import { URL_PARAM_ARRAY_EXCEPTION_MSG } from './translations'; -import { convertToBuildEsQuery } from '../../lib/kuery'; -const FilterWrapper = styled.div.attrs((props) => ({ - className: props.className, -}))` - & .euiFilterButton-hasActiveFilters { - font-weight: 400; - } - - & .controlGroup { - min-height: 40px; - } -`; - -const FilterGroupComponent = (props: PropsWithChildren) => { +export const FilterGroup = (props: PropsWithChildren) => { const { dataViewId, - onFilterChange, + onFiltersChange, timeRange, filters, query, chainingSystem, - initialControls, + defaultControls, spaceId, onInit, + controlsUrlState, + setControlsUrlState, + maxControls = Infinity, + ControlGroupRenderer, + Storage, + featureIds, } = props; const filterChangedSubscription = useRef(); const inputChangedSubscription = useRef(); + const [urlStateInitialized, setUrlStateInitialized] = useState(false); + + const [controlsFromUrl, setControlsFromUrl] = useState(controlsUrlState ?? []); - const initialControlsObj = useMemo( + const defaultControlsObj = useMemo( () => - initialControls.reduce>((prev, current) => { + defaultControls.reduce>((prev, current) => { prev[current.fieldName] = current; return prev; }, {}), - [initialControls] + [defaultControls] ); const [controlGroup, setControlGroup] = useState(); const localStoragePageFilterKey = useMemo( - () => `${APP_ID}.${spaceId}.${URL_PARAM_KEY.pageFilter}`, - [spaceId] + () => `${featureIds.join(',')}.${spaceId}.${URL_PARAM_KEY}`, + [featureIds, spaceId] ); const currentFiltersRef = useRef(); @@ -117,71 +106,47 @@ const FilterGroupComponent = (props: PropsWithChildren) => { setControlGroupInput: setControlGroupInputUpdates, getStoredControlGroupInput: getStoredControlInput, } = useControlGroupSyncToLocalStorage({ + Storage, storageKey: localStoragePageFilterKey, shouldSync: isViewMode, }); - const [initialUrlParam, setInitialUrlParam] = useState(); + useEffect(() => { + if (controlGroupInputUpdates) { + const formattedFilters = getFilterItemObjListFromControlInput(controlGroupInputUpdates); + if (!formattedFilters) return; + if (controlGroupInputUpdates.viewMode !== 'view') return; + setControlsUrlState?.(formattedFilters); + } + }, [controlGroupInputUpdates, setControlsUrlState]); const [showFiltersChangedBanner, setShowFiltersChangedBanner] = useState(false); const urlDataApplied = useRef(false); - const onUrlParamInit = (param: FilterItemObj[] | null) => { - if (!param) { - setInitialUrlParam([]); - return; - } - try { - if (!Array.isArray(param)) { - throw new Error(URL_PARAM_ARRAY_EXCEPTION_MSG); - } - const storedControlGroupInput = getStoredControlInput(); - if (storedControlGroupInput) { - const panelsFormatted = getFilterItemObjListFromControlInput(storedControlGroupInput); - if ( - !isEqualWith(panelsFormatted, param, getFilterControlsComparator('fieldName', 'title')) - ) { - setShowFiltersChangedBanner(true); - switchToEditMode(); - } - } - setInitialUrlParam(param); - } catch (err) { - // if there is an error ignore url Param - // eslint-disable-next-line no-console - console.error(err); - setInitialUrlParam([]); - } - }; - - useInitializeUrlParam(URL_PARAM_KEY.pageFilter, onUrlParamInit); - useEffect(() => { - const cleanup = () => { + return () => { [filterChangedSubscription.current, inputChangedSubscription.current].forEach((sub) => { if (sub) sub.unsubscribe(); }); }; - return cleanup; }, []); const { filters: validatedFilters, query: validatedQuery } = useMemo(() => { - const [_, kqlError] = convertToBuildEsQuery({ - config: {}, - queries: query ? [query] : [], - filters: filters ?? [], - indexPattern: { fields: [], title: '' }, - }); - - // we only need to handle kqlError because control group can handle Lucene error - if (kqlError) { - /* - * Based on the behaviour from other components, - * ignore all filters and queries if there is some error - * in the input filters and queries - * - * */ + try { + buildEsQuery( + { fields: [], title: '' }, + query ? [query] : [], + filters?.filter((f) => f.meta.disabled === false) ?? [], + { + nestedIgnoreUnmapped: true, + dateFormatTZ: undefined, + } + ); + } catch (e) { + // We only need to handle kqlError because control group can handle Lucene error + // Based on the behaviour from other components, ignore all filters and queries + // if there is some error in the input filters and queries return { filters: [], query: undefined, @@ -222,10 +187,10 @@ const FilterGroupComponent = (props: PropsWithChildren) => { ); if (isEqual(currentFiltersRef.current, newFilters)) return; if (!haveAllEmbeddablesLoaded) return; - if (onFilterChange) onFilterChange(newFilters ?? []); + if (onFiltersChange) onFiltersChange(newFilters ?? []); currentFiltersRef.current = newFilters ?? []; }, - [onFilterChange] + [onFiltersChange] ); const debouncedFilterUpdates = useMemo( @@ -233,8 +198,44 @@ const FilterGroupComponent = (props: PropsWithChildren) => { [handleOutputFilterUpdates] ); + const initializeUrlState = useCallback(() => { + try { + if (!Array.isArray(controlsUrlState)) { + throw new Error(URL_PARAM_ARRAY_EXCEPTION_MSG); + } + const storedControlGroupInput = getStoredControlInput(); + if (storedControlGroupInput) { + const panelsFormatted = getFilterItemObjListFromControlInput(storedControlGroupInput); + if ( + controlsUrlState.length && + !isEqualWith( + panelsFormatted, + controlsUrlState, + getFilterControlsComparator('fieldName', 'title') + ) + ) { + setShowFiltersChangedBanner(true); + switchToEditMode(); + } + } + setControlsFromUrl(controlsUrlState); + } catch (err) { + // if there is an error ignore url Param + // eslint-disable-next-line no-console + console.error(err); + } + setUrlStateInitialized(true); + }, [controlsUrlState, getStoredControlInput, switchToEditMode]); + useEffect(() => { - if (!controlGroup) return; + if (controlsUrlState && !urlStateInitialized) { + initializeUrlState(); + } + + if (!controlGroup) { + return; + } + filterChangedSubscription.current = controlGroup.getOutput$().subscribe({ next: debouncedFilterUpdates, }); @@ -243,13 +244,21 @@ const FilterGroupComponent = (props: PropsWithChildren) => { next: handleInputUpdates, }); - const cleanup = () => { + return () => { [filterChangedSubscription.current, inputChangedSubscription.current].forEach((sub) => { if (sub) sub.unsubscribe(); }); }; - return cleanup; - }, [controlGroup, debouncedFilterUpdates, handleInputUpdates]); + }, [ + controlGroup, + controlsUrlState, + debouncedFilterUpdates, + getStoredControlInput, + handleInputUpdates, + initializeUrlState, + switchToEditMode, + urlStateInitialized, + ]); const onControlGroupLoadHandler = useCallback( (controlGroupContainer: ControlGroupContainer) => { @@ -270,18 +279,17 @@ const FilterGroupComponent = (props: PropsWithChildren) => { * * */ - const controlsFromURL = initialUrlParam ?? []; - let controlsFromLocalStorage: FilterItemObj[] = []; + let controlsFromLocalStorage: FilterControlConfig[] = []; const storedControlGroupInput = getStoredControlInput(); if (storedControlGroupInput) { controlsFromLocalStorage = getFilterItemObjListFromControlInput(storedControlGroupInput); } let overridingControls = mergeControls({ - controlsWithPriority: [controlsFromURL, controlsFromLocalStorage], - defaultControlsObj: initialControlsObj, + controlsWithPriority: [controlsFromUrl, controlsFromLocalStorage], + defaultControlsObj, }); - if (!overridingControls || overridingControls.length === 0) return initialControls; + if (!overridingControls || overridingControls.length === 0) return defaultControls; overridingControls = overridingControls.map((item) => { return { @@ -296,9 +304,9 @@ const FilterGroupComponent = (props: PropsWithChildren) => { return reorderControlsWithDefaultControls({ controls: overridingControls, - defaultControls: initialControls, + defaultControls, }); - }, [initialUrlParam, initialControls, getStoredControlInput, initialControlsObj]); + }, [getStoredControlInput, controlsFromUrl, defaultControlsObj, defaultControls]); const fieldFilterPredicate: FieldFilterPredicate = useCallback((f) => f.type !== 'number', []); @@ -357,10 +365,6 @@ const FilterGroupComponent = (props: PropsWithChildren) => { ] ); - useFilterUpdatesToUrlSync({ - controlGroupInput: controlGroupInputUpdates, - }); - const discardChangesHandler = useCallback(() => { if (hasPendingChanges) { controlGroup?.updateInput({ @@ -377,7 +381,7 @@ const FilterGroupComponent = (props: PropsWithChildren) => { const reorderedControls = reorderControlsWithDefaultControls({ controls: currentPanels, - defaultControls: initialControls, + defaultControls, }); if (!isEqualWith(reorderedControls, currentPanels, getFilterControlsComparator('fieldName'))) { @@ -397,7 +401,7 @@ const FilterGroupComponent = (props: PropsWithChildren) => { }); } } - }, [controlGroup, dataViewId, initialControls]); + }, [controlGroup, dataViewId, defaultControls]); const saveChangesHandler = useCallback(async () => { await upsertPersistableControls(); @@ -405,7 +409,7 @@ const FilterGroupComponent = (props: PropsWithChildren) => { setShowFiltersChangedBanner(false); }, [switchToViewMode, upsertPersistableControls]); - const newControlInputTranform: ControlInputTransform = useCallback( + const newControlInputTransform: ControlInputTransform = useCallback( (newInput, controlType) => { // for any new controls, we want to avoid // default placeholder @@ -416,10 +420,10 @@ const FilterGroupComponent = (props: PropsWithChildren) => { ...COMMON_OPTIONS_LIST_CONTROL_INPUTS, }; - if ((newInput as DataControlInput).fieldName in initialControlsObj) { + if ((newInput as DataControlInput).fieldName in defaultControlsObj) { result = { ...result, - ...initialControlsObj[(newInput as DataControlInput).fieldName], + ...defaultControlsObj[(newInput as DataControlInput).fieldName], // title should not be overridden by the initial controls, hence the hardcoding title: newInput.title ?? result.title, }; @@ -427,20 +431,24 @@ const FilterGroupComponent = (props: PropsWithChildren) => { } return result; }, - [initialControlsObj] + [defaultControlsObj] ); const addControlsHandler = useCallback(() => { controlGroup?.openAddDataControlFlyout({ - controlInputTransform: newControlInputTranform, + controlInputTransform: newControlInputTransform, }); - }, [controlGroup, newControlInputTranform]); + }, [controlGroup, newControlInputTransform]); + + if (!spaceId) { + return ; + } return ( ) => { discardChangesHandler, }} > - +
- {Array.isArray(initialUrlParam) ? ( + {Array.isArray(controlsFromUrl) ? ( ) => { onClick={addControlsHandler} isDisabled={ controlGroupInputUpdates && - Object.values(controlGroupInputUpdates.panels).length >= NUM_OF_CONTROLS.MAX + Object.values(controlGroupInputUpdates.panels).length >= maxControls } /> @@ -496,14 +504,7 @@ const FilterGroupComponent = (props: PropsWithChildren) => { /> ) : null} - +
); }; - -// FilterGroupNeeds spaceId to be invariant because it is being used in localstorage -// Hence we will render component only when spaceId has a value. -export const FilterGroup = withSpaceId( - FilterGroupComponent, - -); diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/filter_group_context.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group_context.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/common/components/filter_group/filter_group_context.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group_context.tsx index af4ef2dc1bc6d..b3c18c6f9faca 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/filter_group_context.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group_context.tsx @@ -1,16 +1,17 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { ControlGroupContainer, ControlGroupInput } from '@kbn/controls-plugin/public'; import { createContext } from 'react'; -import type { FilterItemObj } from './types'; +import type { FilterControlConfig } from './types'; export interface FilterGroupContextType { - initialControls: FilterItemObj[]; + initialControls: FilterControlConfig[]; dataViewId: string; controlGroup: ControlGroupContainer | undefined; controlGroupInputUpdates: ControlGroupInput | undefined; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/filters_changed_banner.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filters_changed_banner.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/common/components/filter_group/filters_changed_banner.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/filters_changed_banner.tsx index 98aeacf105347..3e8394a7bc5e4 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/filters_changed_banner.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/filters_changed_banner.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { EuiButton, EuiButtonEmpty, EuiCallOut, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_control_group_sync_to_local_storage.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_control_group_sync_to_local_storage.ts similarity index 80% rename from x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_control_group_sync_to_local_storage.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_control_group_sync_to_local_storage.ts index 2462bf75a68bc..d01044ed87f58 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_control_group_sync_to_local_storage.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_control_group_sync_to_local_storage.ts @@ -1,16 +1,18 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { ControlGroupInput } from '@kbn/controls-plugin/common'; -import { Storage } from '@kbn/kibana-utils-plugin/public'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; import { useEffect, useRef, useState } from 'react'; import type { Dispatch, SetStateAction } from 'react'; interface UseControlGroupSyncToLocalStorageArgs { + Storage: typeof Storage; storageKey: string; shouldSync: boolean; } @@ -22,10 +24,11 @@ type UseControlGroupSyncToLocalStorage = (args: UseControlGroupSyncToLocalStorag }; export const useControlGroupSyncToLocalStorage: UseControlGroupSyncToLocalStorage = ({ + Storage, storageKey, shouldSync, }) => { - const storage = useRef(new Storage(localStorage)); + const storage = useRef(new Storage(localStorage)); const [controlGroupInput, setControlGroupInput] = useState( () => (storage.current.get(storageKey) as ControlGroupInput) ?? undefined diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters.ts similarity index 73% rename from x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters.ts index 3816d19f77d2e..d649aef971e47 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { useContext } from 'react'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters_sync_to_local_storage.test.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters_sync_to_local_storage.test.ts similarity index 92% rename from x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters_sync_to_local_storage.test.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters_sync_to_local_storage.test.ts index 66cedc5b0ebf5..6327d82eff85b 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_filters_sync_to_local_storage.test.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_filters_sync_to_local_storage.test.ts @@ -1,13 +1,15 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { ControlGroupInput } from '@kbn/controls-plugin/common'; import { renderHook } from '@testing-library/react-hooks'; import { useControlGroupSyncToLocalStorage } from './use_control_group_sync_to_local_storage'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; const TEST_STORAGE_KEY = 'test_key'; const DEFAULT_STORED_VALUE = { @@ -38,6 +40,7 @@ describe('Filters Sync to Local Storage', () => { global.localStorage.setItem(TEST_STORAGE_KEY, JSON.stringify(DEFAULT_STORED_VALUE)); const { result, waitForNextUpdate } = renderHook(() => useControlGroupSyncToLocalStorage({ + Storage, storageKey: TEST_STORAGE_KEY, shouldSync: true, }) @@ -48,6 +51,7 @@ describe('Filters Sync to Local Storage', () => { it('should be undefined if localstorage as NO initial value', () => { const { result, waitForNextUpdate } = renderHook(() => useControlGroupSyncToLocalStorage({ + Storage, storageKey: TEST_STORAGE_KEY, shouldSync: true, }) @@ -59,6 +63,7 @@ describe('Filters Sync to Local Storage', () => { it('should be update values to local storage when sync is ON', () => { const { result, waitFor } = renderHook(() => useControlGroupSyncToLocalStorage({ + Storage, storageKey: TEST_STORAGE_KEY, shouldSync: true, }) @@ -78,6 +83,7 @@ describe('Filters Sync to Local Storage', () => { it('should not update values to local storage when sync is OFF', () => { const { waitFor, result, rerender } = renderHook(() => useControlGroupSyncToLocalStorage({ + Storage, storageKey: TEST_STORAGE_KEY, shouldSync: true, }) diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_view_edit_mode.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_view_edit_mode.ts similarity index 88% rename from x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_view_edit_mode.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_view_edit_mode.ts index 52464a04ff465..5cd2ef416423d 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/hooks/use_view_edit_mode.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/hooks/use_view_edit_mode.ts @@ -1,12 +1,13 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { ControlGroupContainer } from '@kbn/controls-plugin/public'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { ViewMode } from '@kbn/embeddable-plugin/common'; import { useCallback, useEffect, useState } from 'react'; interface UseViewEditModeArgs { diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/index.scss b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/index.scss similarity index 100% rename from x-pack/plugins/security_solution/public/common/components/filter_group/index.scss rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/index.scss diff --git a/packages/kbn-alerts-ui-shared/src/alert_filter_controls/index.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/index.ts new file mode 100644 index 0000000000000..8a685315d8c31 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './alert_filter_controls'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/loading.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/loading.tsx similarity index 72% rename from x-pack/plugins/security_solution/public/common/components/filter_group/loading.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/loading.tsx index 22aed76d991c2..cea0ac2bafccc 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/loading.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/loading.tsx @@ -1,13 +1,14 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { EuiButton, EuiLoadingChart } from '@elastic/eui'; -import styled from 'styled-components'; +import styled from '@emotion/styled'; import { TEST_IDS } from './constants'; const FilterGroupLoadingButton = styled(EuiButton)` diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group.ts similarity index 83% rename from x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group.ts index 77dab4a745cb9..29cb203e3a056 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { ControlGroupOutput, ControlGroupInput } from '@kbn/controls-plugin/public'; diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group_renderer.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group_renderer.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group_renderer.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group_renderer.tsx index d0f7ce5b6e18b..a5a57361c99ff 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/control_group_renderer.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/control_group_renderer.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/data.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/data.ts similarity index 78% rename from x-pack/plugins/security_solution/public/common/components/filter_group/mocks/data.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/data.ts index 75c7aee0fe0e9..4c8de44915f8c 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/data.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/data.ts @@ -1,14 +1,17 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { ALERT_DURATION, ALERT_RULE_NAME, ALERT_START, ALERT_STATUS } from '@kbn/rule-data-utils'; + export const sampleOutputData = { loading: false, rendered: true, - dataViewIds: ['security-solution-default'], + dataViewIds: ['alert-filters-test-dv'], embeddableLoaded: { '0': true, '1': true, @@ -19,7 +22,7 @@ export const sampleOutputData = { filters: [ { meta: { - index: 'security-solution-default', + index: 'alert-filters-test-dv', key: 'kibana.alert.building_block_type', negate: true, }, @@ -43,8 +46,8 @@ export const initialInputData = { width: 'small', explicitInput: { id: '0', - dataViewId: 'security-solution-default', - fieldName: 'kibana.alert.workflow_status', + dataViewId: 'alert-filters-test-dv', + fieldName: ALERT_STATUS, title: 'Status', hideExclude: true, hideSort: true, @@ -62,9 +65,9 @@ export const initialInputData = { width: 'small', explicitInput: { id: '1', - dataViewId: 'security-solution-default', - fieldName: 'kibana.alert.severity', - title: 'Severity', + dataViewId: 'alert-filters-test-dv', + fieldName: ALERT_RULE_NAME, + title: 'Rule', hideExclude: true, hideSort: true, hidePanelTitles: true, @@ -81,9 +84,9 @@ export const initialInputData = { width: 'small', explicitInput: { id: '2', - dataViewId: 'security-solution-default', - fieldName: 'kibana.alert.building_block_type', - title: 'Bulding Block', + dataViewId: 'alert-filters-test-dv', + fieldName: ALERT_START, + title: 'Started at', hideExclude: true, hideSort: true, hidePanelTitles: true, @@ -100,9 +103,9 @@ export const initialInputData = { width: 'small', explicitInput: { id: '3', - dataViewId: 'security-solution-default', - fieldName: 'user.name', - title: 'User', + dataViewId: 'alert-filters-test-dv', + fieldName: ALERT_DURATION, + title: 'Duration', hideExclude: true, hideSort: true, hidePanelTitles: true, @@ -119,7 +122,7 @@ export const initialInputData = { width: 'small', explicitInput: { id: '4', - dataViewId: 'security-solution-default', + dataViewId: 'alert-filters-test-dv', fieldName: 'host.name', title: 'Host', hideExclude: true, diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/index.tsx b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/index.tsx similarity index 65% rename from x-pack/plugins/security_solution/public/common/components/filter_group/mocks/index.tsx rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/index.tsx index d31285ccb3761..0bcf02a7e9b3a 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/mocks/index.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/mocks/index.tsx @@ -1,21 +1,22 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { ControlGroupContainer } from '@kbn/controls-plugin/public'; import type { Filter } from '@kbn/es-query'; import type { FC } from 'react'; import React, { useEffect } from 'react'; +import { AlertFilterControlsProps, AlertFilterControls } from '../alert_filter_controls'; import { TEST_IDS } from '../constants'; -import type { FilterGroupProps } from '../types'; import { getControlGroupMock } from './control_group'; /** * - * Retrieves a simple of FilterGroup Item. + * Retrieves a sample AlertFilterControls Item. * - Can also call callback onFilterChange with custom args * * @example @@ -24,7 +25,7 @@ import { getControlGroupMock } from './control_group'; * *const TestComponent = () => ( * - * { * it('basic test', () => { - * (FilterGroup as jest.Mock).mockImplementationOnce( - * getMockedFilterGroupWithCustomFilters([ + * (AlertFilterControls as jest.Mock).mockImplementationOnce( + * mockAlertFilterControls([ * { * meta: { * params: ['open'], @@ -61,20 +62,20 @@ import { getControlGroupMock } from './control_group'; *}); * */ -export function getMockedFilterGroupWithCustomFilters(outputFilters?: Filter[]) { - const FilterGroup: FC = ({ onInit, onFilterChange }) => { +export const mockAlertFilterControls = (outputFilters?: Filter[]) => { + const Component: FC = ({ onInit, onFiltersChange }) => { useEffect(() => { if (onInit) { onInit(getControlGroupMock() as unknown as ControlGroupContainer); } - if (onFilterChange) { - onFilterChange(outputFilters ?? []); + if (onFiltersChange) { + onFiltersChange(outputFilters ?? []); } - }, [onInit, onFilterChange]); + }, [onInit, onFiltersChange]); return
+ } + display="plain" + hasBorder + icon={} + isDisabled={!securityAIAssistantEnabled} + layout="horizontal" + title={i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSelectionPage.securityLabel', + { defaultMessage: 'Elastic AI Assistant for Security' } + )} + titleSize="xs" + onClick={() => + navigateToApp('management', { path: 'kibana/securityAiAssistantManagement' }) + } + /> + ); diff --git a/src/plugins/console/public/application/components/console_menu.tsx b/src/plugins/console/public/application/components/console_menu.tsx index b22fd7db9baab..6fe755dcef2be 100644 --- a/src/plugins/console/public/application/components/console_menu.tsx +++ b/src/plugins/console/public/application/components/console_menu.tsx @@ -121,7 +121,7 @@ export class ConsoleMenu extends Component { defaultMessage: 'Request options', })} > - + ); @@ -135,10 +135,22 @@ export class ConsoleMenu extends Component { this.closePopover(); this.copyAsCurl(); }} + icon="copyClipboard" > + , + + , { onClick={() => { this.openDocs(); }} + icon="documentation" > - , - - , ]; diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx index 6963a0ed2b21e..8de241aee705b 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx @@ -288,14 +288,14 @@ function EditorUI({ initialTextValue, setEditorInstance }: EditorProps) { })} > - + diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx index 8cb734a87660c..a929fa4148f54 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx @@ -6,13 +6,22 @@ * Side Public License, v 1. */ -import React, { useEffect, useState } from 'react'; -import { CodeEditor } from '@kbn/code-editor'; +import React, { CSSProperties, useCallback, useEffect, useRef, useState } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiToolTip } from '@elastic/eui'; import { css } from '@emotion/react'; -import { CONSOLE_LANG_ID, CONSOLE_THEME_ID } from '@kbn/monaco'; +import { CodeEditor } from '@kbn/code-editor'; +import { CONSOLE_LANG_ID, CONSOLE_THEME_ID, monaco } from '@kbn/monaco'; +import { i18n } from '@kbn/i18n'; +import { ConsoleMenu } from '../../../components'; +import { + useServicesContext, + useEditorReadContext, + useRequestActionContext, +} from '../../../contexts'; import { useSetInitialValue } from './use_set_initial_value'; +import { MonacoEditorActionsProvider } from './monaco_editor_actions_provider'; +import { useSetupAutocompletePolling } from './use_setup_autocomplete_polling'; import { useSetupAutosave } from './use_setup_autosave'; -import { useServicesContext, useEditorReadContext } from '../../../contexts'; export interface EditorProps { initialTextValue: string; @@ -21,10 +30,32 @@ export interface EditorProps { export const MonacoEditor = ({ initialTextValue }: EditorProps) => { const { services: { - notifications: { toasts }, + notifications, + esHostService, + trackUiMetric, + http, + settings: settingsService, + autocompleteInfo, }, } = useServicesContext(); + const { toasts } = notifications; const { settings } = useEditorReadContext(); + const dispatch = useRequestActionContext(); + const actionsProvider = useRef(null); + const [editorActionsCss, setEditorActionsCss] = useState({}); + + const editorDidMountCallback = useCallback((editor: monaco.editor.IStandaloneCodeEditor) => { + actionsProvider.current = new MonacoEditorActionsProvider(editor, setEditorActionsCss); + }, []); + + const getCurlCallback = useCallback(async (): Promise => { + const curl = await actionsProvider.current?.getCurl(esHostService.getHost()); + return curl ?? ''; + }, [esHostService]); + + const sendRequestsCallback = useCallback(async () => { + await actionsProvider.current?.sendRequests(toasts, dispatch, trackUiMetric, http); + }, [dispatch, http, toasts, trackUiMetric]); const [value, setValue] = useState(initialTextValue); @@ -34,6 +65,8 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => { setInitialValue({ initialTextValue, setValue, toasts }); }, [initialTextValue, setInitialValue, toasts]); + useSetupAutocompletePolling({ autocompleteInfo, settingsService }); + useSetupAutosave({ value }); return ( @@ -42,6 +75,42 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => { width: 100%; `} > + + + + + + + + + + { + return Promise.resolve(null); + }} + autoIndent={() => {}} + notifications={notifications} + /> + + { wordWrap: settings.wrapMode === true ? 'on' : 'off', theme: CONSOLE_THEME_ID, }} + editorDidMount={editorDidMountCallback} /> ); diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts new file mode 100644 index 0000000000000..ee2be44ec812e --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.test.ts @@ -0,0 +1,104 @@ +/* + * Copyright 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. + */ + +/* + * Mock kbn/monaco to provide the console parser code directly without a web worker + */ +const mockGetParsedRequests = jest.fn(); +jest.mock('@kbn/monaco', () => { + const original = jest.requireActual('@kbn/monaco'); + return { + ...original, + getParsedRequestsProvider: () => { + return { + getRequests: mockGetParsedRequests, + }; + }, + }; +}); + +jest.mock('../../../../services', () => { + return { + getStorage: () => ({ + get: () => [], + }), + StorageKeys: { + VARIABLES: 'test', + }, + }; +}); + +import { MonacoEditorActionsProvider } from './monaco_editor_actions_provider'; +import { monaco } from '@kbn/monaco'; + +describe('Editor actions provider', () => { + let editorActionsProvider: MonacoEditorActionsProvider; + let editor: jest.Mocked; + beforeEach(() => { + editor = { + getModel: jest.fn(), + createDecorationsCollection: () => ({ + clear: jest.fn(), + set: jest.fn(), + }), + focus: jest.fn(), + onDidChangeCursorPosition: jest.fn(), + onDidScrollChange: jest.fn(), + onDidChangeCursorSelection: jest.fn(), + onDidContentSizeChange: jest.fn(), + getSelection: jest.fn(), + getTopForLineNumber: jest.fn(), + getScrollTop: jest.fn(), + } as unknown as jest.Mocked; + + editor.getModel.mockReturnValue({ + getLineMaxColumn: () => 10, + getPositionAt: () => ({ lineNumber: 1 }), + getLineContent: () => 'GET _search', + } as unknown as monaco.editor.ITextModel); + editor.getSelection.mockReturnValue({ + startLineNumber: 1, + endLineNumber: 1, + } as unknown as monaco.Selection); + mockGetParsedRequests.mockResolvedValue([ + { + startOffset: 0, + endOffset: 11, + method: 'GET', + url: '_search', + }, + ]); + + const setEditorActionsCssMock = jest.fn(); + + editorActionsProvider = new MonacoEditorActionsProvider(editor, setEditorActionsCssMock); + }); + + describe('getCurl', () => { + it('returns an empty string if no requests', async () => { + mockGetParsedRequests.mockResolvedValue([]); + const curl = await editorActionsProvider.getCurl('http://localhost'); + expect(curl).toBe(''); + }); + + it('returns an empty string if there is a request but not in the selection range', async () => { + editor.getSelection.mockReturnValue({ + // the request is on line 1, the user selected line 2 + startLineNumber: 2, + endLineNumber: 2, + } as unknown as monaco.Selection); + const curl = await editorActionsProvider.getCurl('http://localhost'); + expect(curl).toBe(''); + }); + + it('returns the correct string if there is a request in the selection range', async () => { + const curl = await editorActionsProvider.getCurl('http://localhost'); + expect(curl).toBe('curl -XGET "http://localhost/_search" -H "kbn-xsrf: reporting"'); + }); + }); +}); diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts new file mode 100644 index 0000000000000..af87f7fb68d24 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts @@ -0,0 +1,238 @@ +/* + * Copyright 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 { CSSProperties, Dispatch } from 'react'; +import { debounce } from 'lodash'; +import { + ConsoleParsedRequestsProvider, + getParsedRequestsProvider, + monaco, + ParsedRequest, +} from '@kbn/monaco'; +import { IToasts } from '@kbn/core-notifications-browser'; +import { i18n } from '@kbn/i18n'; +import type { HttpSetup } from '@kbn/core-http-browser'; +import { DEFAULT_VARIABLES } from '../../../../../common/constants'; +import { getStorage, StorageKeys } from '../../../../services'; +import { sendRequest } from '../../../hooks/use_send_current_request/send_request'; +import { MetricsTracker } from '../../../../types'; +import { Actions } from '../../../stores/request'; +import { + stringifyRequest, + replaceRequestVariables, + getCurlRequest, + trackSentRequests, +} from './utils'; + +const selectedRequestsClass = 'console__monaco_editor__selectedRequests'; + +export interface EditorRequest { + method: string; + url: string; + data: string[]; +} + +export class MonacoEditorActionsProvider { + private parsedRequestsProvider: ConsoleParsedRequestsProvider; + private highlightedLines: monaco.editor.IEditorDecorationsCollection; + constructor( + private editor: monaco.editor.IStandaloneCodeEditor, + private setEditorActionsCss: (css: CSSProperties) => void + ) { + this.parsedRequestsProvider = getParsedRequestsProvider(this.editor.getModel()); + this.highlightedLines = this.editor.createDecorationsCollection(); + this.editor.focus(); + + const debouncedHighlightRequests = debounce(() => this.highlightRequests(), 200, { + leading: true, + }); + debouncedHighlightRequests(); + + // init all listeners + editor.onDidChangeCursorPosition(async (event) => { + await debouncedHighlightRequests(); + }); + editor.onDidScrollChange(async (event) => { + await debouncedHighlightRequests(); + }); + editor.onDidChangeCursorSelection(async (event) => { + await debouncedHighlightRequests(); + }); + editor.onDidContentSizeChange(async (event) => { + await debouncedHighlightRequests(); + }); + } + + private updateEditorActions(lineNumber?: number) { + // if no request is currently selected, hide the actions buttons + if (!lineNumber) { + this.setEditorActionsCss({ + visibility: 'hidden', + }); + } else { + // if a request is selected, the actions buttons are placed at lineNumberOffset - scrollOffset + const offset = this.editor.getTopForLineNumber(lineNumber) - this.editor.getScrollTop(); + this.setEditorActionsCss({ + visibility: 'visible', + top: offset, + }); + } + } + + private async highlightRequests(): Promise { + // get the requests in the selected range + const { range: selectedRange, parsedRequests } = await this.getSelectedParsedRequestsAndRange(); + // if any requests are selected, highlight the lines and update the position of actions buttons + if (parsedRequests.length > 0) { + const selectedRequestStartLine = selectedRange.startLineNumber; + // display the actions buttons on the 1st line of the 1st selected request + this.updateEditorActions(selectedRequestStartLine); + this.highlightedLines.set([ + { + range: selectedRange, + options: { + isWholeLine: true, + className: selectedRequestsClass, + }, + }, + ]); + } else { + // if no requests are selected, hide actions buttons and remove highlighted lines + this.updateEditorActions(); + this.highlightedLines.clear(); + } + } + + private async getSelectedParsedRequestsAndRange(): Promise<{ + parsedRequests: ParsedRequest[]; + range: monaco.IRange; + }> { + const model = this.editor.getModel(); + const selection = this.editor.getSelection(); + if (!model || !selection) { + return Promise.resolve({ + parsedRequests: [], + range: selection ?? new monaco.Range(1, 1, 1, 1), + }); + } + const { startLineNumber, endLineNumber } = selection; + const parsedRequests = await this.parsedRequestsProvider.getRequests(); + const selectedRequests = []; + let selectionStartLine = startLineNumber; + let selectionEndLine = endLineNumber; + for (const parsedRequest of parsedRequests) { + const { startOffset: requestStart, endOffset: requestEnd } = parsedRequest; + const { lineNumber: requestStartLine } = model.getPositionAt(requestStart); + let { lineNumber: requestEndLine } = model.getPositionAt(requestEnd); + const requestEndLineContent = model.getLineContent(requestEndLine); + + // sometimes the parser includes a trailing empty line into the request + if (requestEndLineContent.trim().length < 1) { + requestEndLine = requestEndLine - 1; + } + if (requestStartLine > endLineNumber) { + // request is past the selection, no need to check further requests + break; + } + if (requestEndLine < startLineNumber) { + // request is before the selection, do nothing + } else { + // request is selected + selectedRequests.push(parsedRequest); + // expand the start of the selection to the request start + if (selectionStartLine > requestStartLine) { + selectionStartLine = requestStartLine; + } + // expand the end of the selection to the request end + if (selectionEndLine < requestEndLine) { + selectionEndLine = requestEndLine; + } + } + } + return { + parsedRequests: selectedRequests, + // the expanded selected range goes from the 1st char of the start line of the 1st request + // to the last char of the last line of the last request + range: new monaco.Range( + selectionStartLine, + 1, + selectionEndLine, + model.getLineMaxColumn(selectionEndLine) + ), + }; + } + + private async getRequests() { + const { parsedRequests } = await this.getSelectedParsedRequestsAndRange(); + const stringifiedRequests = parsedRequests.map((parsedRequest) => + stringifyRequest(parsedRequest) + ); + // get variables values + const variables = getStorage().get(StorageKeys.VARIABLES, DEFAULT_VARIABLES); + return stringifiedRequests.map((request) => replaceRequestVariables(request, variables)); + } + + public async getCurl(elasticsearchBaseUrl: string): Promise { + const requests = await this.getRequests(); + const curlRequests = requests.map((request) => getCurlRequest(request, elasticsearchBaseUrl)); + return curlRequests.join('\n'); + } + + public async sendRequests( + toasts: IToasts, + dispatch: Dispatch, + trackUiMetric: MetricsTracker, + http: HttpSetup + ): Promise { + try { + const requests = await this.getRequests(); + if (!requests.length) { + toasts.add( + i18n.translate('console.notification.error.noRequestSelectedTitle', { + defaultMessage: + 'No request selected. Select a request by placing the cursor inside it.', + }) + ); + return; + } + + dispatch({ type: 'sendRequest', payload: undefined }); + + // track the requests + setTimeout(() => trackSentRequests(requests, trackUiMetric), 0); + + const results = await sendRequest({ http, requests }); + + // TODO save to history + // TODO restart autocomplete polling + dispatch({ + type: 'requestSuccess', + payload: { + data: results, + }, + }); + } catch (e) { + if (e?.response) { + dispatch({ + type: 'requestFail', + payload: e, + }); + } else { + dispatch({ + type: 'requestFail', + payload: undefined, + }); + toasts.addError(e, { + title: i18n.translate('console.notification.error.unknownErrorTitle', { + defaultMessage: 'Unknown Request Error', + }), + }); + } + } + } +} diff --git a/src/plugins/console/public/application/containers/editor/monaco/use_setup_autocomplete_polling.ts b/src/plugins/console/public/application/containers/editor/monaco/use_setup_autocomplete_polling.ts new file mode 100644 index 0000000000000..c1bf0640ba8db --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/use_setup_autocomplete_polling.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { useEffect } from 'react'; +import { AutocompleteInfo, Settings } from '../../../../services'; + +interface SetupAutocompletePollingParams { + /** The Console autocomplete service. */ + autocompleteInfo: AutocompleteInfo; + /** The Console settings service. */ + settingsService: Settings; +} + +/** + * Hook that sets up the autocomplete polling for Console editor. + * + * @param params The {@link SetupAutocompletePollingParams} to use. + */ +export const useSetupAutocompletePolling = (params: SetupAutocompletePollingParams) => { + const { autocompleteInfo, settingsService } = params; + + useEffect(() => { + autocompleteInfo.retrieve(settingsService, settingsService.getAutocomplete()); + + return () => { + autocompleteInfo.clearSubscriptions(); + }; + }, [autocompleteInfo, settingsService]); +}; diff --git a/src/plugins/console/public/application/containers/editor/monaco/utils.test.ts b/src/plugins/console/public/application/containers/editor/monaco/utils.test.ts new file mode 100644 index 0000000000000..e2aa1543d8b6f --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/utils.test.ts @@ -0,0 +1,182 @@ +/* + * Copyright 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 { + getCurlRequest, + removeTrailingWhitespaces, + replaceRequestVariables, + stringifyRequest, + trackSentRequests, +} from './utils'; +import { MetricsTracker } from '../../../../types'; + +describe('monaco editor utils', () => { + const dataObjects = [ + { + query: { + match_all: {}, + }, + }, + { + test: 'test', + }, + ]; + describe('removeTrailingWhitespaces', () => { + it(`works with an empty string`, () => { + const url = ''; + const result = removeTrailingWhitespaces(url); + expect(result).toBe(url); + }); + it(`doesn't change the string if no trailing whitespaces`, () => { + const url = '_search'; + const result = removeTrailingWhitespaces(url); + expect(result).toBe(url); + }); + it(`removes any text after the first whitespace`, () => { + const url = '_search some_text'; + const result = removeTrailingWhitespaces(url); + expect(result).toBe('_search'); + }); + }); + + describe('stringifyRequest', () => { + const request = { + startOffset: 0, + endOffset: 11, + method: 'get', + url: '_search some_text', + }; + it('calls the "removeTrailingWhitespaces" on the url', () => { + const stringifiedRequest = stringifyRequest(request); + expect(stringifiedRequest.url).toBe('_search'); + }); + + it('normalizes the method to upper case', () => { + const stringifiedRequest = stringifyRequest(request); + expect(stringifiedRequest.method).toBe('GET'); + }); + it('stringifies the request body', () => { + const result = stringifyRequest({ ...request, data: [dataObjects[0]] }); + expect(result.data.length).toBe(1); + expect(result.data[0]).toBe(JSON.stringify(dataObjects[0], null, 2)); + }); + + it('works for several request bodies', () => { + const result = stringifyRequest({ ...request, data: dataObjects }); + expect(result.data.length).toBe(2); + expect(result.data[0]).toBe(JSON.stringify(dataObjects[0], null, 2)); + expect(result.data[1]).toBe(JSON.stringify(dataObjects[1], null, 2)); + }); + }); + + describe('replaceRequestVariables', () => { + const variables = [ + { id: '1', name: 'variable1', value: 'test1' }, + { + id: '2', + name: 'variable2', + value: 'test2', + }, + ]; + + describe('replaces variables in the url', () => { + const request = { + method: 'GET', + url: '${variable1}', + data: [], + }; + it('when there is no other text', () => { + const result = replaceRequestVariables(request, variables); + expect(result.url).toBe('test1'); + }); + it('inside a string', () => { + const result = replaceRequestVariables( + { ...request, url: 'test_${variable1}_test' }, + variables + ); + expect(result.url).toBe('test_test1_test'); + }); + it('works with several variables', () => { + const result = replaceRequestVariables( + { ...request, url: '${variable1}_${variable2}' }, + variables + ); + expect(result.url).toBe('test1_test2'); + }); + }); + + describe('replaces variables in the request body', () => { + const request = { + method: 'GET', + url: '${variable1}', + data: [JSON.stringify({ '${variable1}': '${variable2}' }, null, 2)], + }; + it('works with several variables', () => { + const result = replaceRequestVariables(request, variables); + expect(result.data[0]).toBe(JSON.stringify({ test1: 'test2' }, null, 2)); + }); + }); + }); + + describe('getCurlRequest', () => { + it('works without a request body', () => { + const request = { method: 'GET', url: '_search', data: [] }; + const result = getCurlRequest(request, 'http://test.com'); + expect(result).toBe('curl -XGET "http://test.com/_search" -H "kbn-xsrf: reporting"'); + }); + it('works with a request body', () => { + const request = { + method: 'GET', + url: '_search', + data: [JSON.stringify(dataObjects[0], null, 2)], + }; + const result = getCurlRequest(request, 'http://test.com'); + expect(result).toBe( + 'curl -XGET "http://test.com/_search" -H "kbn-xsrf: reporting" -H "Content-Type: application/json" -d\'\n' + + '{\n' + + ' "query": {\n' + + ' "match_all": {}\n' + + ' }\n' + + "}'" + ); + }); + it('works with several request bodies', () => { + const request = { + method: 'GET', + url: '_search', + data: [JSON.stringify(dataObjects[0], null, 2), JSON.stringify(dataObjects[1], null, 2)], + }; + const result = getCurlRequest(request, 'http://test.com'); + expect(result).toBe( + 'curl -XGET "http://test.com/_search" -H "kbn-xsrf: reporting" -H "Content-Type: application/json" -d\'\n' + + '{\n' + + ' "query": {\n' + + ' "match_all": {}\n' + + ' }\n' + + '}\n' + + '{\n' + + ' "test": "test"\n' + + "}'" + ); + }); + }); + + describe('trackSentRequests', () => { + it('tracks each request correctly', () => { + const requests = [ + { method: 'GET', url: '_search', data: [] }, + { method: 'POST', url: '_test', data: [] }, + ]; + const mockMetricsTracker: jest.Mocked = { count: jest.fn(), load: jest.fn() }; + trackSentRequests(requests, mockMetricsTracker); + expect(mockMetricsTracker.count).toHaveBeenCalledTimes(2); + expect(mockMetricsTracker.count).toHaveBeenNthCalledWith(1, 'GET__search'); + expect(mockMetricsTracker.count).toHaveBeenNthCalledWith(2, 'POST__test'); + }); + }); +}); diff --git a/src/plugins/console/public/application/containers/editor/monaco/utils.ts b/src/plugins/console/public/application/containers/editor/monaco/utils.ts new file mode 100644 index 0000000000000..f5725ad271fc6 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/utils.ts @@ -0,0 +1,76 @@ +/* + * Copyright 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 { ParsedRequest } from '@kbn/monaco'; +import { constructUrl } from '../../../../lib/es'; +import type { DevToolsVariable } from '../../../components'; +import { EditorRequest } from './monaco_editor_actions_provider'; +import { MetricsTracker } from '../../../../types'; + +const whitespacesRegex = /\s/; +export const removeTrailingWhitespaces = (url: string): string => { + /* + * This helper removes any trailing inline comments, for example + * "_search // comment" -> "_search" + * Ideally the parser removes those comments initially + */ + return url.trim().split(whitespacesRegex)[0]; +}; + +export const stringifyRequest = (parsedRequest: ParsedRequest): EditorRequest => { + const url = removeTrailingWhitespaces(parsedRequest.url); + const method = parsedRequest.method.toUpperCase(); + const data = parsedRequest.data?.map((parsedData) => JSON.stringify(parsedData, null, 2)); + return { url, method, data: data ?? [] }; +}; + +const variableTemplateRegex = /\${(\w+)}/g; +const replaceVariables = (text: string, variables: DevToolsVariable[]): string => { + if (variableTemplateRegex.test(text)) { + text = text.replaceAll(variableTemplateRegex, (match, key) => { + const variable = variables.find(({ name }) => name === key); + + return variable?.value ?? match; + }); + } + return text; +}; +export const replaceRequestVariables = ( + { method, url, data }: EditorRequest, + variables: DevToolsVariable[] +): EditorRequest => { + return { + method, + url: replaceVariables(url, variables), + data: data.map((dataObject) => replaceVariables(dataObject, variables)), + }; +}; + +export const getCurlRequest = ( + { method, url, data }: EditorRequest, + elasticsearchBaseUrl: string +): string => { + const curlUrl = constructUrl(elasticsearchBaseUrl, url); + let curlRequest = `curl -X${method} "${curlUrl}" -H "kbn-xsrf: reporting"`; + if (data.length > 0) { + curlRequest += ` -H "Content-Type: application/json" -d'\n`; + curlRequest += data.join('\n'); + curlRequest += "'"; + } + return curlRequest; +}; + +export const trackSentRequests = ( + requests: EditorRequest[], + trackUiMetric: MetricsTracker +): void => { + requests.map(({ method, url }) => { + const eventName = `${method}_${url}`; + trackUiMetric.count(eventName); + }); +}; diff --git a/src/plugins/console/public/styles/_app.scss b/src/plugins/console/public/styles/_app.scss index 2f4340f1de0ab..37f2753b1a99b 100644 --- a/src/plugins/console/public/styles/_app.scss +++ b/src/plugins/console/public/styles/_app.scss @@ -125,3 +125,10 @@ .conApp__tabsExtension { border-bottom: $euiBorderThin; } + +/* + * The highlighting for the selected requests in the monaco editor + */ +.console__monaco_editor__selectedRequests { + background: transparentize($euiColorLightShade, .3); +} diff --git a/src/plugins/controls/public/control_group/editor/control_editor.tsx b/src/plugins/controls/public/control_group/editor/control_editor.tsx index bdc09a393b0f9..5f39f3c6a16ec 100644 --- a/src/plugins/controls/public/control_group/editor/control_editor.tsx +++ b/src/plugins/controls/public/control_group/editor/control_editor.tsx @@ -129,7 +129,10 @@ export const ControlEditor = ({ if (!mounted) return; const initialId = - embeddable?.getInput().dataViewId ?? getRelevantDataViewId?.() ?? (await getDefaultId()); + embeddable?.getInput().dataViewId ?? + controlGroup.getOutput().dataViewIds?.[0] ?? + getRelevantDataViewId?.() ?? + (await getDefaultId()); if (initialId) { setSelectedDataViewId(initialId); startingInput.current = { ...startingInput.current, dataViewId: initialId }; @@ -274,11 +277,11 @@ export const ControlEditor = ({ { - setLastUsedDataViewId?.(dataViewId); - if (dataViewId === selectedDataViewId) return; + onChangeDataViewId={(newDataViewId) => { + setLastUsedDataViewId?.(newDataViewId); + if (newDataViewId === selectedDataViewId) return; setSelectedField(undefined); - setSelectedDataViewId(dataViewId); + setSelectedDataViewId(newDataViewId); }} trigger={{ label: diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx index 24a383244dc8c..fd832d5da55b8 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx @@ -59,6 +59,7 @@ export function ShowShareModal({ }, }, }, + notifications, share: { toggleShareContextMenu }, } = pluginServices.getServices(); @@ -197,5 +198,6 @@ export function ShowShareModal({ snapshotShareWarning: Boolean(unsavedDashboardState?.panels) ? shareModalStrings.getSnapshotShareWarning() : undefined, + toasts: notifications.toasts, }); } diff --git a/src/plugins/data_views/common/data_views/data_views.test.ts b/src/plugins/data_views/common/data_views/data_views.test.ts index 5a2357f4a7891..71244c6ec5475 100644 --- a/src/plugins/data_views/common/data_views/data_views.test.ts +++ b/src/plugins/data_views/common/data_views/data_views.test.ts @@ -201,7 +201,7 @@ describe('IndexPatterns', () => { expect(apiClient.getFieldsForWildcard).toBeCalledWith(args); }); - test('getFieldsForWildcard called with allowNoIndex set to true as default ', async () => { + test('getFieldsForWildcard called with allowNoIndex set to true as default', async () => { const id = '1'; await indexPatterns.get(id); expect(apiClient.getFieldsForWildcard).toBeCalledWith({ @@ -214,6 +214,82 @@ describe('IndexPatterns', () => { }); }); + test('getFieldsForIndexPattern called with allowHidden set to undefined as default', async () => { + await indexPatterns.getFieldsForIndexPattern({ id: '1' } as DataViewSpec, { + pattern: 'something', + }); + expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: undefined, + allowNoIndex: true, + metaFields: false, + pattern: undefined, + rollupIndex: undefined, + type: undefined, + }); + }); + + test('getFieldsForIndexPattern called with allowHidden set to true', async () => { + await indexPatterns.getFieldsForIndexPattern({ id: '1', allowHidden: true } as DataViewSpec, { + pattern: 'something', + }); + expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: true, + allowNoIndex: true, + metaFields: false, + pattern: undefined, + rollupIndex: undefined, + type: undefined, + }); + }); + + test('getFieldsForIndexPattern called with allowHidden set to false', async () => { + await indexPatterns.getFieldsForIndexPattern({ id: '1', allowHidden: false } as DataViewSpec, { + pattern: 'something', + }); + expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: false, + allowNoIndex: true, + metaFields: false, + pattern: undefined, + rollupIndex: undefined, + type: undefined, + }); + }); + + test('getFieldsForIndexPattern called with getAllowHidden returning true', async () => { + await indexPatterns.getFieldsForIndexPattern( + { id: '1', getAllowHidden: () => true } as DataView, + { + pattern: 'something', + } + ); + expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: true, + allowNoIndex: true, + metaFields: false, + pattern: undefined, + rollupIndex: undefined, + type: undefined, + }); + }); + + test('getFieldsForIndexPattern called with getAllowHidden returning false', async () => { + await indexPatterns.getFieldsForIndexPattern( + { id: '1', getAllowHidden: () => false } as DataView, + { + pattern: 'something', + } + ); + expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: false, + allowNoIndex: true, + metaFields: false, + pattern: undefined, + rollupIndex: undefined, + type: undefined, + }); + }); + test('does cache ad-hoc data views', async () => { const id = '1'; 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 43508a6db9cae..adce2a0079945 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -572,7 +572,9 @@ export class DataViewsService { ...options, pattern: indexPattern.title as string, allowHidden: - (indexPattern as DataViewSpec).allowHidden || (indexPattern as DataView)?.getAllowHidden(), + (indexPattern as DataViewSpec).allowHidden == null + ? (indexPattern as DataView)?.getAllowHidden?.() + : (indexPattern as DataViewSpec).allowHidden, }); private getFieldsAndIndicesForDataView = async ( diff --git a/src/plugins/data_views/server/data_views_service_factory.ts b/src/plugins/data_views/server/data_views_service_factory.ts index 430ebd36489b6..655453c2d9d88 100644 --- a/src/plugins/data_views/server/data_views_service_factory.ts +++ b/src/plugins/data_views/server/data_views_service_factory.ts @@ -50,6 +50,7 @@ export const dataViewsServiceFactory = (deps: DataViewsServiceFactoryDeps) => apiClient: new IndexPatternsApiServer( elasticsearchClient, savedObjectsClient, + uiSettingsClient, rollupsEnabled ), fieldFormats: formats, diff --git a/src/plugins/data_views/server/fetcher/index_patterns_fetcher.test.ts b/src/plugins/data_views/server/fetcher/index_patterns_fetcher.test.ts index 6de3f31ff2895..1e662bdcd37f9 100644 --- a/src/plugins/data_views/server/fetcher/index_patterns_fetcher.test.ts +++ b/src/plugins/data_views/server/fetcher/index_patterns_fetcher.test.ts @@ -8,7 +8,8 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IndexPatternsFetcher } from '.'; -import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import { elasticsearchServiceMock, uiSettingsServiceMock } from '@kbn/core/server/mocks'; +import { SavedObjectsClientContract } from '@kbn/core/server'; import { DataViewMissingIndices, DataViewType } from '../../common'; const rollupResponse = { @@ -27,6 +28,14 @@ const rollupResponse = { describe('Index Pattern Fetcher - server', () => { let indexPatterns: IndexPatternsFetcher; let esClient: ReturnType; + const uiSettingsClient = uiSettingsServiceMock + .createStartContract() + .asScopedToClient({} as SavedObjectsClientContract); + const optionalParams = { + uiSettingsClient, + allowNoIndices: true, + rollupsEnabled: true, + }; const response = { indices: ['b'], fields: [{ name: 'foo' }, { name: 'bar' }, { name: 'baz' }], @@ -36,10 +45,14 @@ describe('Index Pattern Fetcher - server', () => { jest.clearAllMocks(); esClient = elasticsearchServiceMock.createElasticsearchClient(); esClient.fieldCaps.mockResponse(response as unknown as estypes.FieldCapsResponse); - indexPatterns = new IndexPatternsFetcher(esClient, false, true); + indexPatterns = new IndexPatternsFetcher(esClient, { + uiSettingsClient, + allowNoIndices: false, + rollupsEnabled: true, + }); }); it('calls fieldcaps once', async () => { - indexPatterns = new IndexPatternsFetcher(esClient, true, true); + indexPatterns = new IndexPatternsFetcher(esClient, optionalParams); await indexPatterns.getFieldsForWildcard({ pattern: patternList }); expect(esClient.fieldCaps).toHaveBeenCalledTimes(1); }); @@ -48,7 +61,7 @@ describe('Index Pattern Fetcher - server', () => { esClient.rollup.getRollupIndexCaps.mockResponse( rollupResponse as unknown as estypes.RollupGetRollupIndexCapsResponse ); - indexPatterns = new IndexPatternsFetcher(esClient, true, true); + indexPatterns = new IndexPatternsFetcher(esClient, optionalParams); await indexPatterns.getFieldsForWildcard({ pattern: patternList, type: DataViewType.ROLLUP, @@ -61,7 +74,11 @@ describe('Index Pattern Fetcher - server', () => { esClient.rollup.getRollupIndexCaps.mockResponse( rollupResponse as unknown as estypes.RollupGetRollupIndexCapsResponse ); - indexPatterns = new IndexPatternsFetcher(esClient, true, false); + indexPatterns = new IndexPatternsFetcher(esClient, { + uiSettingsClient, + allowNoIndices: true, + rollupsEnabled: false, + }); await indexPatterns.getFieldsForWildcard({ pattern: patternList, type: DataViewType.ROLLUP, @@ -72,7 +89,7 @@ describe('Index Pattern Fetcher - server', () => { describe('getExistingIndices', () => { test('getExistingIndices returns the valid matched indices', async () => { - indexPatterns = new IndexPatternsFetcher(esClient, true, true); + indexPatterns = new IndexPatternsFetcher(esClient, optionalParams); indexPatterns.getFieldsForWildcard = jest .fn() .mockResolvedValueOnce({ indices: ['length'] }) @@ -83,7 +100,7 @@ describe('Index Pattern Fetcher - server', () => { }); test('getExistingIndices checks the positive pattern if provided with a negative pattern', async () => { - indexPatterns = new IndexPatternsFetcher(esClient, true, true); + indexPatterns = new IndexPatternsFetcher(esClient, optionalParams); const mockFn = jest.fn().mockResolvedValue({ indices: ['length'] }); indexPatterns.getFieldsForWildcard = mockFn; const result = await indexPatterns.getExistingIndices(['-filebeat-*', 'filebeat-*']); @@ -93,7 +110,7 @@ describe('Index Pattern Fetcher - server', () => { }); test('getExistingIndices handles an error', async () => { - indexPatterns = new IndexPatternsFetcher(esClient, true, true); + indexPatterns = new IndexPatternsFetcher(esClient, optionalParams); indexPatterns.getFieldsForWildcard = jest .fn() .mockImplementationOnce(async () => { 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 bf7ed0d9cdacc..7ce9c50977cd1 100644 --- a/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts +++ b/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts @@ -7,7 +7,7 @@ */ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { ElasticsearchClient } from '@kbn/core/server'; +import { ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; import { keyBy } from 'lodash'; import { defer, from } from 'rxjs'; import { rateLimitingForkJoin } from '../../common/data_views/utils'; @@ -41,19 +41,24 @@ interface FieldSubType { nested?: { path: string }; } +interface IndexPatternsFetcherOptionalParams { + uiSettingsClient: IUiSettingsClient; + allowNoIndices?: boolean; + rollupsEnabled?: boolean; +} + export class IndexPatternsFetcher { - private elasticsearchClient: ElasticsearchClient; - private allowNoIndices: boolean; - private rollupsEnabled: boolean; + private readonly uiSettingsClient?: IUiSettingsClient; + private readonly allowNoIndices: boolean; + private readonly rollupsEnabled: boolean; constructor( - elasticsearchClient: ElasticsearchClient, - allowNoIndices: boolean = false, - rollupsEnabled: boolean = false + private readonly elasticsearchClient: ElasticsearchClient, + optionalParams?: IndexPatternsFetcherOptionalParams ) { - this.elasticsearchClient = elasticsearchClient; - this.allowNoIndices = allowNoIndices; - this.rollupsEnabled = rollupsEnabled; + this.uiSettingsClient = optionalParams?.uiSettingsClient; + this.allowNoIndices = optionalParams?.allowNoIndices || false; + this.rollupsEnabled = optionalParams?.rollupsEnabled || false; } /** @@ -96,6 +101,7 @@ export class IndexPatternsFetcher { const fieldCapsResponse = await getFieldCapabilities({ callCluster: this.elasticsearchClient, + uiSettingsClient: this.uiSettingsClient, indices: pattern, metaFields, fieldCapsOptions: { 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 6a724191e75ce..db29047e5b0be 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,15 +9,18 @@ import { defaults, keyBy, sortBy } from 'lodash'; import { ExpandWildcard } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { ElasticsearchClient } from '@kbn/core/server'; +import { ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; import { callFieldCapsApi } from '../es_api'; import { readFieldCapsResponse } from './field_caps_response'; import { mergeOverrides } from './overrides'; import { FieldDescriptor } from '../../index_patterns_fetcher'; import { QueryDslQueryContainer } from '../../../../common/types'; +import { DATA_VIEWS_FIELDS_EXCLUDED_TIERS } from '../../../../common/constants'; +import { getIndexFilterDsl } from '../../../utils'; interface FieldCapabilitiesParams { callCluster: ElasticsearchClient; + uiSettingsClient?: IUiSettingsClient; indices: string | string[]; metaFields: string[]; fieldCapsOptions?: { allow_no_indices: boolean; include_unmapped?: boolean }; @@ -41,6 +44,7 @@ interface FieldCapabilitiesParams { export async function getFieldCapabilities(params: FieldCapabilitiesParams) { const { callCluster, + uiSettingsClient, indices = [], fieldCapsOptions, indexFilter, @@ -50,11 +54,13 @@ export async function getFieldCapabilities(params: FieldCapabilitiesParams) { fieldTypes, includeEmptyFields, } = params; + + const excludedTiers = await uiSettingsClient?.get(DATA_VIEWS_FIELDS_EXCLUDED_TIERS); const esFieldCaps = await callFieldCapsApi({ callCluster, indices, fieldCapsOptions, - indexFilter, + indexFilter: getIndexFilterDsl({ indexFilter, excludedTiers }), fields, expandWildcards, fieldTypes, diff --git a/src/plugins/data_views/server/index_patterns_api_client.ts b/src/plugins/data_views/server/index_patterns_api_client.ts index 0beb1efacf9b2..849102c46aa91 100644 --- a/src/plugins/data_views/server/index_patterns_api_client.ts +++ b/src/plugins/data_views/server/index_patterns_api_client.ts @@ -6,21 +6,23 @@ * Side Public License, v 1. */ -import { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; +import { + ElasticsearchClient, + SavedObjectsClientContract, + IUiSettingsClient, +} from '@kbn/core/server'; import { GetFieldsOptions, IDataViewsApiClient } from '../common/types'; import { DataViewMissingIndices } from '../common/lib'; import { IndexPatternsFetcher } from './fetcher'; import { hasUserDataView } from './has_user_data_view'; export class IndexPatternsApiServer implements IDataViewsApiClient { - esClient: ElasticsearchClient; constructor( - elasticsearchClient: ElasticsearchClient, + private readonly esClient: ElasticsearchClient, private readonly savedObjectsClient: SavedObjectsClientContract, + private readonly uiSettingsClient: IUiSettingsClient, private readonly rollupsEnabled: boolean - ) { - this.esClient = elasticsearchClient; - } + ) {} async getFieldsForWildcard({ pattern, metaFields, @@ -30,11 +32,11 @@ export class IndexPatternsApiServer implements IDataViewsApiClient { indexFilter, fields, }: GetFieldsOptions) { - const indexPatterns = new IndexPatternsFetcher( - this.esClient, - allowNoIndex, - this.rollupsEnabled - ); + const indexPatterns = new IndexPatternsFetcher(this.esClient, { + uiSettingsClient: this.uiSettingsClient, + allowNoIndices: allowNoIndex, + rollupsEnabled: this.rollupsEnabled, + }); return await indexPatterns .getFieldsForWildcard({ pattern, diff --git a/src/plugins/data_views/server/rest_api_routes/internal/existing_indices.ts b/src/plugins/data_views/server/rest_api_routes/internal/existing_indices.ts index a87d993181aae..168171501c1fe 100644 --- a/src/plugins/data_views/server/rest_api_routes/internal/existing_indices.ts +++ b/src/plugins/data_views/server/rest_api_routes/internal/existing_indices.ts @@ -41,7 +41,7 @@ export const handler: RequestHandler<{}, { indices: string | string[] }, string[ const indexArray = parseIndices(indices); const core = await ctx.core; const elasticsearchClient = core.elasticsearch.client.asCurrentUser; - const indexPatterns = new IndexPatternsFetcher(elasticsearchClient, true); + const indexPatterns = new IndexPatternsFetcher(elasticsearchClient); const response: string[] = await indexPatterns.getExistingIndices(indexArray); return res.ok({ body: response }); diff --git a/src/plugins/data_views/server/rest_api_routes/internal/fields.ts b/src/plugins/data_views/server/rest_api_routes/internal/fields.ts index 37b5d7b806120..0536422476228 100644 --- a/src/plugins/data_views/server/rest_api_routes/internal/fields.ts +++ b/src/plugins/data_views/server/rest_api_routes/internal/fields.ts @@ -15,10 +15,9 @@ import type { DataViewsServerPluginStartDependencies, } from '../../types'; import type { FieldDescriptorRestResponse } from '../route_types'; -import { FIELDS_PATH as path, DATA_VIEWS_FIELDS_EXCLUDED_TIERS } from '../../../common/constants'; +import { FIELDS_PATH as path } from '../../../common/constants'; import { parseFields, IBody, IQuery, querySchema, validate } from './fields_for'; import { DEFAULT_FIELD_CACHE_FRESHNESS } from '../../constants'; -import { getIndexFilterDsl } from './utils'; export function calculateHash(srcBuffer: Buffer) { const hash = createHash('sha1'); @@ -31,10 +30,11 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I const core = await context.core; const uiSettings = core.uiSettings.client; const { asCurrentUser } = core.elasticsearch.client; - const indexPatterns = new IndexPatternsFetcher(asCurrentUser, undefined, isRollupsEnabled()); - const excludedTiers = await core.uiSettings.client.get( - DATA_VIEWS_FIELDS_EXCLUDED_TIERS - ); + const indexPatterns = new IndexPatternsFetcher(asCurrentUser, { + uiSettingsClient: uiSettings, + rollupsEnabled: isRollupsEnabled(), + }); + const { pattern, meta_fields: metaFields, @@ -67,7 +67,6 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I includeUnmapped, }, fieldTypes: parsedFieldTypes, - indexFilter: getIndexFilterDsl({ excludedTiers }), ...(parsedFields.length > 0 ? { fields: parsedFields } : {}), }); 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 cc05b11d835b5..44a41b19c67f7 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 @@ -17,11 +17,7 @@ import type { DataViewsServerPluginStartDependencies, } from '../../types'; import type { FieldDescriptorRestResponse } from '../route_types'; -import { - FIELDS_FOR_WILDCARD_PATH as path, - DATA_VIEWS_FIELDS_EXCLUDED_TIERS, -} from '../../../common/constants'; -import { getIndexFilterDsl } from './utils'; +import { FIELDS_FOR_WILDCARD_PATH as path } from '../../../common/constants'; /** * Accepts one of the following: @@ -130,10 +126,11 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I (isRollupsEnabled) => async (context, request, response) => { const core = await context.core; const { asCurrentUser } = core.elasticsearch.client; - const excludedTiers = await core.uiSettings.client.get( - DATA_VIEWS_FIELDS_EXCLUDED_TIERS - ); - const indexPatterns = new IndexPatternsFetcher(asCurrentUser, undefined, isRollupsEnabled()); + const uiSettings = core.uiSettings.client; + const indexPatterns = new IndexPatternsFetcher(asCurrentUser, { + uiSettingsClient: uiSettings, + rollupsEnabled: isRollupsEnabled(), + }); const { pattern, @@ -172,7 +169,7 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I includeUnmapped, }, fieldTypes: parsedFieldTypes, - indexFilter: getIndexFilterDsl({ indexFilter, excludedTiers }), + indexFilter, allowHidden, includeEmptyFields, ...(parsedFields.length > 0 ? { fields: parsedFields } : {}), diff --git a/src/plugins/data_views/server/rest_api_routes/internal/utils.ts b/src/plugins/data_views/server/rest_api_routes/internal/utils.ts deleted file mode 100644 index ab3845fb2ec9e..0000000000000 --- a/src/plugins/data_views/server/rest_api_routes/internal/utils.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 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 { QueryDslQueryContainer } from '../../../common/types'; - -const excludeTiersDsl = (excludedTiers: string) => { - const _tier = excludedTiers.split(',').map((tier) => tier.trim()); - return { - bool: { - must_not: [ - { - terms: { - _tier, - }, - }, - ], - }, - }; -}; - -interface GetIndexFilterDslOptions { - indexFilter?: QueryDslQueryContainer; - excludedTiers?: string; -} - -export const getIndexFilterDsl = ({ - indexFilter, - excludedTiers, -}: GetIndexFilterDslOptions): QueryDslQueryContainer | undefined => { - if (!indexFilter) { - return excludedTiers ? excludeTiersDsl(excludedTiers) : undefined; - } - - return !excludedTiers - ? indexFilter - : { - bool: { - must: [indexFilter, excludeTiersDsl(excludedTiers)], - }, - }; -}; diff --git a/src/plugins/data_views/server/rest_api_routes/internal/utils.test.ts b/src/plugins/data_views/server/utils.test.ts similarity index 100% rename from src/plugins/data_views/server/rest_api_routes/internal/utils.test.ts rename to src/plugins/data_views/server/utils.test.ts diff --git a/src/plugins/data_views/server/utils.ts b/src/plugins/data_views/server/utils.ts index eae603ca0e236..6f4a4ed6765ba 100644 --- a/src/plugins/data_views/server/utils.ts +++ b/src/plugins/data_views/server/utils.ts @@ -8,6 +8,7 @@ import { SavedObjectsClientContract } from '@kbn/core/server'; import { DATA_VIEW_SAVED_OBJECT_TYPE, DataViewAttributes, SavedObject, FieldSpec } from '../common'; +import type { QueryDslQueryContainer } from '../common/types'; /** * @deprecated Use data views api instead @@ -40,3 +41,40 @@ export const findIndexPatternById = async ( return savedObjectsResponse.saved_objects[0]; } }; + +const excludeTiersDsl = (excludedTiers: string) => { + const _tier = excludedTiers.split(',').map((tier) => tier.trim()); + return { + bool: { + must_not: [ + { + terms: { + _tier, + }, + }, + ], + }, + }; +}; + +interface GetIndexFilterDslOptions { + indexFilter?: QueryDslQueryContainer; + excludedTiers?: string; +} + +export const getIndexFilterDsl = ({ + indexFilter, + excludedTiers, +}: GetIndexFilterDslOptions): QueryDslQueryContainer | undefined => { + if (!indexFilter) { + return excludedTiers ? excludeTiersDsl(excludedTiers) : undefined; + } + + return !excludedTiers + ? indexFilter + : { + bool: { + must: [indexFilter, excludeTiersDsl(excludedTiers)], + }, + }; +}; diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx index bbe9096226fb7..730f463bb1235 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx @@ -129,7 +129,7 @@ export const getTopNavLinks = ({ isTextBased ); - const { locator } = services; + const { locator, notifications } = services; const appState = state.appState.getState(); const { timefilter } = services.data.query.timefilter; const timeRange = timefilter.getTime(); @@ -198,6 +198,7 @@ export const getTopNavLinks = ({ onClose: () => { anchorElement?.focus(); }, + toasts: notifications.toasts, }); }, }; diff --git a/src/plugins/discover/public/components/doc_table/_doc_table.scss b/src/plugins/discover/public/components/doc_table/_doc_table.scss index 67de9cfae42e1..a303d462a576b 100644 --- a/src/plugins/discover/public/components/doc_table/_doc_table.scss +++ b/src/plugins/discover/public/components/doc_table/_doc_table.scss @@ -29,6 +29,11 @@ font-family: $euiCodeFontFamily; font-size: $euiFontSizeXS; } + + .embPanel & { + // Bug fix for dashboard panels https://github.com/elastic/kibana/issues/180828 + mask-image: none; + } } .kbnDocTable__footer { diff --git a/src/plugins/files_management/tsconfig.json b/src/plugins/files_management/tsconfig.json index 461882d69b91e..8ecd2a7793dfc 100644 --- a/src/plugins/files_management/tsconfig.json +++ b/src/plugins/files_management/tsconfig.json @@ -11,11 +11,11 @@ "@kbn/i18n", "@kbn/content-management-table-list-view-table", "@kbn/content-management-table-list-view", - "@kbn/kibana-react-plugin", "@kbn/i18n-react", "@kbn/shared-ux-file-image", "@kbn/shared-ux-router", "@kbn/content-management-table-list-view-common", + "@kbn/kibana-react-plugin", ], "exclude": [ "target/**/*", diff --git a/src/plugins/home/public/application/application.tsx b/src/plugins/home/public/application/application.tsx index d289d4c54d827..b64dc56ea9e0b 100644 --- a/src/plugins/home/public/application/application.tsx +++ b/src/plugins/home/public/application/application.tsx @@ -8,9 +8,9 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { ScopedHistory, CoreStart, CoreTheme } from '@kbn/core/public'; -import { Observable } from 'rxjs'; -import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { ScopedHistory, CoreStart } from '@kbn/core/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; @@ -24,7 +24,6 @@ import './index.scss'; export const renderApp = async ( element: HTMLElement, - theme$: Observable, coreStart: CoreStart, history: ScopedHistory ) => { @@ -44,19 +43,19 @@ export const renderApp = async ( ); render( - - + + - - , + + , element ); }); @@ -64,7 +63,7 @@ export const renderApp = async ( // dispatch synthetic hash change event to update hash history objects // this is necessary because hash updates triggered by using popState won't trigger this event naturally. // This must be called before the app is mounted to avoid call this after the redirect to default app logic kicks in - const unlisten = history.listen((location) => { + const unlisten = history.listen((_location) => { window.dispatchEvent(new HashChangeEvent('hashchange')); }); diff --git a/src/plugins/home/public/plugin.ts b/src/plugins/home/public/plugin.ts index 8c895d9b491bd..84c383eb8a749 100644 --- a/src/plugins/home/public/plugin.ts +++ b/src/plugins/home/public/plugin.ts @@ -116,7 +116,7 @@ export class HomePublicPlugin i18n.translate('home.pageTitle', { defaultMessage: 'Home' }) ); const { renderApp } = await import('./application'); - return await renderApp(params.element, params.theme$, coreStart, params.history); + return await renderApp(params.element, coreStart, params.history); }, }); urlForwarding.forwardApp('home', 'home'); diff --git a/src/plugins/home/tsconfig.json b/src/plugins/home/tsconfig.json index 87137d6c7166e..01caa2a2c16cc 100644 --- a/src/plugins/home/tsconfig.json +++ b/src/plugins/home/tsconfig.json @@ -33,6 +33,7 @@ "@kbn/shared-ux-router", "@kbn/core-http-common", "@kbn/shared-ux-link-redirect-app", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/src/plugins/kibana_overview/public/application.tsx b/src/plugins/kibana_overview/public/application.tsx index dce7573f63f53..8b94a09ba981b 100644 --- a/src/plugins/kibana_overview/public/application.tsx +++ b/src/plugins/kibana_overview/public/application.tsx @@ -9,8 +9,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { i18n } from '@kbn/i18n'; -import { I18nProvider } from '@kbn/i18n-react'; -import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { NewsfeedApiEndpoint } from '@kbn/newsfeed-plugin/public'; import { AppMountParameters, CoreStart } from '@kbn/core/public'; import { AppPluginStartDependencies } from './types'; @@ -19,7 +19,7 @@ import { KibanaOverviewApp } from './components/app'; export const renderApp = ( core: CoreStart, deps: AppPluginStartDependencies, - { appBasePath, element, theme$ }: AppMountParameters + { appBasePath, element }: AppMountParameters ) => { const { notifications, http } = core; const { newsfeed, home, navigation } = deps; @@ -41,16 +41,14 @@ export const renderApp = ( ); ReactDOM.render( - - - - - - - , + + + + + , element ); }); diff --git a/src/plugins/kibana_overview/tsconfig.json b/src/plugins/kibana_overview/tsconfig.json index 09e9d232901c4..ad6a946b432b5 100644 --- a/src/plugins/kibana_overview/tsconfig.json +++ b/src/plugins/kibana_overview/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/shared-ux-router", "@kbn/shared-ux-avatar-solution", "@kbn/shared-ux-utility", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index 35f0644b08c88..0ed695f0b1999 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -671,4 +671,8 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'keyword', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:profilingFetchTopNFunctionsFromStacktraces': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, }; diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 75c2ca310ddc6..86c25366d4ceb 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -176,4 +176,5 @@ export interface UsageStats { 'observability:apmEnableTransactionProfiling': boolean; 'devTools:enablePersistentConsole': boolean; 'aiAssistant:preferredAIAssistantType': string; + 'observability:profilingFetchTopNFunctionsFromStacktraces': boolean; } diff --git a/src/plugins/management/server/capabilities_provider.ts b/src/plugins/management/server/capabilities_provider.ts index cf9afd4f83ea9..cd0d8aa0b3434 100644 --- a/src/plugins/management/server/capabilities_provider.ts +++ b/src/plugins/management/server/capabilities_provider.ts @@ -17,6 +17,7 @@ export const capabilitiesProvider = () => ({ indexPatterns: true, objects: true, aiAssistantManagementSelection: true, + securityAiAssistantManagement: true, observabilityAiAssistantManagement: true, }, }, diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx index 1c55519e23256..2c8fc1e58d934 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_data.tsx @@ -7,6 +7,7 @@ */ import { EuiButtonProps, EuiBetaBadgeProps } from '@elastic/eui'; +import { InjectedIntl } from '@kbn/i18n-react'; export type TopNavMenuAction = (anchorElement: HTMLElement) => void; @@ -26,6 +27,7 @@ export interface TopNavMenuData { iconSide?: EuiButtonProps['iconSide']; target?: string; href?: string; + intl?: InjectedIntl; } export interface RegisteredTopNavMenuData extends TopNavMenuData { diff --git a/src/plugins/share/public/components/context/index.tsx b/src/plugins/share/public/components/context/index.tsx index 5ec9f8d1734ab..6bd668c854a17 100644 --- a/src/plugins/share/public/components/context/index.tsx +++ b/src/plugins/share/public/components/context/index.tsx @@ -6,6 +6,8 @@ * Side Public License, v 1. */ +import { ThemeServiceSetup } from '@kbn/core-theme-browser'; +import { I18nStart } from '@kbn/core/public'; import { createContext, useContext } from 'react'; import { AnonymousAccessServiceContract } from '../../../common'; @@ -16,6 +18,8 @@ import type { ShareContext, } from '../../types'; +export type { ShareMenuItem } from '../../types'; + export interface IShareContext extends ShareContext { allowEmbed: boolean; allowShortUrl: boolean; @@ -26,6 +30,8 @@ export interface IShareContext extends ShareContext { snapshotShareWarning?: string; objectTypeTitle?: string; isEmbedded: boolean; + theme: ThemeServiceSetup; + i18n: I18nStart; } export const ShareTabsContext = createContext(null); diff --git a/src/plugins/share/public/components/share_context_menu.tsx b/src/plugins/share/public/components/share_context_menu.tsx index 0e73437914bc9..d0b241ba24ccf 100644 --- a/src/plugins/share/public/components/share_context_menu.tsx +++ b/src/plugins/share/public/components/share_context_menu.tsx @@ -136,6 +136,7 @@ export class ShareContextMenu extends Component { }); menuItems.push({ ...shareMenuItem, + name: shareMenuItem!.name, panel: panelId, }); }); diff --git a/src/plugins/share/public/components/share_tabs.tsx b/src/plugins/share/public/components/share_tabs.tsx index 8866eba58adfc..d0237b7b7dc32 100644 --- a/src/plugins/share/public/components/share_tabs.tsx +++ b/src/plugins/share/public/components/share_tabs.tsx @@ -10,7 +10,7 @@ import React, { type FC } from 'react'; import { TabbedModal } from '@kbn/shared-ux-tabbed-modal'; import { ShareTabsContext, useShareTabsContext, type IShareContext } from './context'; -import { linkTab, embedTab } from './tabs'; +import { linkTab, embedTab, exportTab } from './tabs'; export const ShareMenuV2: FC<{ shareContext: IShareContext }> = ({ shareContext }) => { return ( @@ -28,20 +28,28 @@ export const ShareMenuTabs = () => { return null; } - const { allowEmbed, objectType, onClose } = shareContext; + const { allowEmbed, objectType, onClose, shareMenuItems } = shareContext; const tabs = []; + tabs.push(linkTab); + if (shareMenuItems.length > 0) { + tabs.push(exportTab); + } + if (allowEmbed) { tabs.push(embedTab); } + const formattedTitle = + objectType === 'lens' ? `Share this Lens visualization` : `Share this ${objectType}`; + return ( ); diff --git a/src/plugins/share/public/components/tabs/embed/embed_content.tsx b/src/plugins/share/public/components/tabs/embed/embed_content.tsx index 78a9ef65b9abf..73df76705423b 100644 --- a/src/plugins/share/public/components/tabs/embed/embed_content.tsx +++ b/src/plugins/share/public/components/tabs/embed/embed_content.tsx @@ -6,7 +6,16 @@ * Side Public License, v 1. */ -import { EuiForm, EuiFormRow, EuiSpacer, EuiText } from '@elastic/eui'; +import { + EuiButton, + EuiFlexGroup, + EuiForm, + EuiFormRow, + EuiSpacer, + EuiText, + EuiFlexItem, + EuiCopy, +} from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useCallback, useEffect, useState } from 'react'; import useMountedState from 'react-use/lib/useMountedState'; @@ -24,7 +33,7 @@ type EmbedProps = Pick< | 'embedUrlParamExtensions' | 'objectType' > & { - onChange: (url: string) => void; + setIsNotSaved: () => void; }; interface UrlParams { @@ -43,8 +52,8 @@ export const EmbedContent = ({ shareableUrlForSavedObject, shareableUrl, isEmbedded, - onChange, objectType, + setIsNotSaved, }: EmbedProps) => { const isMounted = useMountedState(); const [urlParams, setUrlParams] = useState(undefined); @@ -56,8 +65,8 @@ export const EmbedContent = ({ const [usePublicUrl] = useState(false); useEffect(() => { - onChange(url); - }, [url, onChange]); + if (objectType !== 'dashboard') setIsNotSaved(); + }, [url, setIsNotSaved, objectType]); const getUrlParamExtensions = useCallback( (tempUrl: string): string => { @@ -224,7 +233,7 @@ export const EmbedContent = ({ const helpText = objectType === 'dashboard' ? ( ) : ( @@ -236,12 +245,33 @@ export const EmbedContent = ({ ); return ( - - - {helpText} - - {renderUrlParamExtensions()} - - + <> + + + {helpText} + + {renderUrlParamExtensions()} + + + + + + {(copy) => ( + + + + )} + + + + ); }; diff --git a/src/plugins/share/public/components/tabs/embed/index.tsx b/src/plugins/share/public/components/tabs/embed/index.tsx index 4614355babafe..6001e131bf689 100644 --- a/src/plugins/share/public/components/tabs/embed/index.tsx +++ b/src/plugins/share/public/components/tabs/embed/index.tsx @@ -8,47 +8,45 @@ import { i18n } from '@kbn/i18n'; import React, { useCallback } from 'react'; -import { copyToClipboard } from '@elastic/eui'; import { type IModalTabDeclaration } from '@kbn/shared-ux-tabbed-modal'; import { EmbedContent } from './embed_content'; import { useShareTabsContext } from '../../context'; const EMBED_TAB_ACTIONS = { SET_EMBED_URL: 'SET_EMBED_URL', + SET_IS_NOT_SAVED: 'SET_IS_NOT_SAVED', }; -type IEmbedTab = IModalTabDeclaration<{ url: string }>; +type IEmbedTab = IModalTabDeclaration<{ url: string; isNotSaved: boolean }>; -const embedTabReducer: IEmbedTab['reducer'] = (state = { url: '' }, action) => { +const embedTabReducer: IEmbedTab['reducer'] = (state = { url: '', isNotSaved: false }, action) => { switch (action.type) { - case EMBED_TAB_ACTIONS.SET_EMBED_URL: + case EMBED_TAB_ACTIONS.SET_IS_NOT_SAVED: return { ...state, - url: action.payload, + isNotSaved: action.payload, }; default: return state; } }; -const EmbedTabContent: NonNullable = ({ dispatch }) => { +const EmbedTabContent: NonNullable = ({ state, dispatch }) => { const { embedUrlParamExtensions, shareableUrlForSavedObject, shareableUrl, isEmbedded, objectType, + isDirty, } = useShareTabsContext()!; - const onChange = useCallback( - (shareUrl: string) => { - dispatch({ - type: EMBED_TAB_ACTIONS.SET_EMBED_URL, - payload: shareUrl, - }); - }, - [dispatch] - ); + const setIsNotSaved = useCallback(() => { + dispatch({ + type: EMBED_TAB_ACTIONS.SET_IS_NOT_SAVED, + payload: objectType === 'dashboard' ? isDirty : false, + }); + }, [dispatch, objectType, isDirty]); return ( = ({ dispatch }) => { shareableUrl, isEmbedded, objectType, + isNotSaved: state?.isNotSaved, + setIsNotSaved, }} - onChange={onChange} /> ); }; @@ -75,14 +74,4 @@ export const embedTab: IEmbedTab = { }), reducer: embedTabReducer, content: EmbedTabContent, - modalActionBtn: { - id: 'embed', - dataTestSubj: 'copyEmbedUrlButton', - label: i18n.translate('share.link.copyEmbedCodeButton', { - defaultMessage: 'Copy Embed', - }), - handler: ({ state }) => { - copyToClipboard(state.url); - }, - }, }; diff --git a/src/plugins/share/public/components/tabs/export/export_content.tsx b/src/plugins/share/public/components/tabs/export/export_content.tsx new file mode 100644 index 0000000000000..c0783172f3461 --- /dev/null +++ b/src/plugins/share/public/components/tabs/export/export_content.tsx @@ -0,0 +1,290 @@ +/* + * Copyright 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, { useCallback, useEffect, useState } from 'react'; +import { FormattedMessage, InjectedIntl, injectI18n } from '@kbn/i18n-react'; + +import { + EuiButton, + EuiButtonEmpty, + EuiCopy, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiIcon, + EuiRadioGroup, + EuiSpacer, + EuiSwitch, + EuiSwitchEvent, + EuiText, + EuiToolTip, +} from '@elastic/eui'; +import useMountedState from 'react-use/lib/useMountedState'; +import { ShareMenuItem } from '../../../types'; +import { type IShareContext } from '../../context'; + +type ExportProps = Pick & { + layoutOption?: 'print'; + aggregateReportTypes: ShareMenuItem[]; + intl: InjectedIntl; +}; + +type AllowedExports = 'pngV2' | 'printablePdfV2' | 'csv_v2' | 'csv_searchsource' | 'lens_csv'; + +const ExportContentUi = ({ isDirty, objectType, aggregateReportTypes, intl }: ExportProps) => { + // needed for CSV in Discover + const firstRadio = + (aggregateReportTypes[0].reportType as AllowedExports) ?? ('printablePdfV2' as const); + const [, setIsStale] = useState(false); + const [isCreatingReport, setIsCreatingReport] = useState(false); + const [selectedRadio, setSelectedRadio] = useState(firstRadio); + const [usePrintLayout, setPrintLayout] = useState(false); + const isMounted = useMountedState(); + + const markAsStale = useCallback(() => { + if (!isMounted) return; + setIsStale(true); + }, [isMounted]); + + const getProperties = useCallback(() => { + if (objectType === 'search') { + return aggregateReportTypes[0]; + } else { + return aggregateReportTypes?.filter(({ reportType }) => reportType === selectedRadio)[0]; + } + }, [selectedRadio, aggregateReportTypes, objectType]); + + const handlePrintLayoutChange = useCallback( + (evt: EuiSwitchEvent) => { + setPrintLayout(evt.target.checked); + getProperties(); + }, + [setPrintLayout, getProperties] + ); + + const { + generateReportButton, + helpText, + renderCopyURLButton, + generateReport, + generateReportForPrinting, + downloadCSVLens, + absoluteUrl, + renderLayoutOptionSwitch, + } = getProperties(); + + const getRadioOptions = useCallback(() => { + if (!aggregateReportTypes.length) { + throw new Error('No content registered for this tab'); + } + return aggregateReportTypes.map(({ reportType, label }) => { + if (reportType == null) { + throw new Error('expected reportType to be string!'); + } + return { id: reportType, label, 'data-test-subj': `${reportType}-radioOption` }; + }); + }, [aggregateReportTypes]); + + const renderLayoutOptionsSwitch = useCallback(() => { + if (renderLayoutOptionSwitch) { + return ( + + + + + + } + checked={usePrintLayout} + onChange={handlePrintLayoutChange} + data-test-subj="usePrintLayout" + /> + + + + } + > + + + + + ); + } + }, [usePrintLayout, renderLayoutOptionSwitch, handlePrintLayoutChange]); + + useEffect(() => { + isMounted(); + getRadioOptions(); + renderLayoutOptionsSwitch(); + getProperties(); + markAsStale(); + }, [ + aggregateReportTypes, + getProperties, + getRadioOptions, + renderLayoutOptionsSwitch, + markAsStale, + isMounted, + ]); + + const showCopyURLButton = useCallback(() => { + if (renderCopyURLButton) + return ( + + + + ) : ( + + ) + } + > + + {(copy) => ( + + + + + + )} + + + + + + } + > + + + + + ); + }, [absoluteUrl, isDirty, renderCopyURLButton]); + + const getReport = useCallback(() => { + if (!generateReportForPrinting && !generateReport && !downloadCSVLens) { + throw new Error('Report cannot be run due to no generate report method registered'); + } + if (objectType === 'lens' && selectedRadio === 'lens_csv') { + return downloadCSVLens!(); + } + return usePrintLayout ? generateReportForPrinting!({ intl }) : generateReport!({ intl }); + }, [ + downloadCSVLens, + generateReport, + generateReportForPrinting, + objectType, + selectedRadio, + usePrintLayout, + intl, + ]); + + const renderGenerateReportButton = useCallback(() => { + return ( + { + setIsCreatingReport(true); + getReport(); + setIsCreatingReport(false); + }} + data-test-subj="generateReportButton" + isLoading={Boolean(isCreatingReport)} + > + {generateReportButton} + + ); + }, [generateReportButton, getReport, isCreatingReport]); + + const renderRadioOptions = () => { + if (getRadioOptions().length > 1) { + return ( + + { + setSelectedRadio(id as AllowedExports); + getProperties(); + }} + name="image reporting radio group" + idSelected={selectedRadio} + legend={{ + children: , + }} + /> + + ); + } + }; + + const getHelpText = () => { + if (objectType === 'lens' && generateReport !== undefined) { + return helpText; + } else { + return ( + + ); + } + }; + + return ( + <> + + + {getHelpText()} + + {renderRadioOptions()} + + + + {renderLayoutOptionsSwitch()} + {showCopyURLButton()} + {renderGenerateReportButton()} + + + ); +}; + +export const ExportContent = injectI18n(ExportContentUi); diff --git a/src/plugins/share/public/components/tabs/export/index.tsx b/src/plugins/share/public/components/tabs/export/index.tsx new file mode 100644 index 0000000000000..24bb9cea65ec4 --- /dev/null +++ b/src/plugins/share/public/components/tabs/export/index.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { type IModalTabDeclaration } from '@kbn/shared-ux-tabbed-modal'; +import { ExportContent } from './export_content'; +import { useShareTabsContext, type ShareMenuItem } from '../../context'; + +type IExportTab = IModalTabDeclaration; + +const ExportTabContent = () => { + const { shareMenuItems, objectType, isDirty, onClose } = useShareTabsContext()!; + + return ( + + ); +}; + +export const exportTab: IExportTab = { + id: 'export', + name: i18n.translate('share.contextMenu.exportCodeTab', { + defaultMessage: 'Export', + }), + content: ExportTabContent, +}; diff --git a/src/plugins/share/public/components/tabs/index.ts b/src/plugins/share/public/components/tabs/index.ts index a5855495aaec5..200cb058daba5 100644 --- a/src/plugins/share/public/components/tabs/index.ts +++ b/src/plugins/share/public/components/tabs/index.ts @@ -8,3 +8,4 @@ export { linkTab } from './link'; export { embedTab } from './embed'; +export { exportTab } from './export'; diff --git a/src/plugins/share/public/components/tabs/link/index.tsx b/src/plugins/share/public/components/tabs/link/index.tsx index b7ae94fa1848e..c97609b7ae534 100644 --- a/src/plugins/share/public/components/tabs/link/index.tsx +++ b/src/plugins/share/public/components/tabs/link/index.tsx @@ -8,7 +8,6 @@ import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; -import { copyToClipboard } from '@elastic/eui'; import { type IModalTabDeclaration } from '@kbn/shared-ux-tabbed-modal'; import { useShareTabsContext } from '../../context'; import { LinkContent } from './link_content'; @@ -16,6 +15,7 @@ import { LinkContent } from './link_content'; type ILinkTab = IModalTabDeclaration<{ dashboardUrl: string; isNotSaved: boolean; + setIsClicked: boolean; }>; const LINK_TAB_ACTIONS = { @@ -27,6 +27,7 @@ const linkTabReducer: ILinkTab['reducer'] = ( state = { dashboardUrl: '', isNotSaved: false, + setIsClicked: false, }, action ) => { @@ -51,11 +52,11 @@ const LinkTabContent: ILinkTab['content'] = ({ state, dispatch }) => { objectType, objectId, isDirty, - isEmbedded, shareableUrl, shareableUrlForSavedObject, urlService, shareableUrlLocatorParams, + allowShortUrl, } = useShareTabsContext()!; const setDashboardLink = useCallback( @@ -68,9 +69,17 @@ const LinkTabContent: ILinkTab['content'] = ({ state, dispatch }) => { const setIsNotSaved = useCallback(() => { dispatch({ type: LINK_TAB_ACTIONS.SET_IS_NOT_SAVED, - payload: objectType === 'lens' ? isDirty : false, + payload: + objectType === 'lens' || (objectType === 'dashboard' && !allowShortUrl) ? isDirty : false, }); - }, [dispatch, objectType, isDirty]); + }, [dispatch, objectType, isDirty, allowShortUrl]); + + const setIsClicked = useCallback(() => { + dispatch({ + type: LINK_TAB_ACTIONS.SET_IS_NOT_SAVED, + payload: setIsClicked, + }); + }, [dispatch]); return ( { objectType, objectId, isDirty, - isEmbedded, shareableUrl, shareableUrlForSavedObject, urlService, shareableUrlLocatorParams, - dashboardLink: state.dashboardUrl, - isNotSaved: state.isNotSaved, + dashboardLink: state?.dashboardUrl, setDashboardLink, + isNotSaved: state?.isNotSaved, setIsNotSaved, + allowShortUrl, + setIsClicked: state?.setIsClicked, }} /> ); @@ -102,13 +112,4 @@ export const linkTab: ILinkTab = { }), content: LinkTabContent, reducer: linkTabReducer, - modalActionBtn: { - id: 'link', - dataTestSubj: 'copyShareUrlButton', - label: i18n.translate('share.link.copyLinkButton', { defaultMessage: 'Copy link' }), - handler: ({ state }) => { - copyToClipboard(state.dashboardUrl); - }, - style: ({ state }) => state.isNotSaved, - }, }; diff --git a/src/plugins/share/public/components/tabs/link/link_content.tsx b/src/plugins/share/public/components/tabs/link/link_content.tsx index 38d59de8cd67b..2443ed90406da 100644 --- a/src/plugins/share/public/components/tabs/link/link_content.tsx +++ b/src/plugins/share/public/components/tabs/link/link_content.tsx @@ -6,10 +6,20 @@ * Side Public License, v 1. */ -import { EuiCodeBlock, EuiForm, EuiSpacer, EuiText } from '@elastic/eui'; +import { + copyToClipboard, + EuiButton, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiSpacer, + EuiText, + EuiToolTip, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useCallback, useEffect, useState } from 'react'; -import useMountedState from 'react-use/lib/useMountedState'; +import React, { useCallback, useState } from 'react'; import { format as formatUrl, parse as parseUrl } from 'url'; import { IShareContext } from '../../context'; @@ -18,15 +28,12 @@ type LinkProps = Pick< | 'objectType' | 'objectId' | 'isDirty' - | 'isEmbedded' | 'urlService' | 'shareableUrl' | 'shareableUrlForSavedObject' | 'shareableUrlLocatorParams' -> & { - setDashboardLink: (url: string) => void; - setIsNotSaved: () => void; -}; + | 'allowShortUrl' +>; interface UrlParams { [extensionName: string]: { @@ -38,39 +45,20 @@ export const LinkContent = ({ objectType, objectId, isDirty, - isEmbedded, shareableUrl, shareableUrlForSavedObject, urlService, shareableUrlLocatorParams, - setDashboardLink, - setIsNotSaved, + allowShortUrl, }: LinkProps) => { - const isMounted = useMountedState(); const [url, setUrl] = useState(''); const [urlParams] = useState(undefined); + const [isTextCopied, setTextCopied] = useState(false); const [shortUrlCache, setShortUrlCache] = useState(undefined); - useEffect(() => { - // propagate url updates upwards to tab - setDashboardLink(url); - setIsNotSaved(); - }, [setDashboardLink, url, setIsNotSaved, isDirty]); - const isNotSaved = useCallback(() => { - return objectId === undefined || objectId === '' || isDirty; - }, [objectId, isDirty]); - - const makeUrlEmbeddable = useCallback((tempUrl: string): string => { - const embedParam = '?embed=true'; - const urlHasQueryString = tempUrl.indexOf('?') !== -1; - - if (urlHasQueryString) { - return tempUrl.replace('?', `${embedParam}&`); - } - - return `${tempUrl}${embedParam}`; - }, []); + return isDirty; + }, [isDirty]); const getUrlParamExtensions = useCallback( (tempUrl: string): string => { @@ -93,12 +81,11 @@ export const LinkContent = ({ const updateUrlParams = useCallback( (tempUrl: string) => { - tempUrl = isEmbedded ? makeUrlEmbeddable(tempUrl) : tempUrl; tempUrl = urlParams ? getUrlParamExtensions(tempUrl) : tempUrl; setUrl(tempUrl); return tempUrl; }, - [makeUrlEmbeddable, getUrlParamExtensions, urlParams, isEmbedded] + [getUrlParamExtensions, urlParams] ); const getSnapshotUrl = useCallback( @@ -148,56 +135,112 @@ export const LinkContent = ({ return updateUrlParams(formattedUrl); }, [getSnapshotUrl, isNotSaved, updateUrlParams]); - const createShortUrl = useCallback( - async (tempUrl: string) => { - if (!isMounted || shortUrlCache) return; - const shortUrl = shareableUrlLocatorParams - ? await urlService.shortUrls.get(null).createWithLocator(shareableUrlLocatorParams) - : (await urlService.shortUrls.get(null).createFromLongUrl(tempUrl)).url; - setShortUrlCache(shortUrl as string); - setUrl(shortUrl as string); - }, - [isMounted, shareableUrlLocatorParams, urlService.shortUrls, shortUrlCache] - ); - - const setUrlHelper = useCallback(() => { - let tempUrl: string | undefined; - - if (objectType === 'dashboard' || objectType === 'search') { - tempUrl = getSnapshotUrl(); + const createShortUrl = useCallback(async () => { + if (shareableUrlLocatorParams) { + const shortUrls = urlService.shortUrls.get(null); + const shortUrl = await shortUrls.createWithLocator(shareableUrlLocatorParams); + const urlWithLoc = await shortUrl.locator.getUrl(shortUrl.params, { absolute: true }); + setShortUrlCache(urlWithLoc); + return urlWithLoc; } else { - tempUrl = getSavedObjectUrl(); + const snapshotUrl = getSnapshotUrl(); + const shortUrl = await urlService.shortUrls.get(null).createFromLongUrl(snapshotUrl); + setShortUrlCache(shortUrl.url); + return shortUrl.url; } - return url === '' || objectType === 'lens' ? setUrl(tempUrl!) : createShortUrl(tempUrl!); - }, [getSavedObjectUrl, getSnapshotUrl, createShortUrl, objectType, url]); + }, [shareableUrlLocatorParams, urlService.shortUrls, getSnapshotUrl, setShortUrlCache]); - useEffect(() => { - isMounted(); - setUrlHelper(); - }, [isMounted, setUrlHelper]); + const copyUrlHelper = useCallback(async () => { + let urlToCopy = url; + if (!urlToCopy) { + let tempUrl = ''; + + if (objectType === 'dashboard' || objectType === 'search') { + tempUrl = getSnapshotUrl(); + } else if (objectType === 'lens') { + tempUrl = getSavedObjectUrl() as string; + } + + urlToCopy = allowShortUrl ? await createShortUrl() : tempUrl; + } + + setUrl(() => { + copyToClipboard(urlToCopy); + setTextCopied(true); + return urlToCopy; + }); + }, [allowShortUrl, createShortUrl, getSavedObjectUrl, getSnapshotUrl, objectType, setUrl, url]); + + const renderSaveState = + objectType === 'lens' && isNotSaved() ? ( + + ) : objectType === 'lens' ? ( + shortUrlCache ?? shareableUrl + ) : ( + shareableUrl ?? shortUrlCache ?? '' + ); + + const lensOnClick = () => { + if (objectType === 'lens' && !isDirty) { + return copyUrlHelper(); + } else { + return copyUrlHelper(); + } + }; return ( - - - - - - - - {objectType === 'lens' && isNotSaved() ? ( + <> + + + - ) : ( - shareableUrl ?? url ?? '' + + + {objectType !== 'dashboard' && ( + + {renderSaveState} + )} - - - + + + + + + (objectType === 'lens' && isDirty ? null : setTextCopied(false))} + onClick={lensOnClick} + disabled={objectType === 'lens' && isDirty} + > + + + + + + ); }; diff --git a/src/plugins/share/public/mocks.ts b/src/plugins/share/public/mocks.ts index f7fd6b8aa0734..62c37752e01fe 100644 --- a/src/plugins/share/public/mocks.ts +++ b/src/plugins/share/public/mocks.ts @@ -42,6 +42,7 @@ const createSetupContract = (): Setup => { url, navigate: jest.fn(), setAnonymousAccessServiceProvider: jest.fn(), + isNewVersion: jest.fn(), }; return setupContract; }; diff --git a/src/plugins/share/public/plugin.ts b/src/plugins/share/public/plugin.ts index ed3567d411654..3844da9dcc35a 100644 --- a/src/plugins/share/public/plugin.ts +++ b/src/plugins/share/public/plugin.ts @@ -42,6 +42,11 @@ export type SharePublicSetup = ShareMenuRegistrySetup & { * Sets the provider for the anonymous access service; this is consumed by the Security plugin to avoid a circular dependency. */ setAnonymousAccessServiceProvider: (provider: () => AnonymousAccessServiceContract) => void; + /** + * Allows for canvas to register the older versioned way whereas reporting for Discover/Lens/Dashboard + * can use the new share version and show the share context modals + */ + isNewVersion: () => boolean; }; /** @public */ @@ -74,7 +79,7 @@ export class SharePlugin > { private config: ClientConfigType; - private readonly shareMenuRegistry = new ShareMenuRegistry(); + private readonly shareMenuRegistry?: ShareMenuRegistry; private readonly shareContextMenu = new ShareMenuManager(); private redirectManager?: RedirectManager; private url?: BrowserUrlService; @@ -82,6 +87,9 @@ export class SharePlugin constructor(private readonly initializerContext: PluginInitializerContext) { this.config = initializerContext.config.get(); + this.shareMenuRegistry = new ShareMenuRegistry({ + newVersionEnabled: this.config.new_version.enabled, + }); } public setup(core: CoreSetup): SharePublicSetup { @@ -126,7 +134,7 @@ export class SharePlugin registrations.setup({ analytics }); return { - ...this.shareMenuRegistry.setup(), + ...this.shareMenuRegistry!.setup(), url: this.url, navigate: (options: RedirectOptions) => this.redirectManager!.navigate(options), setAnonymousAccessServiceProvider: (provider: () => AnonymousAccessServiceContract) => { @@ -135,6 +143,7 @@ export class SharePlugin } this.anonymousAccessServiceProvider = provider; }, + isNewVersion: () => this.config.new_version.enabled, }; } @@ -143,7 +152,7 @@ export class SharePlugin const sharingContextMenuStart = this.shareContextMenu.start( core, this.url!, - this.shareMenuRegistry.start(), + this.shareMenuRegistry!.start(), disableEmbed, this.config.new_version.enabled ?? false, this.anonymousAccessServiceProvider diff --git a/src/plugins/share/public/services/share_menu_manager.tsx b/src/plugins/share/public/services/share_menu_manager.tsx index 7c3d7554c0ba2..da5077d89f52e 100644 --- a/src/plugins/share/public/services/share_menu_manager.tsx +++ b/src/plugins/share/public/services/share_menu_manager.tsx @@ -9,10 +9,9 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { CoreStart, OverlayStart, ThemeServiceStart } from '@kbn/core/public'; +import { CoreStart, OverlayStart, ThemeServiceStart, ToastsSetup } from '@kbn/core/public'; import { EuiWrappingPopover } from '@elastic/eui'; import { I18nProvider } from '@kbn/i18n-react'; - import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { ShareMenuItem, ShowShareMenuOptions } from '../types'; import { ShareMenuRegistryStart } from './share_menu_registry'; @@ -58,6 +57,7 @@ export class ShareMenuManager { overlays: core.overlays, i18n: core.i18n, newVersionEnabled, + toasts: core.notifications.toasts, }); }, }; @@ -92,6 +92,7 @@ export class ShareMenuManager { i18n, isDirty, newVersionEnabled, + toasts, }: ShowShareMenuOptions & { anchorElement: HTMLElement; menuItems: ShareMenuItem[]; @@ -103,6 +104,7 @@ export class ShareMenuManager { i18n: CoreStart['i18n']; isDirty: boolean; newVersionEnabled: boolean; + toasts: ToastsSetup; }) { if (this.isOpen) { onClose(); @@ -176,6 +178,9 @@ export class ShareMenuManager { onClose(); session.close(); }, + theme, + i18n, + toasts, }} />, { i18n, theme } diff --git a/src/plugins/share/public/services/share_menu_registry.test.ts b/src/plugins/share/public/services/share_menu_registry.test.ts index 31cf0ea856f07..a52eeb949c5ac 100644 --- a/src/plugins/share/public/services/share_menu_registry.test.ts +++ b/src/plugins/share/public/services/share_menu_registry.test.ts @@ -12,18 +12,18 @@ import { ShareMenuItem, ShareContext } from '../types'; describe('ShareActionsRegistry', () => { describe('setup', () => { test('throws when registering duplicate id', () => { - const setup = new ShareMenuRegistry().setup(); + const setup = new ShareMenuRegistry({ newVersionEnabled: false }).setup(); setup.register({ - id: 'myTest', + id: 'csvReports', getShareMenuItems: () => [], }); expect(() => setup.register({ - id: 'myTest', + id: 'csvReports', getShareMenuItems: () => [], }) ).toThrowErrorMatchingInlineSnapshot( - `"Share menu provider with id [myTest] has already been registered. Use a unique id."` + `"Share menu provider with id [csvReports] has already been registered. Use a unique id."` ); }); }); @@ -31,7 +31,7 @@ describe('ShareActionsRegistry', () => { describe('start', () => { describe('getActions', () => { test('returns a flat list of actions returned by all providers', () => { - const service = new ShareMenuRegistry(); + const service = new ShareMenuRegistry({ newVersionEnabled: false }); const registerFunction = service.setup().register; const shareAction1 = {} as ShareMenuItem; const shareAction2 = {} as ShareMenuItem; @@ -39,11 +39,11 @@ describe('ShareActionsRegistry', () => { const provider1Callback = jest.fn(() => [shareAction1]); const provider2Callback = jest.fn(() => [shareAction2, shareAction3]); registerFunction({ - id: 'myTest', + id: 'csvReports', getShareMenuItems: provider1Callback, }); registerFunction({ - id: 'myTest2', + id: 'screenCaptureReports', getShareMenuItems: provider2Callback, }); const context = {} as ShareContext; diff --git a/src/plugins/share/public/services/share_menu_registry.ts b/src/plugins/share/public/services/share_menu_registry.ts index 2f4d2e7527fda..f6d0285e59c03 100644 --- a/src/plugins/share/public/services/share_menu_registry.ts +++ b/src/plugins/share/public/services/share_menu_registry.ts @@ -10,6 +10,11 @@ import { ShareContext, ShareMenuProvider } from '../types'; export class ShareMenuRegistry { private readonly shareMenuProviders = new Map(); + newVersionEnabled: boolean; + + constructor({ newVersionEnabled }: { newVersionEnabled: boolean }) { + this.newVersionEnabled = newVersionEnabled; + } public setup() { return { @@ -21,13 +26,25 @@ export class ShareMenuRegistry { * @param shareMenuProvider */ register: (shareMenuProvider: ShareMenuProvider) => { - if (this.shareMenuProviders.has(shareMenuProvider.id)) { - throw new Error( - `Share menu provider with id [${shareMenuProvider.id}] has already been registered. Use a unique id.` - ); + if ( + !this.newVersionEnabled && + (shareMenuProvider.id === 'csvReports' || + shareMenuProvider.id === 'screenCaptureReports' || + shareMenuProvider.id === 'csvDownloadLens') + ) { + if (this.shareMenuProviders.has(shareMenuProvider.id)) { + throw new Error( + `Share menu provider with id [${shareMenuProvider.id}] has already been registered. Use a unique id.` + ); + } + this.shareMenuProviders.set(shareMenuProvider.id, shareMenuProvider); + } else if ( + shareMenuProvider.id === 'csvReportsModal' || + shareMenuProvider.id === 'modalImageReports' || + shareMenuProvider.id === 'csvDownloadLens' + ) { + this.shareMenuProviders.set(shareMenuProvider.id, shareMenuProvider); } - - this.shareMenuProviders.set(shareMenuProvider.id, shareMenuProvider); }, }; } diff --git a/src/plugins/share/public/types.ts b/src/plugins/share/public/types.ts index 1832d0a72ed92..bbcf040175386 100644 --- a/src/plugins/share/public/types.ts +++ b/src/plugins/share/public/types.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { ComponentType } from 'react'; +import { ComponentType, ReactElement } from 'react'; import { EuiContextMenuPanelDescriptor } from '@elastic/eui'; import { EuiContextMenuPanelItemDescriptorEntry } from '@elastic/eui/src/components/context_menu/context_menu'; -import type { Capabilities } from '@kbn/core/public'; +import type { Capabilities, ThemeServiceSetup, ToastsSetup } from '@kbn/core/public'; import type { UrlService, LocatorPublic } from '../common/url_service'; import type { BrowserShortUrlClientFactoryCreateParams } from './url_service/short_urls/short_url_client_factory'; import type { BrowserShortUrlClient } from './url_service/short_urls/short_url_client'; @@ -51,6 +51,7 @@ export interface ShareContext { onClose: () => void; showPublicUrlSwitch?: (anonymousUserCapabilities: Capabilities) => boolean; disabledShareUrl?: boolean; + toasts: ToastsSetup; } /** @@ -71,10 +72,27 @@ export interface ShareContextMenuPanelItem * directly in the context menu. If the item is clicked, the `panel` is shown. * */ export interface ShareMenuItem { - shareMenuItem: ShareContextMenuPanelItem; - panel: EuiContextMenuPanelDescriptor; + shareMenuItem?: ShareContextMenuPanelItem; + // needed for Canvas + panel?: EuiContextMenuPanelDescriptor; + label?: 'PDF' | 'CSV' | 'PNG'; + reportType?: string; + requiresSavedState?: boolean; + helpText?: ReactElement; + copyURLButton?: { id: string; dataTestSubj: string; label: string }; + generateReportButton?: ReactElement; + generateReport?: Function; + generateReportForPrinting?: Function; + theme?: ThemeServiceSetup; + downloadCSVLens?: Function; + renderLayoutOptionSwitch?: boolean; + layoutOption?: 'print'; + absoluteUrl?: string; + generateCopyUrl?: URL; + renderCopyURLButton?: boolean; } +type ShareMenuItemType = Omit; /** * @public * A source for additional menu items shown in the share context menu. Any provider @@ -84,8 +102,7 @@ export interface ShareMenuItem { * */ export interface ShareMenuProvider { readonly id: string; - - getShareMenuItems: (context: ShareContext) => ShareMenuItem[]; + getShareMenuItems: (context: ShareContext) => ShareMenuItemType[]; } interface UrlParamExtensionProps { diff --git a/src/plugins/share/public/url_service/redirect/components/page.tsx b/src/plugins/share/public/url_service/redirect/components/page.tsx index e06461a91b64c..1e6293691fb45 100644 --- a/src/plugins/share/public/url_service/redirect/components/page.tsx +++ b/src/plugins/share/public/url_service/redirect/components/page.tsx @@ -38,7 +38,7 @@ export const Page: React.FC = ({ if (error) { return ( - + @@ -47,7 +47,7 @@ export const Page: React.FC = ({ } return ( - + diff --git a/src/plugins/share/tsconfig.json b/src/plugins/share/tsconfig.json index 49a25e75fbef0..d049342fbe675 100644 --- a/src/plugins/share/tsconfig.json +++ b/src/plugins/share/tsconfig.json @@ -20,6 +20,7 @@ "@kbn/shared-ux-prompt-not-found", "@kbn/react-kibana-mount", "@kbn/shared-ux-tabbed-modal", + "@kbn/core-theme-browser", ], "exclude": [ "target/**/*", diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 1a0b63d5c6bf6..8773c3a99f9d2 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10451,6 +10451,12 @@ "_meta": { "description": "Non-default value of setting." } + }, + "observability:profilingFetchTopNFunctionsFromStacktraces": { + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } } } }, @@ -11887,4 +11893,4 @@ } } } -} +} \ No newline at end of file diff --git a/src/plugins/telemetry/server/plugin.test.ts b/src/plugins/telemetry/server/plugin.test.ts index 4cfdcfd1ba5ff..7d997bbc7c528 100644 --- a/src/plugins/telemetry/server/plugin.test.ts +++ b/src/plugins/telemetry/server/plugin.test.ts @@ -11,6 +11,7 @@ import { coreMock } from '@kbn/core/server/mocks'; import { usageCollectionPluginMock } from '@kbn/usage-collection-plugin/server/mocks'; import { telemetryCollectionManagerPluginMock } from '@kbn/telemetry-collection-manager-plugin/server/mocks'; import { TelemetryPlugin } from './plugin'; +import type { NodeRoles } from '@kbn/core-node-server'; describe('TelemetryPlugin', () => { describe('setup', () => { @@ -66,4 +67,43 @@ describe('TelemetryPlugin', () => { }); }); }); + + describe('start', () => { + describe('per node behavior', () => { + function createPluginForNodeRole(roles: Partial) { + const initializerContext = coreMock.createPluginInitializerContext(); + initializerContext.node.roles = { ...initializerContext.node.roles, ...roles }; + + const plugin = new TelemetryPlugin(initializerContext); + + // eslint-disable-next-line dot-notation + const startFetcherMock = (plugin['startFetcher'] = jest.fn()); + + plugin.setup(coreMock.createSetup(), { + usageCollection: usageCollectionPluginMock.createSetupContract(), + telemetryCollectionManager: telemetryCollectionManagerPluginMock.createSetupContract(), + }); + + plugin.start(coreMock.createStart(), { + telemetryCollectionManager: telemetryCollectionManagerPluginMock.createStartContract(), + }); + + return { startFetcherMock }; + } + + afterEach(() => { + jest.resetAllMocks(); + }); + + it('calls startFetcher when it is a UI node', () => { + const { startFetcherMock } = createPluginForNodeRole({ ui: true }); + expect(startFetcherMock).toHaveBeenCalledTimes(1); + }); + + it('does not call startFetcher when not a UI node', () => { + const { startFetcherMock } = createPluginForNodeRole({ ui: false }); + expect(startFetcherMock).toHaveBeenCalledTimes(0); + }); + }); + }); }); diff --git a/src/plugins/telemetry/server/plugin.ts b/src/plugins/telemetry/server/plugin.ts index 6ce2a875e8549..394bfa18cb21e 100644 --- a/src/plugins/telemetry/server/plugin.ts +++ b/src/plugins/telemetry/server/plugin.ts @@ -103,6 +103,7 @@ export class TelemetryPlugin implements Plugin this.isOptedIn === true, diff --git a/src/plugins/telemetry/tsconfig.json b/src/plugins/telemetry/tsconfig.json index 4163f957837a7..81ce6168d0b99 100644 --- a/src/plugins/telemetry/tsconfig.json +++ b/src/plugins/telemetry/tsconfig.json @@ -36,6 +36,7 @@ "@kbn/core-http-browser", "@kbn/core-http-server", "@kbn/analytics-collection-utils", + "@kbn/core-node-server", ], "exclude": [ "target/**/*", diff --git a/src/plugins/telemetry_collection_manager/server/plugin.ts b/src/plugins/telemetry_collection_manager/server/plugin.ts index d3db80ed728de..f4685576c1ef8 100644 --- a/src/plugins/telemetry_collection_manager/server/plugin.ts +++ b/src/plugins/telemetry_collection_manager/server/plugin.ts @@ -21,6 +21,7 @@ import type { } from '@kbn/core/server'; import { firstValueFrom, ReplaySubject } from 'rxjs'; +import apm from 'elastic-apm-node'; import type { TelemetryCollectionManagerPluginSetup, TelemetryCollectionManagerPluginStart, @@ -259,7 +260,16 @@ export class TelemetryCollectionManagerPlugin config: EncryptedStatsGetterConfig ): Promise>; private async getStats(config: StatsGetterConfig) { + const retrieveSnapshotTelemetryTransaction = apm.startTransaction( + 'Retrieve Snapshot Telemetry', + 'telemetry' + ); + retrieveSnapshotTelemetryTransaction.addLabels({ + unencrypted: config.unencrypted, + refresh: config.refreshCache, + }); if (!this.usageCollection) { + retrieveSnapshotTelemetryTransaction.end('skipped'); return []; } const collection = this.collectionStrategy; @@ -268,10 +278,12 @@ export class TelemetryCollectionManagerPlugin const statsCollectionConfig = this.getStatsCollectionConfig(config, this.usageCollection); if (statsCollectionConfig) { try { + retrieveSnapshotTelemetryTransaction.startSpan('Fetch usage'); const usageData = await this.getUsageForCollection(collection, statsCollectionConfig); this.logger.debug(`Received Usage using ${collection.title} collection.`); - return await Promise.all( + retrieveSnapshotTelemetryTransaction.startSpan('Prepare response'); + const results = await Promise.all( usageData.map(async (clusterStats) => { const { cluster_uuid: clusterUuid } = clusterStats.cluster_stats as Record< string, @@ -288,14 +300,20 @@ export class TelemetryCollectionManagerPlugin }; }) ); + retrieveSnapshotTelemetryTransaction.end('success'); + return results; } catch (err) { this.logger.debug( `Failed to collect any usage with registered collection ${collection.title}.` ); + retrieveSnapshotTelemetryTransaction.end('error'); + return []; } } } + retrieveSnapshotTelemetryTransaction.end('skipped'); + return []; } diff --git a/src/plugins/ui_actions/kibana.jsonc b/src/plugins/ui_actions/kibana.jsonc index 66ccaa6917d0b..e63c80190c074 100644 --- a/src/plugins/ui_actions/kibana.jsonc +++ b/src/plugins/ui_actions/kibana.jsonc @@ -9,8 +9,7 @@ "browser": true, "requiredPlugins": [], "requiredBundles": [ - "kibanaUtils", - "kibanaReact" + "kibanaUtils" ] } } diff --git a/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx b/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx index 8c7cf620d4a82..bac4e57aa5624 100644 --- a/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx +++ b/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx @@ -11,8 +11,8 @@ import React from 'react'; import { EuiContextMenu, EuiContextMenuPanelDescriptor, EuiPopover } from '@elastic/eui'; import { EventEmitter } from 'events'; import ReactDOM from 'react-dom'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import { getTheme } from '../services'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { getAnalytics, getI18n, getTheme } from '../services'; let activeSession: ContextMenuSession | null = null; @@ -170,7 +170,7 @@ export function openContextMenu( }; ReactDOM.render( - + - , + , container ); diff --git a/src/plugins/ui_actions/public/plugin.ts b/src/plugins/ui_actions/public/plugin.ts index 1a0e45612c831..1dbff5b9729a0 100644 --- a/src/plugins/ui_actions/public/plugin.ts +++ b/src/plugins/ui_actions/public/plugin.ts @@ -14,7 +14,7 @@ import { visualizeGeoFieldTrigger, } from '@kbn/ui-actions-browser/src/triggers'; import { UiActionsService } from './service'; -import { setTheme } from './services'; +import { setAnalytics, setI18n, setTheme } from './services'; export type UiActionsPublicSetup = Pick< UiActionsService, @@ -47,15 +47,17 @@ export class UiActionsPlugin constructor(_initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup): UiActionsPublicSetup { - setTheme(core.theme); + public setup(_core: CoreSetup): UiActionsPublicSetup { this.service.registerTrigger(rowClickTrigger); this.service.registerTrigger(visualizeFieldTrigger); this.service.registerTrigger(visualizeGeoFieldTrigger); return this.service; } - public start(_core: CoreStart): UiActionsPublicStart { + public start(core: CoreStart): UiActionsPublicStart { + setAnalytics(core.analytics); + setI18n(core.i18n); + setTheme(core.theme); return this.service; } diff --git a/src/plugins/ui_actions/public/service/ui_actions_service.test.ts b/src/plugins/ui_actions/public/service/ui_actions_service.test.ts index 42e3c4ea593fa..b317b343b3ade 100644 --- a/src/plugins/ui_actions/public/service/ui_actions_service.test.ts +++ b/src/plugins/ui_actions/public/service/ui_actions_service.test.ts @@ -10,8 +10,8 @@ import { UiActionsService } from './ui_actions_service'; import { ActionDefinition, ActionInternal } from '../actions'; import { createHelloWorldAction } from '../tests/test_samples'; import { TriggerRegistry, ActionRegistry } from '../types'; +import { coreMock } from '@kbn/core/public/mocks'; import type { Trigger } from '@kbn/ui-actions-browser/src/triggers'; -import { OverlayStart } from '@kbn/core/public'; const FOO_TRIGGER = 'FOO_TRIGGER'; const BAR_TRIGGER = 'BAR_TRIGGER'; @@ -159,10 +159,12 @@ describe('UiActionsService', () => { }); describe('.getTriggerCompatibleActions()', () => { + const coreStart = coreMock.createStart(); + test('can register and get actions', async () => { const actions: ActionRegistry = new Map(); const service = new UiActionsService({ actions }); - const helloWorldAction = createHelloWorldAction({} as unknown as OverlayStart); + const helloWorldAction = createHelloWorldAction(coreStart); const length = actions.size; service.registerAction(helloWorldAction); @@ -173,7 +175,7 @@ describe('UiActionsService', () => { test('getTriggerCompatibleActions returns attached actions', async () => { const service = new UiActionsService(); - const helloWorldAction = createHelloWorldAction({} as unknown as OverlayStart); + const helloWorldAction = createHelloWorldAction(coreStart); service.registerAction(helloWorldAction); diff --git a/src/plugins/ui_actions/public/services.ts b/src/plugins/ui_actions/public/services.ts index 60c4b81311960..427d0f2ec20d2 100644 --- a/src/plugins/ui_actions/public/services.ts +++ b/src/plugins/ui_actions/public/services.ts @@ -6,7 +6,9 @@ * Side Public License, v 1. */ -import { ThemeServiceSetup } from '@kbn/core/public'; +import { AnalyticsServiceStart, I18nStart, ThemeServiceSetup } from '@kbn/core/public'; import { createGetterSetter } from '@kbn/kibana-utils-plugin/public'; +export const [getAnalytics, setAnalytics] = createGetterSetter('Analytics'); +export const [getI18n, setI18n] = createGetterSetter('I18n'); export const [getTheme, setTheme] = createGetterSetter('Theme'); diff --git a/src/plugins/ui_actions/public/tests/get_trigger_compatible_actions.test.ts b/src/plugins/ui_actions/public/tests/get_trigger_compatible_actions.test.ts index 6599d66d2081e..4fa2ef752aa91 100644 --- a/src/plugins/ui_actions/public/tests/get_trigger_compatible_actions.test.ts +++ b/src/plugins/ui_actions/public/tests/get_trigger_compatible_actions.test.ts @@ -9,9 +9,10 @@ import { uiActionsPluginMock } from '../mocks'; import { createHelloWorldAction } from './test_samples'; import { ActionDefinition } from '../actions'; +import { coreMock } from '@kbn/core/public/mocks'; import type { Trigger } from '@kbn/ui-actions-browser'; -import { OverlayStart } from '@kbn/core/public'; +const coreStart = coreMock.createStart(); let action: ActionDefinition<{ name: string }>; let uiActions: ReturnType; beforeEach(() => { @@ -32,14 +33,14 @@ beforeEach(() => { test('can register action', async () => { const { setup } = uiActions; - const helloWorldAction = createHelloWorldAction({} as unknown as OverlayStart); + const helloWorldAction = createHelloWorldAction(coreStart); setup.registerAction(helloWorldAction); }); test('getTriggerCompatibleActions returns attached actions', async () => { const { setup, doStart } = uiActions; - const helloWorldAction = createHelloWorldAction({} as unknown as OverlayStart); + const helloWorldAction = createHelloWorldAction(coreStart); setup.registerAction(helloWorldAction); diff --git a/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx b/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx index 66f8544b093ed..8df43b51a020c 100644 --- a/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx +++ b/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiBadge, EuiFlyoutBody } from '@elastic/eui'; import { CoreStart } from '@kbn/core/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { ActionDefinition } from '../../actions'; const MenuItem: React.FC = () => { @@ -25,7 +25,10 @@ const MenuItem: React.FC = () => { export const ACTION_HELLO_WORLD = 'ACTION_HELLO_WORLD'; -export function createHelloWorldAction(overlays: CoreStart['overlays']): ActionDefinition { +export function createHelloWorldAction( + coreStart: Pick +): ActionDefinition { + const { overlays, ...startServices } = coreStart; return { id: ACTION_HELLO_WORLD, type: ACTION_HELLO_WORLD, @@ -33,7 +36,10 @@ export function createHelloWorldAction(overlays: CoreStart['overlays']): ActionD MenuItem, execute: async () => { overlays.openFlyout( - toMountPoint(Hello World, I am a hello world action!), + toMountPoint( + Hello World, I am a hello world action!, + startServices + ), { 'data-test-subj': 'helloWorldAction', ownFocus: true, diff --git a/src/plugins/ui_actions/tsconfig.json b/src/plugins/ui_actions/tsconfig.json index bac1778817bb2..4601d4b2732e1 100644 --- a/src/plugins/ui_actions/tsconfig.json +++ b/src/plugins/ui_actions/tsconfig.json @@ -7,13 +7,14 @@ "kbn_references": [ "@kbn/core", "@kbn/kibana-utils-plugin", - "@kbn/kibana-react-plugin", "@kbn/data-views-plugin", "@kbn/utility-types", "@kbn/i18n", "@kbn/es-query", "@kbn/ui-actions-browser", "@kbn/expressions-plugin", + "@kbn/react-kibana-context-render", + "@kbn/react-kibana-mount", ], "exclude": [ "target/**/*", diff --git a/src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx b/src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx index 5fbae47f63109..b52ba919ecff1 100644 --- a/src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx +++ b/src/plugins/unified_histogram/public/chart/breakdown_field_selector.tsx @@ -107,3 +107,6 @@ export const BreakdownFieldSelector = ({ /> ); }; + +// eslint-disable-next-line import/no-default-export +export default BreakdownFieldSelector; diff --git a/src/plugins/unified_histogram/public/chart/lazy.tsx b/src/plugins/unified_histogram/public/chart/lazy.tsx new file mode 100644 index 0000000000000..bb8680bf72439 --- /dev/null +++ b/src/plugins/unified_histogram/public/chart/lazy.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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, { lazy } from 'react'; +import { EuiDelayRender, EuiSkeletonRectangle } from '@elastic/eui'; +import { withSuspense } from '@kbn/shared-ux-utility'; +import type { BreakdownFieldSelectorProps } from './breakdown_field_selector'; + +export type { BreakdownFieldSelectorProps } from './breakdown_field_selector'; + +const LazyUnifiedBreakdownFieldSelector = lazy(() => import('./breakdown_field_selector')); + +/** + * A resizable layout component with two panels that renders a histogram with a hits + * counter in the top panel, and a main display (data table, etc.) in the bottom panel. + */ +export const UnifiedBreakdownFieldSelector = withSuspense( + LazyUnifiedBreakdownFieldSelector, + + + +); diff --git a/src/plugins/unified_histogram/public/index.ts b/src/plugins/unified_histogram/public/index.ts index 08f79f7e2ee94..eb4e8fe6eb823 100644 --- a/src/plugins/unified_histogram/public/index.ts +++ b/src/plugins/unified_histogram/public/index.ts @@ -8,6 +8,9 @@ import { UnifiedHistogramPublicPlugin } from './plugin'; +export type { BreakdownFieldSelectorProps } from './chart/lazy'; +export { UnifiedBreakdownFieldSelector } from './chart/lazy'; + export type { UnifiedHistogramApi, UnifiedHistogramContainerProps, @@ -32,5 +35,6 @@ export type { } from './types'; export { UnifiedHistogramFetchStatus, UnifiedHistogramExternalVisContextStatus } from './types'; export { canImportVisContext } from './utils/external_vis_context'; +export { fieldSupportsBreakdown } from './utils/field_supports_breakdown'; export const plugin = () => new UnifiedHistogramPublicPlugin(); diff --git a/src/plugins/unified_search/public/filter_bar/filter_bar.tsx b/src/plugins/unified_search/public/filter_bar/filter_bar.tsx index a9c53d9f89121..54bac96bb9921 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_bar.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_bar.tsx @@ -7,7 +7,7 @@ */ import { EuiFlexGroup, useEuiTheme } from '@elastic/eui'; -import { InjectedIntl, injectI18n } from '@kbn/i18n-react'; +import { injectI18n } from '@kbn/i18n-react'; import type { Filter } from '@kbn/es-query'; import React, { ReactNode, useRef } from 'react'; import { DataView } from '@kbn/data-views-plugin/public'; @@ -21,7 +21,6 @@ export interface Props { onFiltersUpdated?: (filters: Filter[]) => void; className?: string; indexPatterns: DataView[]; - intl: InjectedIntl; timeRangeForSuggestionsOverride?: boolean; filtersForSuggestions?: Filter[]; hiddenPanelOptions?: FilterItemsProps['hiddenPanelOptions']; diff --git a/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts b/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts index b532a79df7d6b..14aecc3fe4bf2 100644 --- a/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts +++ b/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts @@ -14,6 +14,12 @@ import { } from '@kbn/visualizations-plugin/common'; import { TableVisParams } from '../../../common'; +enum RowHeightMode { + auto = 'auto', + single = 'single', + custom = 'custom', +} + const getColumns = ( params: TableVisParams, metrics: string[], @@ -48,8 +54,8 @@ const getRowHeight = ( ): Pick => { const { autoFitRowToContent } = params; return { - rowHeight: autoFitRowToContent ? 'auto' : 'single', - headerRowHeight: autoFitRowToContent ? 'auto' : 'single', + rowHeight: autoFitRowToContent ? RowHeightMode.auto : RowHeightMode.single, + headerRowHeight: autoFitRowToContent ? RowHeightMode.auto : RowHeightMode.single, }; }; diff --git a/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts b/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts index 61b7ea3789837..f4974cbd40b68 100644 --- a/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts +++ b/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts @@ -190,13 +190,19 @@ export interface ColumnState { palette?: PaletteOutput; } +enum RowHeightMode { + auto = 'auto', + single = 'single', + custom = 'custom', +} + export interface TableVisConfiguration { columns: ColumnState[]; layerId: string; layerType: 'data'; sorting?: SortingState; - rowHeight?: 'auto' | 'single' | 'custom'; - headerRowHeight?: 'auto' | 'single' | 'custom'; + rowHeight?: RowHeightMode; + headerRowHeight?: RowHeightMode; rowHeightLines?: number; headerRowHeightLines?: number; paging?: PagingState; diff --git a/src/plugins/visualizations/public/visualize_app/components/visualize_top_nav.tsx b/src/plugins/visualizations/public/visualize_app/components/visualize_top_nav.tsx index 17600cfd23146..13f941f01bbe7 100644 --- a/src/plugins/visualizations/public/visualize_app/components/visualize_top_nav.tsx +++ b/src/plugins/visualizations/public/visualize_app/components/visualize_top_nav.tsx @@ -15,6 +15,7 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { switchMap } from 'rxjs'; import { getManagedContentBadge } from '@kbn/managed-content-badge'; +import { InjectedIntl, injectI18n } from '@kbn/i18n-react'; import type { VisualizeServices, VisualizeAppState, @@ -60,7 +61,7 @@ const TopNav = ({ embeddableId, onAppLeave, eventEmitter, -}: VisualizeTopNavProps) => { +}: VisualizeTopNavProps & { intl: InjectedIntl }) => { const { services } = useKibana(); const { TopNavMenu } = services.navigation.ui; const { setHeaderActionMenu, visualizeCapabilities } = services; @@ -380,4 +381,4 @@ const TopNav = ({ ) : null; }; -export const VisualizeTopNav = memo(TopNav); +export const VisualizeTopNav = injectI18n(memo(TopNav)); diff --git a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx index 6cbe7864031aa..bd28304b4a3bb 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx +++ b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx @@ -410,6 +410,7 @@ export const getTopNavConfig = ( }, isDirty: hasUnappliedChanges || hasUnsavedChanges, showPublicUrlSwitch, + toasts: toastNotifications, }); } }, diff --git a/test/api_integration/apis/search/bsearch.ts b/test/api_integration/apis/search/bsearch.ts index 96b4bbbf622cf..fc0cc2135aca2 100644 --- a/test/api_integration/apis/search/bsearch.ts +++ b/test/api_integration/apis/search/bsearch.ts @@ -402,7 +402,8 @@ export default function ({ getService }: FtrProviderContext) { }); }); - describe('esql', () => { + // FLAKY: https://github.com/elastic/kibana/issues/181090 + describe.skip('esql', () => { it(`should return request meta`, async () => { const resp = await supertest .post(`/internal/bsearch`) diff --git a/test/examples/discover_customization_examples/customizations.ts b/test/examples/discover_customization_examples/customizations.ts index 33aeae98d7154..6d0d223a06cfe 100644 --- a/test/examples/discover_customization_examples/customizations.ts +++ b/test/examples/discover_customization_examples/customizations.ts @@ -20,6 +20,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const dataGrid = getService('dataGrid'); + const retry = getService('retry'); const defaultSettings = { defaultIndex: 'logstash-*' }; describe('Customizations', () => { @@ -61,13 +62,15 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await testSubjects.click('logsViewSelectorButton'); await testSubjects.click('logsViewSelectorOption-ASavedSearch'); await PageObjects.header.waitUntilLoadingHasFinished(); - const { title, description } = await PageObjects.common.getSharedItemTitleAndDescription(); - const expected = { - title: 'A Saved Search', - description: 'A Saved Search Description', - }; - expect(title).to.eql(expected.title); - expect(description).to.eql(expected.description); + await retry.try(async () => { + const { title, description } = await PageObjects.common.getSharedItemTitleAndDescription(); + const expected = { + title: 'A Saved Search', + description: 'A Saved Search Description', + }; + expect(title).to.eql(expected.title); + expect(description).to.eql(expected.description); + }); }); it('Search bar Prepend Filters exists and should apply filter properly', async () => { diff --git a/test/functional/apps/discover/group3/_lens_vis.ts b/test/functional/apps/discover/group3/_lens_vis.ts index e1064ac59c065..a01760da64658 100644 --- a/test/functional/apps/discover/group3/_lens_vis.ts +++ b/test/functional/apps/discover/group3/_lens_vis.ts @@ -169,6 +169,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, changeTimestampField: `--- I don't want to use the time filter ---`, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await checkNoVis(defaultTotalCount); await dataViews.editFromSearchBar({ newName: 'logs', newTimeField: '@timestamp' }); diff --git a/test/functional/apps/discover/group3/_panels_toggle.ts b/test/functional/apps/discover/group3/_panels_toggle.ts index f2cc179b58fa3..cbac15a3e45de 100644 --- a/test/functional/apps/discover/group3/_panels_toggle.ts +++ b/test/functional/apps/discover/group3/_panels_toggle.ts @@ -211,6 +211,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: false, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); }); @@ -259,6 +260,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: false, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.discover.selectTextBaseLang(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); }); diff --git a/test/functional/apps/discover/group3/_sidebar.ts b/test/functional/apps/discover/group3/_sidebar.ts index 2605f2bf93559..aac4bd60933f0 100644 --- a/test/functional/apps/discover/group3/_sidebar.ts +++ b/test/functional/apps/discover/group3/_sidebar.ts @@ -645,6 +645,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); diff --git a/test/functional/apps/discover/group4/_adhoc_data_views.ts b/test/functional/apps/discover/group4/_adhoc_data_views.ts index 4a25441ad531f..ce58e6938e351 100644 --- a/test/functional/apps/discover/group4/_adhoc_data_views.ts +++ b/test/functional/apps/discover/group4/_adhoc_data_views.ts @@ -63,6 +63,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); const first = await PageObjects.discover.getCurrentDataViewId(); await PageObjects.discover.addRuntimeField( @@ -145,6 +146,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); // trigger data view id update @@ -243,6 +245,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await filterBar.addFilter({ field: 'nestedField.child', operation: 'is', diff --git a/test/functional/apps/discover/group4/_data_view_edit.ts b/test/functional/apps/discover/group4/_data_view_edit.ts index 381165d1d64f8..c2403cf144740 100644 --- a/test/functional/apps/discover/group4/_data_view_edit.ts +++ b/test/functional/apps/discover/group4/_data_view_edit.ts @@ -80,6 +80,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); + await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.discover.getHitCountInt()).to.be(2); @@ -93,6 +94,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: false, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await retry.try(async () => { expect(await PageObjects.discover.getHitCountInt()).to.be(1); diff --git a/test/functional/apps/discover/group4/_field_list_new_fields.ts b/test/functional/apps/discover/group4/_field_list_new_fields.ts index b523aa433db6e..7fb3e51be7658 100644 --- a/test/functional/apps/discover/group4/_field_list_new_fields.ts +++ b/test/functional/apps/discover/group4/_field_list_new_fields.ts @@ -59,6 +59,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); + await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.discover.getHitCountInt()).to.be(1); @@ -106,6 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); + await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.discover.getHitCountInt()).to.be(1); diff --git a/test/functional/apps/discover/group4/_new_search.ts b/test/functional/apps/discover/group4/_new_search.ts index 6ca0b964fa33d..265602db217e2 100644 --- a/test/functional/apps/discover/group4/_new_search.ts +++ b/test/functional/apps/discover/group4/_new_search.ts @@ -67,8 +67,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); + await PageObjects.discover.waitUntilSearchingHasFinished(); await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'css' }); await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); await queryBar.setQuery('bytes > 100'); await queryBar.submitQuery(); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/services/selectable.ts b/test/functional/services/selectable.ts index ce36da946afb3..cab972e9620c0 100644 --- a/test/functional/services/selectable.ts +++ b/test/functional/services/selectable.ts @@ -50,9 +50,7 @@ export class SelectableService extends FtrService { `selectableBodyTestSubjectId: ${selectableBodyTestSubjectId}, textsToSelect: ${textsToSelect}` ); - // Open the selectable - await this.testSubjects.click(buttonTestSubjectId); - await this.common.sleep(500); + await this.openIfClosed(buttonTestSubjectId, selectableBodyTestSubjectId); const selectableBodyContainer = await this.testSubjects.find(selectableBodyTestSubjectId); const listContainer = await selectableBodyContainer.findByClassName('euiSelectableList'); @@ -86,6 +84,40 @@ export class SelectableService extends FtrService { public async clearSelection(buttonTestSubjectId: string, selectableBodyTestSubjectId: string) { return this.selectOnlyOptionsWithText(buttonTestSubjectId, selectableBodyTestSubjectId, []); } + + public async searchAndSelectOption( + buttonTestSubjectId: string, + selectableBodyTestSubjectId: string, + searchInputTestSubjectId: string, + searchText: string, + optionText: string + ) { + await this.openIfClosed(buttonTestSubjectId, selectableBodyTestSubjectId); + + // Clear and set search text + await this.testSubjects.setValue(searchInputTestSubjectId, searchText, { + clearWithKeyboard: true, + typeCharByChar: true, + }); + await this.common.sleep(500); + + // Select options + return this.selectOnlyOptionsWithText(buttonTestSubjectId, selectableBodyTestSubjectId, [ + optionText, + ]); + } + + private async openIfClosed(buttonTestSubjectId: string, selectableBodyTestSubjectId: string) { + // Open the selectable if `selectableBodyTestSubjectId` doesn't exist + const isSelectableOpen = await this.testSubjects.exists(selectableBodyTestSubjectId, { + timeout: 500, + }); + + if (!isSelectableOpen) { + await this.testSubjects.click(buttonTestSubjectId); + await this.common.sleep(500); + } + } } const screenReaderOptionText = 'To check this option, press Enter.'; diff --git a/test/plugin_functional/plugins/kbn_sample_panel_action/kibana.jsonc b/test/plugin_functional/plugins/kbn_sample_panel_action/kibana.jsonc index 8c52ce4f7e2b6..94944389f81e7 100644 --- a/test/plugin_functional/plugins/kbn_sample_panel_action/kibana.jsonc +++ b/test/plugin_functional/plugins/kbn_sample_panel_action/kibana.jsonc @@ -13,8 +13,6 @@ "uiActions", "embeddable" ], - "requiredBundles": [ - "kibanaReact" - ] + "requiredBundles": [] } } diff --git a/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx b/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx index e35e10b4808b0..aa92d75fc0c13 100644 --- a/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx +++ b/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx @@ -12,7 +12,7 @@ import React from 'react'; import { IEmbeddable } from '@kbn/embeddable-plugin/public'; import { createAction } from '@kbn/ui-actions-plugin/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; export const SAMPLE_PANEL_ACTION = 'samplePanelAction'; @@ -29,7 +29,9 @@ export function createSamplePanelAction(getStartServices: CoreSetup['getStartSer if (!embeddable) { return; } - const openFlyout = (await getStartServices())[0].overlays.openFlyout; + const coreStart = (await getStartServices())[0]; + const { overlays, ...startServices } = coreStart; + const openFlyout = overlays.openFlyout; openFlyout( toMountPoint( @@ -41,7 +43,8 @@ export function createSamplePanelAction(getStartServices: CoreSetup['getStartSer

This is a sample action

-
+ , + startServices ), { 'data-test-subj': 'samplePanelActionFlyout', diff --git a/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json b/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json index a3fe79437f30d..506a7dba6fd16 100644 --- a/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json +++ b/test/plugin_functional/plugins/kbn_sample_panel_action/tsconfig.json @@ -16,6 +16,6 @@ "@kbn/core", "@kbn/ui-actions-plugin", "@kbn/embeddable-plugin", - "@kbn/kibana-react-plugin", + "@kbn/react-kibana-mount", ] } diff --git a/tsconfig.base.json b/tsconfig.base.json index b47f8a14b2729..e7ece2e877697 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1286,8 +1286,8 @@ "@kbn/repo-source-classifier-cli/*": ["packages/kbn-repo-source-classifier-cli/*"], "@kbn/reporting-common": ["packages/kbn-reporting/common"], "@kbn/reporting-common/*": ["packages/kbn-reporting/common/*"], - "@kbn/reporting-example-plugin": ["x-pack/examples/reporting_example"], - "@kbn/reporting-example-plugin/*": ["x-pack/examples/reporting_example/*"], + "@kbn/reporting-csv-share-panel": ["packages/kbn-reporting/get_csv_panel_actions"], + "@kbn/reporting-csv-share-panel/*": ["packages/kbn-reporting/get_csv_panel_actions/*"], "@kbn/reporting-export-types-csv": ["packages/kbn-reporting/export_types/csv"], "@kbn/reporting-export-types-csv/*": ["packages/kbn-reporting/export_types/csv/*"], "@kbn/reporting-export-types-csv-common": ["packages/kbn-reporting/export_types/csv_common"], @@ -1320,6 +1320,8 @@ "@kbn/rison/*": ["packages/kbn-rison/*"], "@kbn/rollup-plugin": ["x-pack/plugins/rollup"], "@kbn/rollup-plugin/*": ["x-pack/plugins/rollup/*"], + "@kbn/router-to-openapispec": ["packages/kbn-router-to-openapispec"], + "@kbn/router-to-openapispec/*": ["packages/kbn-router-to-openapispec/*"], "@kbn/router-utils": ["packages/kbn-router-utils"], "@kbn/router-utils/*": ["packages/kbn-router-utils/*"], "@kbn/routing-example-plugin": ["examples/routing_example"], diff --git a/versions.json b/versions.json index 41158ed17b5a6..7407634eb82fe 100644 --- a/versions.json +++ b/versions.json @@ -2,14 +2,14 @@ "notice": "This file is not maintained outside of the main branch and should only be used for tooling.", "versions": [ { - "version": "8.14.0", + "version": "8.15.0", "branch": "main", "currentMajor": true, "currentMinor": true }, { - "version": "8.13.3", - "branch": "8.13", + "version": "8.14.0", + "branch": "8.14", "currentMajor": true, "previousMinor": true }, diff --git a/x-pack/examples/reporting_example/README.md b/x-pack/examples/reporting_example/README.md deleted file mode 100755 index 186a3fa37f93b..0000000000000 --- a/x-pack/examples/reporting_example/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Example Reporting integration! - -Use this example code to understand how to add a "Generate Report" button to a -Kibana page. This simple example shows that the end-to-end functionality of -generating a screenshot report of a page just requires you to render a React -component that you import from the Reportinng plugin. - -A "reportable" Kibana page is one that has an **alternate version to show the data in a "screenshot-friendly" way**. The alternate version can be reached at a variation of the page's URL that the App team builds. - -A "screenshot-friendly" page has **all interactive features turned off**. These are typically notifications, popups, tooltips, controls, autocomplete libraries, etc. - -Turning off these features **keeps glitches out of the screenshot**, and makes the server-side headless browser **run faster and use less RAM**. - -The URL that Reporting captures is controlled by the application, is a part of -a "jobParams" object that gets passed to the React component imported from -Reporting. The job params give the app control over the end-resulting report: - -- Layout - - Page dimensions - - DOM attributes to select where the visualization container(s) is/are. The App team must add the attributes to DOM elements in their app. - - DOM events that the page fires off and signals when the rendering is done. The App team must implement triggering the DOM events around rendering the data in their app. -- Export type definition - - Processes the jobParams into output data, which is stored in Elasticsearch in the Reporting system index. - - Export type definitions are registered with the Reporting plugin at setup time. - -The existing export type definitions are PDF, PNG, and CSV. They should be -enough for nearly any use case. - -If the existing options are too limited for a future use case, the AppServices -team can assist the App team to implement a custom export type definition of -their own, and register it using the Reporting plugin API **(documentation coming soon)**. - ---- diff --git a/x-pack/examples/reporting_example/common/index.ts b/x-pack/examples/reporting_example/common/index.ts deleted file mode 100644 index 991ec30a03b14..0000000000000 --- a/x-pack/examples/reporting_example/common/index.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. - */ - -export const PLUGIN_ID = 'reportingExample'; -export const PLUGIN_NAME = 'reportingExample'; - -export type { MyForwardableState } from './types'; - -export type { ReportingExampleLocatorParams } from './locator'; -export { REPORTING_EXAMPLE_LOCATOR_ID, ReportingExampleLocatorDefinition } from './locator'; diff --git a/x-pack/examples/reporting_example/common/locator.ts b/x-pack/examples/reporting_example/common/locator.ts deleted file mode 100644 index 17ae845178c81..0000000000000 --- a/x-pack/examples/reporting_example/common/locator.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 { SerializableRecord } from '@kbn/utility-types'; -import type { LocatorDefinition } from '@kbn/share-plugin/public'; -import { PLUGIN_ID } from '.'; -import type { MyForwardableState } from '../public/types'; - -export const REPORTING_EXAMPLE_LOCATOR_ID = 'REPORTING_EXAMPLE_LOCATOR_ID'; - -export type ReportingExampleLocatorParams = SerializableRecord; - -export class ReportingExampleLocatorDefinition implements LocatorDefinition<{}> { - public readonly id = REPORTING_EXAMPLE_LOCATOR_ID; - - migrations = { - '1.0.0': (state: {}) => ({ ...state, migrated: true }), - }; - - public readonly getLocation = async (params: MyForwardableState) => { - const path = Boolean(params.captureTest) ? '/captureTest' : '/'; - return { - app: PLUGIN_ID, - path, - state: params, - }; - }; -} diff --git a/x-pack/examples/reporting_example/kibana.jsonc b/x-pack/examples/reporting_example/kibana.jsonc deleted file mode 100644 index 8fbcac88dde3a..0000000000000 --- a/x-pack/examples/reporting_example/kibana.jsonc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "plugin", - "id": "@kbn/reporting-example-plugin", - "owner": "@elastic/appex-sharedux", - "description": "Example integration code for applications to feature reports.", - "plugin": { - "id": "reportingExample", - "server": false, - "browser": true, - "requiredPlugins": [ - "reporting", - "developerExamples", - "kibanaReact", - "navigation", - "screenshotMode", - "share" - ] - } -} diff --git a/x-pack/examples/reporting_example/public/application.tsx b/x-pack/examples/reporting_example/public/application.tsx deleted file mode 100644 index fcae28dfd298b..0000000000000 --- a/x-pack/examples/reporting_example/public/application.tsx +++ /dev/null @@ -1,40 +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 ReactDOM from 'react-dom'; -import { Router, Routes, Route } from '@kbn/shared-ux-router'; -import { AppMountParameters, CoreStart } from '@kbn/core/public'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import { CaptureTest } from './containers/capture_test'; -import { Main } from './containers/main'; -import { ApplicationContextProvider } from './application_context'; -import { SetupDeps, StartDeps, MyForwardableState } from './types'; -import { ROUTES } from './constants'; - -export const renderApp = ( - coreStart: CoreStart, - deps: Omit, - { appBasePath, element, history }: AppMountParameters, // FIXME: appBasePath is deprecated - forwardedParams: MyForwardableState -) => { - ReactDOM.render( - - - - - } /> -
} /> - - - - , - element - ); - - return () => ReactDOM.unmountComponentAtNode(element); -}; diff --git a/x-pack/examples/reporting_example/public/application_context.tsx b/x-pack/examples/reporting_example/public/application_context.tsx deleted file mode 100644 index 4ec16808f3f42..0000000000000 --- a/x-pack/examples/reporting_example/public/application_context.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useContext, createContext, FC } from 'react'; - -import type { MyForwardableState } from './types'; - -interface ContextValue { - forwardedState?: MyForwardableState; -} - -const ApplicationContext = createContext(undefined); - -export const ApplicationContextProvider: FC<{ forwardedState: ContextValue['forwardedState'] }> = ({ - forwardedState, - children, -}) => { - return ( - {children} - ); -}; - -export const useApplicationContext = (): ContextValue => { - const ctx = useContext(ApplicationContext); - if (!ctx) { - throw new Error('useApplicationContext called outside of ApplicationContext!'); - } - return ctx; -}; diff --git a/x-pack/examples/reporting_example/public/components/test_image_a.tsx b/x-pack/examples/reporting_example/public/components/test_image_a.tsx deleted file mode 100644 index 1ce94f35fdd29..0000000000000 --- a/x-pack/examples/reporting_example/public/components/test_image_a.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FunctionComponent } from 'react'; -import React from 'react'; -import { VIS } from '../constants'; - -type Props = React.DetailedHTMLProps, HTMLImageElement>; - -export const TestImageA: FunctionComponent = ({ - width = VIS.width, - height = VIS.height, - ...restProps -}) => { - return ( - Test image - ); -}; - -const testImage = `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vP32O7LIYkuW7tdLVf/tystK65Ny8M4778hVf7+69CMWGDJEll7629eiD3T2uksbMUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEGlwgrEF66y03iDbx7K3VG6TrrLtB6QzSTz/9zL51qeUM0u40SLX4zDPPJP+86TpXky+9yNXXWLt0dqXe98RjDxab2unxZll21iDV13/a6WfK8KOOLb6VYbvsJHvvtbvrbX388ccy7/wLlWpos/rmG0eX1rszuOOOu2SrrbcVPW6WWnIJueSvFxXPEO7JBuk//3mrbL7FVqW3se02v5eDDtyvtK6Dzl532ZNYQQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQaWIAGadDO0csJX3TRxaVq9TRIF/rJgrLiikOLNfTsztGjrys20EpFC4PjjztaNv71hvauusbt0CBVmP/+738yccKE4uVr64IyG0U2SLWsfofta6+/LnPPNVfppzR6g7Sz1116AwwQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgQYXaPgG6UsvvSwPPfxI4dKjb8sUU0whs8wyiyy91BJdnkWpl1h94IEH5eFHHi1c+ncOWXSRnxabZPfc+x957733i7uld+9esvJKK3X4bs/nnn9ennn6WXnzrbeK32U5a+Fn/nieH5U1svL9GtEg3WbrLeXggw4oldZLuq619q/KzvT87eabyvAjD5P77ntA3v3vf0vPHTJkPplj9q8vcZzufP31N+SRRx9LqzJL4QzUPn36yKuvvS4HH3KYvPXW26XHTjrxWOnff+rid57ONdf/le7XwcSJEwuWD8nzL7xQtJvnxz+Sn/50IRk8eLqy5+Ur+voeKfi/8cabxUbvzDPNWNwXCy+8kPTq1St/etV1fQ1PPvmU3H3PvYV9P60stNBPimcsVzuD9MabbpZx476+HK7u69VXW7XDz6h1X99627/kvf+9J8N227NUQ8/oPfSQg4rrSy25uAwaNEhefvkVeaLwOtNN759mmmnl/gcekP8UvnP2//7v/2TNNVaXBx98SN4qXE433ZYpXMpWL//bWYNUL397//0PFi9Z/dPCe19kkYWLvw9p+7Ts6j0//fQz8sKLL6WnF85eXVymnHJK+ectt8mjjz4qp552ZumxlVYaKhttuEFhX01WtNPvb+3sdZc2+mbQnd/b3Gy5ZZcumE0j/yt431PY36mJvNhii3T5e5+/DtYRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgVygYRukn3z6qey40zDRy35Wuu2+2zDZY/dhlR6Ss84+Vw47fHiHx84641S5+JJL5fbb7yg99sB9d8tMhcad3l597TXZf/+D5ZZbbyuu5/9acegKcvRRR8iss86SPySTokGqP0QbVkcd/fVlYnV9qy23kMMOPUhOOnmEHH/CyXpX8bbl734rhx92cFotLtVALdJth+23lTFjxsgFF/453dVhuduuu8iee+xaul8baltvu4O8aJpq6UG9pPIF558tP/jBHOmu4nLs2LFy8KGHy5///O0ZtfYJut3w4YfJkkssbu/udHz33ffIdjvsXGyY2SftuMN2xYbvKSNOLd2dvoNU7/jxvAuUnYH7xmsvlp7X3X297PIrVTRIBS8tXCJ32UJjT88i1mMh3fR7Y88485xSk1svpzvy8r8W388114xKT5MbrrtGhgyZv2KDVPftttvvVHpuGhxy8AGy9e+3TKvFZbX3rE849rgTxXqdc/YZxf954KeLLFFWJ195/tknio1U3Q+VXnd6fj2/t7mZWl47arT85eJLUtnicvrpB8uIU06U5Zdbtux+VhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACB7gg0ZINUm3ib/3YruavQGKt200aeNvTs7R9XXyM77Fi5carP0yaLnpmWbqlBqmdr/mq9DYtnyKXHKi1/+MM5ZdQ1V8m0005b9vCkaJB+9dVXsspqa5a+51R/oDZ511prDXn++Rdk+aGrlF6Dns14/3/uKq3rIG/qXTf6arn88itqbpC+8sqrsvY665V5lf2Awop6/uOqK8qapEcOP0ZOP+Os/Kkd1q8vvJ4FFhjS4X57h77PNX+xTlmj0z6e789aGqT17Ovc0r4GHXfWINWzel959dXS07vbIC1t2Mng7DNPkzXX/Hnp0Z5skNb7e5s3SJdeeim5887yY7n0BguD9Dtr72OMAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCNQq0JAN0i223Fpuuumfpfcw9dT95RdrrSl6dtq1144u3a+DYwpndG666SbF+/Synssst2LZ47rt4ov/TPSxSmdBalNRm4vnX/AnOfCgQ0vb6n165p7eLrn08rJtjz1muPxm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vHp+b7syo0GadFkigAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAhEBYg1RfTDqL7bQ/niIrr7yiLLX0ChUbNZVeuH6Hon6XYrpps+bCP11UPKvzrbfeTncXl3q51z1231WWXrr8UqTpSdok1e9EvPPuu+WRhx+Vnyy0oCyz1FLF73H83ZbbVGyQ6rZ6mVBt1px19rkdGlJ6Ft2vf72B/H6r30nv3r3TjyotJ1WDVN/rT36ygCyy8MKy5po/L/ve09IPLwyuv+FG2er329m7xH7/ZNkD36xcd/0NcvjhR5XtI/2+St0u3fTsVG2oXXb5yLKzP/Xx5ZZbRnbecXtZaqny/aANrauvGVVocJ8hTz31dCpVXGpjdJVVVpI/7LOXTFv43tJabu+++26xWT76uuslHQt6Vurxxx1V/B7Uww4fXirzpwvOLR57eseP512g9Jr12HzmqcdKz6t3X+t708b9aaefUaqtRfUSxb/dfFO55NLLRc/OTbejC83jzb5pHqf7dLnLsN3lyr99+926/7z5epnnxz+S/AxSvezygQf+QXbbba/Smcz6XvQs360Kx2L6rlxb+4MPPpADDzq0dOatPn+lFVeU7bbbWp5//oWyyzHbBqnW0G2POPJoufSykbak3HDdNTJkyPydvu705Hp+b7syyxukuu/vuvO29CNZIoAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALdEghtkKafPOKUE2W9dddJq66lNkf++9//yvvvf1BsDmqDbcCAAVVr6qV233zrLZlpxhmlb9++pefqmYPaNLO3p554uEOjTps8eqbpO++8U/yZehlT+52fafsXXnix+L2oun5y4Ts5r712dHpI7vz3rcXvjCzdMYkH+fek6o977pnHZaqppuryJ2tT7L333pcBAwfI9IMHV2zCqunbBY8PCy5ac5ZZZi58N+WUXdZW87fffls+L5wJOmfhOzQ7+w7aLgt984Q33nizeAZt+s7PWrfr7Hm17ut8ez0u3333v4Uzlj+T731vBvf7yutXWtfG/5tvvVlwnFP69OnYpM+3GT9+grz19lsy80wz1/R8u336Hfpq4lfFM6z79etnH+5yXM/vbZdFeQICCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggECBQd4P00MOPlLPPPq/iS4hskFb8AZ3cqQ3KQw47onSWoV5S97hjjyo28saOHVs4M/Q8OfqY40pb6yVHH3mo/PtFSw/WMFh51TU6nCGZNvsuGqTa3Bt5xZXFBu8+++5fdtarXkr1iMMPSS+HJQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIFATqbpDqGWZffjm2ImK/fn0LZ6z1qfjYpLxTz/hceNHyy73qz1tggSHy2GOPd/jRf9h3b9lpx/LL0nZ4UpU7erpBqpev1deQ37Txe8ftt3wnZzXmP5t1BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBpZoO4GaaO+qVGjr5dttt2hy5e39167F5qj21f8PtEuN/7mCQcceIg8+eRTFZ9+2qmniF4OeFLe9Lswjzr62A4/4q8X/0mWX27ZDvdzBwIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALtLtByDVLdoXpm5ZlnnSPX33Cj6Hdgptscs88uQ4bMJ7/73W9lySUWT3c37fLCP10kI0deWfy+1EGDBsqPfvwj2arw3oYMmb9p3xMvHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFJKdCSDVIL9v77H8gnn34i35thhuJ3kdrHGCOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQHsJtHyDtL12J+8WAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg0FICNEhbanfyZhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJoADdJqOjyGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAItJUCDtKV2J28GAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSqCdAgrabDYwgg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`; diff --git a/x-pack/examples/reporting_example/public/containers/capture_test.scss b/x-pack/examples/reporting_example/public/containers/capture_test.scss deleted file mode 100644 index 4ecd869544b32..0000000000000 --- a/x-pack/examples/reporting_example/public/containers/capture_test.scss +++ /dev/null @@ -1,10 +0,0 @@ -.reportingExample { - &__captureContainer { - display: flex; - flex-direction: column; - align-items: center; - - margin-top: $euiSizeM; - margin-bottom: $euiSizeM; - } -} diff --git a/x-pack/examples/reporting_example/public/containers/capture_test.tsx b/x-pack/examples/reporting_example/public/containers/capture_test.tsx deleted file mode 100644 index 5ff5a1d6a7a03..0000000000000 --- a/x-pack/examples/reporting_example/public/containers/capture_test.tsx +++ /dev/null @@ -1,90 +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 { FunctionComponent } from 'react'; -import React from 'react'; -import { useHistory } from 'react-router-dom'; -import { parsePath } from 'history'; -import { - EuiTabbedContent, - EuiTabbedContentTab, - EuiSpacer, - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiPage, - EuiPageHeader, - EuiPageBody, - EuiPageSection, -} from '@elastic/eui'; - -import { TestImageA } from '../components'; -import { useApplicationContext } from '../application_context'; -import { MyForwardableState } from '../types'; -import { ROUTES } from '../constants'; - -import './capture_test.scss'; - -const ItemsContainer: FunctionComponent<{ count: string }> = ({ count, children }) => ( -
- {children} -
-); - -const tabs: Array = [ - { - id: 'A', - name: 'Test A', - content: ( - - - - - - - ), - }, -]; - -export const CaptureTest: FunctionComponent = () => { - const { forwardedState } = useApplicationContext(); - const tabToRender = forwardedState?.captureTest; - const history = useHistory(); - return ( - - - - - - - - Back to main - - - - - - - - tab.id === tabToRender) : undefined - } - /> - - - - ); -}; diff --git a/x-pack/examples/reporting_example/public/containers/main.tsx b/x-pack/examples/reporting_example/public/containers/main.tsx deleted file mode 100644 index 5630976786410..0000000000000 --- a/x-pack/examples/reporting_example/public/containers/main.tsx +++ /dev/null @@ -1,378 +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 { parsePath } from 'history'; -import moment from 'moment'; -import React, { useEffect, useState } from 'react'; -import * as Rx from 'rxjs'; -import { takeWhile } from 'rxjs'; - -import { - EuiButton, - EuiCard, - EuiCodeBlock, - EuiContextMenu, - EuiContextMenuProps, - EuiFlexGroup, - EuiFlexItem, - EuiHorizontalRule, - EuiIcon, - EuiLink, - EuiPage, - EuiPageBody, - EuiPageHeader, - EuiPageSection, - EuiPopover, - EuiSpacer, - EuiText, - EuiTitle, -} from '@elastic/eui'; -import { I18nProvider } from '@kbn/i18n-react'; -import { JobParamsPDFDeprecated, JobParamsPDFV2 } from '@kbn/reporting-export-types-pdf-common'; -import { JobParamsPNGV2 } from '@kbn/reporting-export-types-png-common'; -import type { ReportingStart } from '@kbn/reporting-plugin/public'; -import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/public'; -import { BrowserRouter as Router, useHistory } from 'react-router-dom'; - -import { REPORTING_EXAMPLE_LOCATOR_ID } from '../../common'; -import { useApplicationContext } from '../application_context'; -import { ROUTES } from '../constants'; -import type { MyForwardableState } from '../types'; - -interface ReportingExampleAppProps { - basename: string; - reporting: ReportingStart; - screenshotMode: ScreenshotModePluginSetup; -} - -const sourceLogos = ['Beats', 'Cloud', 'Logging', 'Kibana']; - -export const Main = ({ basename, reporting, screenshotMode }: ReportingExampleAppProps) => { - const history = useHistory(); - const { forwardedState } = useApplicationContext(); - useEffect(() => { - // eslint-disable-next-line no-console - console.log('forwardedState', forwardedState); - }, [forwardedState]); - - // Context Menu - const [isPopoverOpen, setPopover] = useState(false); - const onButtonClick = () => { - setPopover(!isPopoverOpen); - }; - - const closePopover = () => { - setPopover(false); - }; - - // Async Logos - const [logos, setLogos] = useState([]); - - useEffect(() => { - Rx.timer(2200) - .pipe(takeWhile(() => logos.length < sourceLogos.length)) - .subscribe(() => { - setLogos([...sourceLogos.slice(0, logos.length + 1)]); - }); - }); - - const getPDFJobParamsDefault = (): JobParamsPDFDeprecated => { - return { - layout: { id: 'preserve_layout' }, - relativeUrls: ['/app/reportingExample#/intended-visualization'], - objectType: 'develeloperExample', - title: 'Reporting Developer Example', - browserTimezone: 'UTC', - version: '1', - }; - }; - - const getPDFJobParamsDefaultV2 = (): JobParamsPDFV2 => { - return { - version: '8.0.0', - layout: { id: 'preserve_layout' }, - locatorParams: [ - { id: REPORTING_EXAMPLE_LOCATOR_ID, version: '0.5.0', params: { myTestState: {} } }, - ], - objectType: 'develeloperExample', - title: 'Reporting Developer Example', - browserTimezone: moment.tz.guess(), - }; - }; - - const getPNGJobParamsDefaultV2 = (): JobParamsPNGV2 => { - return { - version: '8.0.0', - layout: { id: 'preserve_layout' }, - locatorParams: { - id: REPORTING_EXAMPLE_LOCATOR_ID, - version: '0.5.0', - params: { myTestState: {} }, - }, - objectType: 'develeloperExample', - title: 'Reporting Developer Example', - browserTimezone: moment.tz.guess(), - }; - }; - - const getCaptureTestPNGJobParams = (): JobParamsPNGV2 => { - return { - version: '8.0.0', - layout: { id: 'preserve_layout' }, - locatorParams: { - id: REPORTING_EXAMPLE_LOCATOR_ID, - version: '0.5.0', - params: { captureTest: 'A' } as MyForwardableState, - }, - objectType: 'develeloperExample', - title: 'Reporting Developer Example', - browserTimezone: moment.tz.guess(), - }; - }; - - const getCaptureTestPDFJobParams = (print: boolean) => (): JobParamsPDFV2 => { - return { - version: '8.0.0', - layout: { - id: print ? 'print' : 'preserve_layout', - dimensions: { - // Magic numbers based on height of components not rendered on this screen :( - height: 2400, - width: 1822, - }, - }, - locatorParams: [ - { - id: REPORTING_EXAMPLE_LOCATOR_ID, - version: '0.5.0', - params: { captureTest: 'A' } as MyForwardableState, - }, - ], - objectType: 'develeloperExample', - title: 'Reporting Developer Example', - browserTimezone: moment.tz.guess(), - }; - }; - - const panels: EuiContextMenuProps['panels'] = [ - { - id: 0, - items: [ - { name: 'PDF Reports', icon: 'document', panel: 1 }, - { name: 'PNG Reports', icon: 'document', panel: 7 }, - { name: 'Capture test', icon: 'document', panel: 8, 'data-test-subj': 'captureTestPanel' }, - ], - }, - { - id: 1, - initialFocusedItemIndex: 1, - title: 'PDF Reports', - items: [ - { name: 'Default layout', icon: 'document', panel: 2 }, - { name: 'Default layout V2', icon: 'document', panel: 4 }, - { name: 'Canvas Layout Option', icon: 'canvasApp', panel: 3 }, - ], - }, - { - id: 8, - initialFocusedItemIndex: 0, - title: 'Capture test', - items: [ - { - name: 'Capture test A - PNG', - icon: 'document', - panel: 9, - 'data-test-subj': 'captureTestPNG', - }, - { - name: 'Capture test A - PDF', - icon: 'document', - panel: 10, - 'data-test-subj': 'captureTestPDF', - }, - { - name: 'Capture test A - PDF print optimized', - icon: 'document', - panel: 11, - 'data-test-subj': 'captureTestPDFPrint', - }, - ], - }, - { - id: 7, - initialFocusedItemIndex: 0, - title: 'PNG Reports', - items: [{ name: 'Default layout V2', icon: 'document', panel: 5 }], - }, - { - id: 2, - title: 'Default layout', - content: ( - - ), - }, - { - id: 3, - title: 'Canvas Layout Option', - content: ( - - ), - }, - { - id: 4, - title: 'Default layout V2', - content: ( - - ), - }, - { - id: 5, - title: 'Default layout V2', - content: ( - - ), - }, - { - id: 9, - title: 'Test A', - content: ( - - ), - }, - { - id: 10, - title: 'Test A', - content: ( - - ), - }, - { - id: 11, - title: 'Test A', - content: ( - - ), - }, - ]; - - return ( - - - - - - -

Reporting Example

-
-
- - -

Example of a Sharing menu using components from Reporting

-
- - - - - - Share - - } - isOpen={isPopoverOpen} - closePopover={closePopover} - panelPaddingSize="none" - anchorPosition="downLeft" - > - - - - - - - Go to capture test - - - - - - - -
- - - {forwardedState ? ( - <> - -

- Forwarded app state -

-
- {JSON.stringify(forwardedState)} - - ) : ( - <> - -

- No forwarded app state found -

-
- {'{}'} - - )} -
- {logos.map((item, index) => ( - - } - title={`Elastic ${item}`} - description="Example of a card's description. Stick to one or two sentences." - onClick={() => {}} - /> - - ))} -
- -

Screenshot Mode is {screenshotMode.isScreenshotMode() ? 'ON' : 'OFF'}!

-
-
-
-
-
-
-
- ); -}; diff --git a/x-pack/examples/reporting_example/public/plugin.ts b/x-pack/examples/reporting_example/public/plugin.ts deleted file mode 100644 index ddc7b90e40fc5..0000000000000 --- a/x-pack/examples/reporting_example/public/plugin.ts +++ /dev/null @@ -1,49 +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 { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; -import { PLUGIN_ID, PLUGIN_NAME, ReportingExampleLocatorDefinition } from '../common'; -import { SetupDeps, StartDeps, MyForwardableState } from './types'; - -export class ReportingExamplePlugin implements Plugin { - public setup(core: CoreSetup, { developerExamples, screenshotMode, share }: SetupDeps): void { - core.application.register({ - id: PLUGIN_ID, - title: PLUGIN_NAME, - visibleIn: [], - async mount(params: AppMountParameters) { - // Load application bundle - const { renderApp } = await import('./application'); - const [coreStart, depsStart] = (await core.getStartServices()) as [ - CoreStart, - StartDeps, - unknown - ]; - // Render the application - return renderApp( - coreStart, - { ...depsStart, screenshotMode, share }, - params, - params.history.location.state as MyForwardableState - ); - }, - }); - - // Show the app in Developer Examples - developerExamples.register({ - appId: 'reportingExample', - title: 'Reporting integration', - description: 'Demonstrate how to put an Export button on a page and generate reports.', - }); - - share.url.locators.create(new ReportingExampleLocatorDefinition()); - } - - public start() {} - - public stop() {} -} diff --git a/x-pack/examples/reporting_example/public/types.ts b/x-pack/examples/reporting_example/public/types.ts deleted file mode 100644 index 9aff6a439ba38..0000000000000 --- a/x-pack/examples/reporting_example/public/types.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; -import { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/public'; -import { SharePluginSetup } from '@kbn/share-plugin/public'; -import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; -import { ReportingStart } from '@kbn/reporting-plugin/public'; -import type { MyForwardableState } from '../common'; - -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface PluginSetup {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface PluginStart {} - -export interface SetupDeps { - developerExamples: DeveloperExamplesSetup; - share: SharePluginSetup; - screenshotMode: ScreenshotModePluginSetup; -} -export interface StartDeps { - navigation: NavigationPublicPluginStart; - reporting: ReportingStart; -} - -export type { MyForwardableState }; diff --git a/x-pack/examples/reporting_example/tsconfig.json b/x-pack/examples/reporting_example/tsconfig.json deleted file mode 100644 index cb91f89dea013..0000000000000 --- a/x-pack/examples/reporting_example/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "target/types" - }, - "include": [ - "index.ts", - "public/**/*.ts", - "public/**/*.tsx", - "server/**/*.ts", - "common/**/*.ts", - "../../../typings/**/*" - ], - "exclude": [ - "target/**/*", - ], - "kbn_references": [ - "@kbn/core", - "@kbn/kibana-react-plugin", - "@kbn/navigation-plugin", - "@kbn/screenshot-mode-plugin", - "@kbn/developer-examples-plugin", - "@kbn/reporting-plugin", - "@kbn/share-plugin", - "@kbn/i18n-react", - "@kbn/utility-types", - "@kbn/shared-ux-router", - "@kbn/reporting-export-types-pdf-common", - "@kbn/reporting-export-types-png-common", - ] -} diff --git a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx index ee5c3229cb713..5077795b620f7 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx @@ -133,8 +133,11 @@ export class TriggersActionsUiExamplePlugin id: 'observabilityCases', columns, useInternalFlyout, - getRenderCellValue: () => (props) => { - const value = props.data.find((d) => d.field === props.columnId)?.value ?? []; + getRenderCellValue: (props: { + data?: Array<{ field: string; value: string }>; + columnId?: string; + }) => { + const value = props.data?.find((d) => d.field === props.columnId)?.value ?? []; if (Array.isArray(value)) { return <>{value.length ? value.join() : '--'}; diff --git a/x-pack/examples/ui_actions_enhanced_examples/kibana.jsonc b/x-pack/examples/ui_actions_enhanced_examples/kibana.jsonc index 33412d3529b47..1da3e4f182875 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/kibana.jsonc +++ b/x-pack/examples/ui_actions_enhanced_examples/kibana.jsonc @@ -22,8 +22,7 @@ "requiredBundles": [ "dashboardEnhanced", "embeddable", - "kibanaUtils", - "kibanaReact" + "kibanaUtils" ] } } diff --git a/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts b/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts index 2cac8f3bac939..fbd74fc581012 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts +++ b/x-pack/examples/ui_actions_enhanced_examples/public/plugin.ts @@ -6,7 +6,7 @@ */ import { createElement as h } from 'react'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { Plugin, CoreSetup, CoreStart } from '@kbn/core/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import { @@ -93,7 +93,8 @@ export class UiActionsEnhancedExamplesPlugin dynamicActionManager: self.managerWithoutEmbeddableSingleButton, triggers: [SAMPLE_APP2_CLICK_TRIGGER], placeContext: {}, - }) + }), + coreStart ), { ownFocus: true, @@ -118,7 +119,8 @@ export class UiActionsEnhancedExamplesPlugin dynamicActionManager: self.managerWithoutEmbeddableSingleButton, triggers: [SAMPLE_APP2_CLICK_TRIGGER], placeContext: { sampleApp2ClickContext }, - }) + }), + coreStart ), { ownFocus: true, @@ -150,7 +152,7 @@ export class UiActionsEnhancedExamplesPlugin }); } - public start(core: CoreStart, plugins: StartDependencies): UiActionsEnhancedExamplesStart { + public start(_core: CoreStart, plugins: StartDependencies): UiActionsEnhancedExamplesStart { const managerWithoutEmbeddable = new UiActionsEnhancedDynamicActionManager({ storage: new UiActionsEnhancedMemoryActionStorage(), isCompatible: async () => true, diff --git a/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json b/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json index ef56838b5deba..6010bece3bd1c 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json +++ b/x-pack/examples/ui_actions_enhanced_examples/tsconfig.json @@ -16,7 +16,6 @@ "kbn_references": [ "@kbn/core", "@kbn/kibana-utils-plugin", - "@kbn/kibana-react-plugin", "@kbn/share-plugin", "@kbn/discover-plugin", "@kbn/dashboard-plugin", @@ -30,5 +29,6 @@ "@kbn/unified-search-plugin", "@kbn/utility-types", "@kbn/presentation-publishing", + "@kbn/react-kibana-mount", ] } diff --git a/x-pack/package.json b/x-pack/package.json index 1717e6f11d1dd..a65aaf142fd25 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -1,6 +1,6 @@ { "name": "x-pack", - "version": "8.14.0", + "version": "8.15.0", "author": "Elastic", "private": true, "license": "Elastic-License", diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx new file mode 100644 index 0000000000000..b0bbd18cb0184 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx @@ -0,0 +1,339 @@ +/* + * Copyright 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, useEffect, useMemo, useState } from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiIcon, + EuiFlexItem, + EuiPageTemplate, + EuiFlexGroup, +} from '@elastic/eui'; + +import { css } from '@emotion/react'; +import { Conversation, Prompt, QuickPrompt } from '../../..'; +import * as i18n from './translations'; +import { useAssistantContext } from '../../assistant_context'; +import { useSettingsUpdater } from './use_settings_updater/use_settings_updater'; +import { + AnonymizationSettings, + ConversationSettings, + EvaluationSettings, + KnowledgeBaseSettings, + QuickPromptSettings, + SystemPromptSettings, +} from '.'; +import { useLoadConnectors } from '../../connectorland/use_load_connectors'; +import { getDefaultConnector } from '../helpers'; +import { useFetchAnonymizationFields } from '../api/anonymization_fields/use_fetch_anonymization_fields'; + +export const CONVERSATIONS_TAB = 'CONVERSATION_TAB' as const; +export const QUICK_PROMPTS_TAB = 'QUICK_PROMPTS_TAB' as const; +export const SYSTEM_PROMPTS_TAB = 'SYSTEM_PROMPTS_TAB' as const; +export const ANONYMIZATION_TAB = 'ANONYMIZATION_TAB' as const; +export const KNOWLEDGE_BASE_TAB = 'KNOWLEDGE_BASE_TAB' as const; +export const EVALUATION_TAB = 'EVALUATION_TAB' as const; + +export type SettingsTabs = + | typeof CONVERSATIONS_TAB + | typeof QUICK_PROMPTS_TAB + | typeof SYSTEM_PROMPTS_TAB + | typeof ANONYMIZATION_TAB + | typeof KNOWLEDGE_BASE_TAB + | typeof EVALUATION_TAB; +interface Props { + conversations: Record; + selectedConversation: Conversation; + setSelectedConversationId: React.Dispatch>; + isFlyoutMode: boolean; +} + +/** + * Modal for overall Assistant Settings, including conversation settings, quick prompts, system prompts, + * anonymization, knowledge base, and evaluation via the `isModelEvaluationEnabled` feature flag. + */ +export const AssistantSettingsManagement: React.FC = React.memo( + ({ + selectedConversation: defaultSelectedConversation, + setSelectedConversationId, + conversations, + isFlyoutMode, + }) => { + const { + actionTypeRegistry, + modelEvaluatorEnabled, + http, + selectedSettingsTab, + setSelectedSettingsTab, + toasts, + } = useAssistantContext(); + + const { data: anonymizationFields } = useFetchAnonymizationFields(); + + // Connector details + const { data: connectors } = useLoadConnectors({ + http, + }); + const defaultConnector = useMemo(() => getDefaultConnector(connectors), [connectors]); + + const [hasPendingChanges, setHasPendingChanges] = useState(false); + + const { + conversationSettings, + setConversationSettings, + knowledgeBase, + quickPromptSettings, + systemPromptSettings, + assistantStreamingEnabled, + setUpdatedAssistantStreamingEnabled, + setUpdatedKnowledgeBaseSettings, + setUpdatedQuickPromptSettings, + setUpdatedSystemPromptSettings, + saveSettings, + conversationsSettingsBulkActions, + updatedAnonymizationData, + setConversationsSettingsBulkActions, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, + resetSettings, + } = useSettingsUpdater( + conversations, + anonymizationFields ?? { page: 0, perPage: 0, total: 0, data: [] } + ); + + // Local state for saving previously selected items so tab switching is friendlier + // Conversation Selection State + const [selectedConversation, setSelectedConversation] = useState( + () => { + return conversationSettings[defaultSelectedConversation.title]; + } + ); + + const onHandleSelectedConversationChange = useCallback((conversation?: Conversation) => { + setSelectedConversation(conversation); + }, []); + + useEffect(() => { + if (selectedConversation != null) { + setSelectedConversation(conversationSettings[selectedConversation.title]); + } + }, [conversationSettings, selectedConversation]); + + // Quick Prompt Selection State + const [selectedQuickPrompt, setSelectedQuickPrompt] = useState(); + const onHandleSelectedQuickPromptChange = useCallback((quickPrompt?: QuickPrompt) => { + setSelectedQuickPrompt(quickPrompt); + }, []); + useEffect(() => { + if (selectedQuickPrompt != null) { + setSelectedQuickPrompt( + quickPromptSettings.find((q) => q.title === selectedQuickPrompt.title) + ); + } + }, [quickPromptSettings, selectedQuickPrompt]); + + // System Prompt Selection State + const [selectedSystemPrompt, setSelectedSystemPrompt] = useState(); + const onHandleSelectedSystemPromptChange = useCallback((systemPrompt?: Prompt) => { + setSelectedSystemPrompt(systemPrompt); + }, []); + useEffect(() => { + if (selectedSystemPrompt != null) { + setSelectedSystemPrompt(systemPromptSettings.find((p) => p.id === selectedSystemPrompt.id)); + } + }, [selectedSystemPrompt, systemPromptSettings]); + + const handleSave = useCallback(() => { + // If the selected conversation is deleted, we need to select a new conversation to prevent a crash creating a conversation that already exists + const isSelectedConversationDeleted = + conversationSettings[defaultSelectedConversation.title] == null; + const newSelectedConversationId: string | undefined = Object.keys(conversationSettings)[0]; + if (isSelectedConversationDeleted && newSelectedConversationId != null) { + setSelectedConversationId(conversationSettings[newSelectedConversationId].title); + } + saveSettings(); + toasts?.addSuccess({ + iconType: 'check', + title: i18n.SETTINGS_UPDATED_TOAST_TITLE, + }); + }, [ + conversationSettings, + defaultSelectedConversation.title, + saveSettings, + setSelectedConversationId, + toasts, + ]); + + const tabsConfig = useMemo( + () => [ + { + id: CONVERSATIONS_TAB, + label: i18n.CONVERSATIONS_MENU_ITEM, + prepend: , + }, + { + id: QUICK_PROMPTS_TAB, + label: i18n.QUICK_PROMPTS_MENU_ITEM, + prepend: , + }, + { + id: SYSTEM_PROMPTS_TAB, + label: i18n.SYSTEM_PROMPTS_MENU_ITEM, + prepend: , + }, + { + id: ANONYMIZATION_TAB, + label: i18n.ANONYMIZATION_MENU_ITEM, + prepend: , + }, + { + id: KNOWLEDGE_BASE_TAB, + label: i18n.KNOWLEDGE_BASE_MENU_ITEM, + prepend: , + }, + ...(modelEvaluatorEnabled + ? [ + { + id: EVALUATION_TAB, + label: i18n.EVALUATION_MENU_ITEM, + prepend: , + }, + ] + : []), + ], + [modelEvaluatorEnabled] + ); + + const tabs = useMemo(() => { + return tabsConfig.map((t) => ({ + ...t, + 'data-test-subj': `settingsPageTab-${t.id}`, + onClick: () => setSelectedSettingsTab(t.id), + isSelected: t.id === selectedSettingsTab, + })); + }, [setSelectedSettingsTab, selectedSettingsTab, tabsConfig]); + + const handleChange = useCallback( + (callback) => (value: unknown) => { + setHasPendingChanges(true); + callback(value); + }, + [] + ); + + const onCancelClick = useCallback(() => { + resetSettings(); + setHasPendingChanges(false); + }, [resetSettings]); + + return ( + <> + + + {selectedSettingsTab === CONVERSATIONS_TAB && ( + + )} + {selectedSettingsTab === QUICK_PROMPTS_TAB && ( + + )} + {selectedSettingsTab === SYSTEM_PROMPTS_TAB && ( + + )} + {selectedSettingsTab === ANONYMIZATION_TAB && ( + + )} + {selectedSettingsTab === KNOWLEDGE_BASE_TAB && ( + + )} + {selectedSettingsTab === EVALUATION_TAB && } + + {hasPendingChanges && ( + + + + + {i18n.CANCEL} + + + + + {i18n.SAVE} + + + + + )} + + ); + } +); + +AssistantSettingsManagement.displayName = 'AssistantSettingsNew'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx index 8673059cdfd33..1e1c3b0b026d6 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { FindAnonymizationFieldsResponse } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen'; import { PerformBulkActionRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; import { Conversation, Prompt, QuickPrompt } from '../../../..'; @@ -172,6 +172,22 @@ export const useSettingsUpdater = ( assistantTelemetry, ]); + useEffect(() => { + if ( + !( + anonymizationFieldsBulkActions.create?.length || + anonymizationFieldsBulkActions.update?.length || + anonymizationFieldsBulkActions.delete?.ids?.length + ) + ) + setUpdatedAnonymizationData(anonymizationFields); + }, [ + anonymizationFields, + anonymizationFieldsBulkActions.create?.length, + anonymizationFieldsBulkActions.delete?.ids?.length, + anonymizationFieldsBulkActions.update?.length, + ]); + return { conversationSettings, conversationsSettingsBulkActions, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx index 1594dc4dd71f8..2e2fb2e4c9ec5 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx @@ -50,14 +50,8 @@ export const ConnectorSelector: React.FC = React.memo( const [selectedActionType, setSelectedActionType] = useState(null); - const { - data: aiConnectors, - isLoading: isLoadingConnectors, - isFetching: isFetchingConnectors, - refetch: refetchConnectors, - } = useLoadConnectors({ http }); - - const isLoading = isLoadingConnectors || isFetchingConnectors; + const { data: aiConnectors, refetch: refetchConnectors } = useLoadConnectors({ http }); + const localIsDisabled = isDisabled || !assistantAvailability.hasConnectorsReadPrivilege; const addNewConnectorOption = useMemo(() => { @@ -97,7 +91,7 @@ export const ConnectorSelector: React.FC = React.memo( return { value: connector.id, 'data-test-subj': connector.id, - inputDisplay: displayFancy ? displayFancy(connector.name) : connector.name, + inputDisplay: displayFancy?.(connector.name) ?? connector.name, dropdownDisplay: ( {connector.name} @@ -165,7 +159,6 @@ export const ConnectorSelector: React.FC = React.memo( data-test-subj="connector-selector" disabled={localIsDisabled} hasDividers={true} - isLoading={isLoading} isOpen={modalForceOpen} onChange={onChange} options={allConnectorOptions} @@ -178,7 +171,7 @@ export const ConnectorSelector: React.FC = React.memo( setIsConnectorModalVisible(false)} onSaveConnector={onSaveConnector} onSelectActionType={(actionType: ActionType) => setSelectedActionType(actionType)} selectedActionType={selectedActionType} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx index c3197cd97e3c7..2494d35cb1ff3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx @@ -27,7 +27,6 @@ interface Props { isFlyoutMode: boolean; onConnectorIdSelected?: (connectorId: string) => void; onConnectorSelected?: (conversation: Conversation) => void; - showLabel?: boolean; } const inputContainerClassName = css` @@ -57,9 +56,7 @@ const placeholderButtonClassName = css` text-overflow: ellipsis; max-width: 400px; font-weight: normal; - padding-bottom: 5px; - padding-left: 0; - padding-top: 2px; + padding: 0 14px 0 0; `; /** @@ -71,7 +68,7 @@ export const ConnectorSelectorInline: React.FC = React.memo( selectedConnectorId, selectedConversation, isFlyoutMode, - showLabel = true, + onConnectorIdSelected, onConnectorSelected, }) => { @@ -139,13 +136,6 @@ export const ConnectorSelectorInline: React.FC = React.memo( justifyContent={'flexStart'} responsive={false} > - {!isFlyoutMode && ( - - - {i18n.INLINE_CONNECTOR_LABEL} - - - )} ( @@ -177,18 +167,11 @@ export const ConnectorSelectorInline: React.FC = React.memo( justifyContent={'flexStart'} responsive={false} > - {showLabel && ( - - - {i18n.INLINE_CONNECTOR_LABEL} - - - )} {isOpen ? ( ( - + {displayText} )} diff --git a/x-pack/packages/kbn-slo-schema/index.ts b/x-pack/packages/kbn-slo-schema/index.ts index 98b183d391bb7..f936a575aa7a7 100644 --- a/x-pack/packages/kbn-slo-schema/index.ts +++ b/x-pack/packages/kbn-slo-schema/index.ts @@ -7,5 +7,4 @@ export * from './src/schema'; export * from './src/rest_specs'; -export * from './src/models/duration'; -export * from './src/models/pagination'; +export * from './src/models'; diff --git a/x-pack/examples/reporting_example/public/components/index.ts b/x-pack/packages/kbn-slo-schema/src/models/index.ts similarity index 81% rename from x-pack/examples/reporting_example/public/components/index.ts rename to x-pack/packages/kbn-slo-schema/src/models/index.ts index 7b138d90bb0a3..d281720a1a6a2 100644 --- a/x-pack/examples/reporting_example/public/components/index.ts +++ b/x-pack/packages/kbn-slo-schema/src/models/index.ts @@ -5,4 +5,5 @@ * 2.0. */ -export { TestImageA } from './test_image_a'; +export * from './pagination'; +export * from './duration'; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts new file mode 100644 index 0000000000000..7d5bbcc6025d2 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/common.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { + budgetingMethodSchema, + groupSummarySchema, + objectiveSchema, + timeWindowTypeSchema, +} from '../schema'; + +type BudgetingMethod = t.OutputOf; +type TimeWindowType = t.OutputOf; +type GroupSummary = t.TypeOf; +type Objective = t.OutputOf; + +export type { BudgetingMethod, Objective, TimeWindowType, GroupSummary }; 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 78f557bdcbc7d..48a2d88e0c1bb 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 @@ -6,3 +6,6 @@ */ export * from './slo'; +export * from './routes'; +export * from './indicators'; +export * from './common'; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts new file mode 100644 index 0000000000000..165ba84c7d604 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { + apmTransactionDurationIndicatorSchema, + apmTransactionErrorRateIndicatorSchema, + histogramIndicatorSchema, + indicatorSchema, + indicatorTypesSchema, + kqlCustomIndicatorSchema, + kqlWithFiltersSchema, + metricCustomIndicatorSchema, + querySchema, + groupingsSchema, + syntheticsAvailabilityIndicatorSchema, + timesliceMetricBasicMetricWithField, + timesliceMetricDocCountMetric, + timesliceMetricIndicatorSchema, + timesliceMetricPercentileMetric, +} from '../schema'; + +type IndicatorType = t.OutputOf; +type Indicator = t.OutputOf; + +type APMTransactionErrorRateIndicator = t.OutputOf; +type APMTransactionDurationIndicator = t.OutputOf; + +type SyntheticsAvailabilityIndicator = t.OutputOf; + +type MetricCustomIndicator = t.OutputOf; +type TimesliceMetricIndicator = t.OutputOf; +type TimesliceMetricBasicMetricWithField = t.OutputOf; +type TimesliceMetricDocCountMetric = t.OutputOf; +type TimesclieMetricPercentileMetric = t.OutputOf; + +type HistogramIndicator = t.OutputOf; + +type KQLCustomIndicator = t.OutputOf; +type KqlWithFiltersSchema = t.TypeOf; +type QuerySchema = t.TypeOf; +type GroupingsSchema = t.TypeOf; + +export type { + APMTransactionDurationIndicator, + APMTransactionErrorRateIndicator, + SyntheticsAvailabilityIndicator, + IndicatorType, + Indicator, + MetricCustomIndicator, + TimesliceMetricIndicator, + TimesliceMetricBasicMetricWithField, + TimesclieMetricPercentileMetric, + TimesliceMetricDocCountMetric, + HistogramIndicator, + KQLCustomIndicator, + KqlWithFiltersSchema, + QuerySchema, + GroupingsSchema, +}; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts new file mode 100644 index 0000000000000..1abe2a1e330df --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { indicatorSchema, timeWindowSchema } from '../../schema'; +import { allOrAnyStringOrArray } from '../../schema/common'; +import { + budgetingMethodSchema, + objectiveSchema, + optionalSettingsSchema, + sloIdSchema, + tagsSchema, +} from '../../schema/slo'; + +const createSLOParamsSchema = t.type({ + body: t.intersection([ + t.type({ + name: t.string, + description: t.string, + indicator: indicatorSchema, + timeWindow: timeWindowSchema, + budgetingMethod: budgetingMethodSchema, + objective: objectiveSchema, + }), + t.partial({ + id: sloIdSchema, + settings: optionalSettingsSchema, + tags: tagsSchema, + groupBy: allOrAnyStringOrArray, + revision: t.number, + }), + ]), +}); + +const createSLOResponseSchema = t.type({ + id: sloIdSchema, +}); + +type CreateSLOInput = t.OutputOf; // Raw payload sent by the frontend +type CreateSLOParams = t.TypeOf; // Parsed payload used by the backend +type CreateSLOResponse = t.TypeOf; // Raw response sent to the frontend + +export { createSLOParamsSchema, createSLOResponseSchema }; +export type { CreateSLOInput, CreateSLOParams, CreateSLOResponse }; diff --git a/x-pack/examples/reporting_example/common/types.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete.ts similarity index 56% rename from x-pack/examples/reporting_example/common/types.ts rename to x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete.ts index f05ba3a274525..80c4094fc58ab 100644 --- a/x-pack/examples/reporting_example/common/types.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete.ts @@ -4,10 +4,13 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import * as t from 'io-ts'; +import { sloIdSchema } from '../../schema/slo'; -import type { Ensure, SerializableRecord } from '@kbn/utility-types'; +const deleteSLOParamsSchema = t.type({ + path: t.type({ + id: sloIdSchema, + }), +}); -export type MyForwardableState = Ensure< - SerializableRecord & { captureTest: 'A' }, - SerializableRecord ->; +export { deleteSLOParamsSchema }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts new file mode 100644 index 0000000000000..89265a5871325 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/delete_instance.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { sloIdSchema } from '../../schema/slo'; + +const deleteSLOInstancesParamsSchema = t.type({ + body: t.type({ list: t.array(t.type({ sloId: sloIdSchema, instanceId: t.string })) }), +}); + +type DeleteSLOInstancesInput = t.OutputOf; +type DeleteSLOInstancesParams = t.TypeOf; + +export { deleteSLOInstancesParamsSchema }; +export type { DeleteSLOInstancesInput, DeleteSLOInstancesParams }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts new file mode 100644 index 0000000000000..c60fe499fdec5 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.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 * as t from 'io-ts'; +import { + budgetingMethodSchema, + objectiveSchema, + sloIdSchema, + timeWindowSchema, +} from '../../schema'; +import { + allOrAnyString, + allOrAnyStringOrArray, + dateType, + summarySchema, +} from '../../schema/common'; + +const fetchHistoricalSummaryParamsSchema = t.type({ + body: t.type({ + list: t.array( + t.intersection([ + t.type({ + sloId: sloIdSchema, + instanceId: t.string, + timeWindow: timeWindowSchema, + budgetingMethod: budgetingMethodSchema, + objective: objectiveSchema, + groupBy: allOrAnyStringOrArray, + revision: t.number, + }), + t.partial({ remoteName: t.string }), + ]) + ), + }), +}); + +const historicalSummarySchema = t.intersection([ + t.type({ + date: dateType, + }), + summarySchema, +]); + +const fetchHistoricalSummaryResponseSchema = t.array( + t.type({ + sloId: sloIdSchema, + instanceId: allOrAnyString, + data: t.array(historicalSummarySchema), + }) +); + +type FetchHistoricalSummaryParams = t.TypeOf; +type FetchHistoricalSummaryResponse = t.OutputOf; +type HistoricalSummaryResponse = t.OutputOf; + +export { + fetchHistoricalSummaryParamsSchema, + fetchHistoricalSummaryResponseSchema, + historicalSummarySchema, +}; +export type { + FetchHistoricalSummaryParams, + FetchHistoricalSummaryResponse, + HistoricalSummaryResponse, +}; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts new file mode 100644 index 0000000000000..6d6ebf7b553b0 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.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 * as t from 'io-ts'; +import { sloWithDataResponseSchema } from '../slo'; + +const sortDirectionSchema = t.union([t.literal('asc'), t.literal('desc')]); +const sortBySchema = t.union([ + t.literal('error_budget_consumed'), + t.literal('error_budget_remaining'), + t.literal('sli_value'), + t.literal('status'), +]); + +const findSLOParamsSchema = t.partial({ + query: t.partial({ + filters: t.string, + kqlQuery: t.string, + page: t.string, + perPage: t.string, + sortBy: sortBySchema, + sortDirection: sortDirectionSchema, + }), +}); + +const findSLOResponseSchema = t.type({ + page: t.number, + perPage: t.number, + total: t.number, + results: t.array(sloWithDataResponseSchema), +}); + +type FindSLOParams = t.TypeOf; +type FindSLOResponse = t.OutputOf; + +export { findSLOParamsSchema, findSLOResponseSchema }; +export type { FindSLOParams, FindSLOResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts new file mode 100644 index 0000000000000..0e053a520f70e --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { toBooleanRt } from '@kbn/io-ts-utils/src/to_boolean_rt'; +import * as t from 'io-ts'; +import { sloDefinitionSchema } from '../../schema'; + +const findSloDefinitionsParamsSchema = t.partial({ + query: t.partial({ + search: t.string, + includeOutdatedOnly: toBooleanRt, + page: t.string, + perPage: t.string, + }), +}); + +const findSloDefinitionsResponseSchema = t.type({ + page: t.number, + perPage: t.number, + total: t.number, + results: t.array(sloDefinitionSchema), +}); + +type FindSLODefinitionsParams = t.TypeOf; +type FindSLODefinitionsResponse = t.OutputOf; + +export { findSloDefinitionsParamsSchema, findSloDefinitionsResponseSchema }; +export type { FindSLODefinitionsParams, FindSLODefinitionsResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.ts new file mode 100644 index 0000000000000..4294dde52b4ce --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_group.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 * as t from 'io-ts'; +import { groupSummarySchema } from '../../schema/common'; + +const groupBySchema = t.union([ + t.literal('ungrouped'), + t.literal('slo.tags'), + t.literal('status'), + t.literal('slo.indicator.type'), + t.literal('_index'), +]); + +const findSLOGroupsParamsSchema = t.partial({ + query: t.partial({ + page: t.string, + perPage: t.string, + groupBy: groupBySchema, + groupsFilter: t.union([t.array(t.string), t.string]), + kqlQuery: t.string, + filters: t.string, + }), +}); + +const sloGroupWithSummaryResponseSchema = t.type({ + group: t.string, + groupBy: t.string, + summary: groupSummarySchema, +}); + +const findSLOGroupsResponseSchema = t.type({ + page: t.number, + perPage: t.number, + total: t.number, + results: t.array(sloGroupWithSummaryResponseSchema), +}); + +type FindSLOGroupsParams = t.TypeOf; +type FindSLOGroupsResponse = t.OutputOf; + +export { + findSLOGroupsParamsSchema, + findSLOGroupsResponseSchema, + sloGroupWithSummaryResponseSchema, +}; +export type { FindSLOGroupsParams, FindSLOGroupsResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts new file mode 100644 index 0000000000000..d43b11368a0c1 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { allOrAnyString } from '../../schema/common'; +import { sloIdSchema } from '../../schema/slo'; +import { sloWithDataResponseSchema } from '../slo'; + +const getSLOQuerySchema = t.partial({ + query: t.partial({ + instanceId: allOrAnyString, + remoteName: t.string, + }), +}); + +const getSLOParamsSchema = t.intersection([ + t.type({ + path: t.type({ + id: sloIdSchema, + }), + }), + getSLOQuerySchema, +]); + +const getSLOResponseSchema = sloWithDataResponseSchema; + +type GetSLOParams = t.TypeOf; +type GetSLOResponse = t.OutputOf; + +export { getSLOParamsSchema, getSLOResponseSchema }; +export type { GetSLOParams, GetSLOResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.ts new file mode 100644 index 0000000000000..44a7b1e5cba18 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_burn_rates.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 * as t from 'io-ts'; +import { durationType } from '../../schema'; +import { allOrAnyString } from '../../schema/common'; + +const getSLOBurnRatesResponseSchema = t.type({ + burnRates: t.array( + t.type({ + name: t.string, + burnRate: t.number, + sli: t.number, + }) + ), +}); + +const getSLOBurnRatesParamsSchema = t.type({ + path: t.type({ id: t.string }), + body: t.intersection([ + t.type({ + instanceId: allOrAnyString, + windows: t.array( + t.type({ + name: t.string, + duration: durationType, + }) + ), + }), + t.partial({ remoteName: t.string }), + ]), +}); + +type GetSLOBurnRatesResponse = t.OutputOf; + +export { getSLOBurnRatesParamsSchema, getSLOBurnRatesResponseSchema }; +export type { GetSLOBurnRatesResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts new file mode 100644 index 0000000000000..135c2f7d6d66f --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; + +const getSLOInstancesParamsSchema = t.type({ + path: t.type({ id: t.string }), +}); + +const getSLOInstancesResponseSchema = t.type({ + groupBy: t.union([t.string, t.array(t.string)]), + instances: t.array(t.string), +}); + +type GetSLOInstancesResponse = t.OutputOf; + +export { getSLOInstancesParamsSchema, getSLOInstancesResponseSchema }; +export type { GetSLOInstancesResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.ts new file mode 100644 index 0000000000000..53a477fcb67f1 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_preview_data.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 * as t from 'io-ts'; +import { indicatorSchema, objectiveSchema } from '../../schema'; +import { dateType } from '../../schema/common'; + +const getPreviewDataParamsSchema = t.type({ + body: t.intersection([ + t.type({ + indicator: indicatorSchema, + range: t.type({ + start: t.number, + end: t.number, + }), + }), + t.partial({ + objective: objectiveSchema, + instanceId: t.string, + groupBy: t.string, + remoteName: t.string, + groupings: t.record(t.string, t.unknown), + }), + ]), +}); + +const getPreviewDataResponseSchema = t.array( + t.intersection([ + t.type({ + date: dateType, + sliValue: t.number, + }), + t.partial({ + events: t.type({ + good: t.number, + bad: t.number, + total: t.number, + }), + }), + ]) +); + +type GetPreviewDataParams = t.TypeOf; +type GetPreviewDataResponse = t.OutputOf; + +export { getPreviewDataParamsSchema, getPreviewDataResponseSchema }; +export type { GetPreviewDataParams, GetPreviewDataResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts new file mode 100644 index 0000000000000..afa90877253e3 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './create'; +export * from './update'; +export * from './delete'; +export * from './find'; +export * from './find_group'; +export * from './find_definition'; +export * from './get'; +export * from './get_burn_rates'; +export * from './get_instances'; +export * from './get_preview_data'; +export * from './reset'; +export * from './manage'; +export * from './delete_instance'; +export * from './fetch_historical_summary'; +export * from './put_settings'; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/manage.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/manage.ts new file mode 100644 index 0000000000000..7a531a2d2fe25 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/manage.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { sloIdSchema } from '../../schema/slo'; + +const manageSLOParamsSchema = t.type({ + path: t.type({ id: sloIdSchema }), +}); + +type ManageSLOParams = t.TypeOf; + +export { manageSLOParamsSchema }; +export type { ManageSLOParams }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts new file mode 100644 index 0000000000000..ff5e4a1d98051 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { sloSettingsSchema } from '../../schema/settings'; + +const putSLOSettingsParamsSchema = t.type({ + body: sloSettingsSchema, +}); + +const putSLOSettingsResponseSchema = sloSettingsSchema; + +type PutSLOSettingsParams = t.TypeOf; +type PutSLOSettingsResponse = t.OutputOf; +type GetSLOSettingsResponse = t.OutputOf; + +export { putSLOSettingsParamsSchema, putSLOSettingsResponseSchema }; +export type { PutSLOSettingsParams, PutSLOSettingsResponse, GetSLOSettingsResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts new file mode 100644 index 0000000000000..5f12ed6d6d789 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { sloDefinitionSchema, sloIdSchema } from '../../schema/slo'; + +const resetSLOParamsSchema = t.type({ + path: t.type({ id: sloIdSchema }), +}); + +const resetSLOResponseSchema = sloDefinitionSchema; + +type ResetSLOParams = t.TypeOf; +type ResetSLOResponse = t.OutputOf; + +export { resetSLOParamsSchema, resetSLOResponseSchema }; +export type { ResetSLOParams, ResetSLOResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts new file mode 100644 index 0000000000000..d80dfab7d0792 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.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 * as t from 'io-ts'; +import { indicatorSchema, timeWindowSchema } from '../../schema'; +import { allOrAnyStringOrArray } from '../../schema/common'; +import { + budgetingMethodSchema, + objectiveSchema, + optionalSettingsSchema, + sloDefinitionSchema, + sloIdSchema, + tagsSchema, +} from '../../schema/slo'; + +const updateSLOParamsSchema = t.type({ + path: t.type({ + id: sloIdSchema, + }), + body: t.partial({ + name: t.string, + description: t.string, + indicator: indicatorSchema, + timeWindow: timeWindowSchema, + budgetingMethod: budgetingMethodSchema, + objective: objectiveSchema, + settings: optionalSettingsSchema, + tags: tagsSchema, + groupBy: allOrAnyStringOrArray, + }), +}); + +const updateSLOResponseSchema = sloDefinitionSchema; + +type UpdateSLOInput = t.OutputOf; +type UpdateSLOParams = t.TypeOf; +type UpdateSLOResponse = t.OutputOf; + +export { updateSLOParamsSchema, updateSLOResponseSchema }; +export type { UpdateSLOInput, UpdateSLOParams, UpdateSLOResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts index 92f52accf5e6b..6fc093e054055 100644 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts @@ -6,428 +6,27 @@ */ import * as t from 'io-ts'; -import { toBooleanRt } from '@kbn/io-ts-utils'; import { allOrAnyString, - apmTransactionDurationIndicatorSchema, - apmTransactionErrorRateIndicatorSchema, - syntheticsAvailabilityIndicatorSchema, - budgetingMethodSchema, - dateType, - durationType, groupingsSchema, - histogramIndicatorSchema, - historicalSummarySchema, - indicatorSchema, - indicatorTypesSchema, - kqlCustomIndicatorSchema, - metricCustomIndicatorSchema, metaSchema, - timesliceMetricIndicatorSchema, - objectiveSchema, - optionalSettingsSchema, - previewDataSchema, - settingsSchema, - sloIdSchema, + remoteSchema, + sloDefinitionSchema, summarySchema, - groupSummarySchema, - tagsSchema, - timeWindowSchema, - timeWindowTypeSchema, - timesliceMetricBasicMetricWithField, - timesliceMetricDocCountMetric, - timesliceMetricPercentileMetric, - allOrAnyStringOrArray, - kqlWithFiltersSchema, - querySchema, } from '../schema'; -const createSLOParamsSchema = t.type({ - body: t.intersection([ - t.type({ - name: t.string, - description: t.string, - indicator: indicatorSchema, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - }), - t.partial({ - id: sloIdSchema, - settings: optionalSettingsSchema, - tags: tagsSchema, - groupBy: allOrAnyStringOrArray, - revision: t.number, - }), - ]), -}); - -const createSLOResponseSchema = t.type({ - id: sloIdSchema, -}); - -const getPreviewDataParamsSchema = t.type({ - body: t.intersection([ - t.type({ - indicator: indicatorSchema, - range: t.type({ - start: t.number, - end: t.number, - }), - }), - t.partial({ - objective: objectiveSchema, - instanceId: t.string, - groupBy: t.string, - groupings: t.record(t.string, t.unknown), - }), - ]), -}); - -const getPreviewDataResponseSchema = t.array(previewDataSchema); - -const deleteSLOParamsSchema = t.type({ - path: t.type({ - id: sloIdSchema, - }), -}); - -const sortDirectionSchema = t.union([t.literal('asc'), t.literal('desc')]); -const sortBySchema = t.union([ - t.literal('error_budget_consumed'), - t.literal('error_budget_remaining'), - t.literal('sli_value'), - t.literal('status'), -]); - -const findSLOParamsSchema = t.partial({ - query: t.partial({ - filters: t.string, - kqlQuery: t.string, - page: t.string, - perPage: t.string, - sortBy: sortBySchema, - sortDirection: sortDirectionSchema, - }), -}); - -const groupBySchema = t.union([ - t.literal('ungrouped'), - t.literal('slo.tags'), - t.literal('status'), - t.literal('slo.indicator.type'), -]); - -const findSLOGroupsParamsSchema = t.partial({ - query: t.partial({ - page: t.string, - perPage: t.string, - groupBy: groupBySchema, - groupsFilter: t.union([t.array(t.string), t.string]), - kqlQuery: t.string, - filters: t.string, - }), -}); - -const sloResponseSchema = t.intersection([ - t.type({ - id: sloIdSchema, - name: t.string, - description: t.string, - indicator: indicatorSchema, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - revision: t.number, - settings: settingsSchema, - enabled: t.boolean, - tags: tagsSchema, - groupBy: allOrAnyStringOrArray, - createdAt: dateType, - updatedAt: dateType, - version: t.number, - }), +const sloWithDataResponseSchema = t.intersection([ + sloDefinitionSchema, + t.type({ summary: summarySchema, groupings: groupingsSchema }), t.partial({ instanceId: allOrAnyString, + meta: metaSchema, + remote: remoteSchema, }), ]); -const sloWithSummaryResponseSchema = t.intersection([ - sloResponseSchema, - t.intersection([ - t.type({ summary: summarySchema, groupings: groupingsSchema }), - t.partial({ meta: metaSchema }), - ]), -]); - -const sloGroupWithSummaryResponseSchema = t.type({ - group: t.string, - groupBy: t.string, - summary: groupSummarySchema, -}); - -const getSLOQuerySchema = t.partial({ - query: t.partial({ - instanceId: allOrAnyString, - }), -}); -const getSLOParamsSchema = t.intersection([ - t.type({ - path: t.type({ - id: sloIdSchema, - }), - }), - getSLOQuerySchema, -]); - -const getSLOResponseSchema = sloWithSummaryResponseSchema; - -const updateSLOParamsSchema = t.type({ - path: t.type({ - id: sloIdSchema, - }), - body: t.partial({ - name: t.string, - description: t.string, - indicator: indicatorSchema, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - settings: optionalSettingsSchema, - tags: tagsSchema, - groupBy: allOrAnyStringOrArray, - }), -}); - -const manageSLOParamsSchema = t.type({ - path: t.type({ id: sloIdSchema }), -}); - -const resetSLOParamsSchema = t.type({ - path: t.type({ id: sloIdSchema }), -}); - -const resetSLOResponseSchema = sloResponseSchema; - -const updateSLOResponseSchema = sloResponseSchema; - -const findSLOResponseSchema = t.type({ - page: t.number, - perPage: t.number, - total: t.number, - results: t.array(sloWithSummaryResponseSchema), -}); - -const findSLOGroupsResponseSchema = t.type({ - page: t.number, - perPage: t.number, - total: t.number, - results: t.array(sloGroupWithSummaryResponseSchema), -}); - -const deleteSLOInstancesParamsSchema = t.type({ - body: t.type({ list: t.array(t.type({ sloId: sloIdSchema, instanceId: t.string })) }), -}); - -const fetchHistoricalSummaryParamsSchema = t.type({ - body: t.type({ - list: t.array(t.type({ sloId: sloIdSchema, instanceId: t.string })), - }), -}); - -const fetchHistoricalSummaryResponseSchema = t.array( - t.type({ - sloId: sloIdSchema, - instanceId: allOrAnyString, - data: t.array(historicalSummarySchema), - }) -); - -const findSloDefinitionsParamsSchema = t.partial({ - query: t.partial({ - search: t.string, - includeOutdatedOnly: toBooleanRt, - page: t.string, - perPage: t.string, - }), -}); - -const findSloDefinitionsResponseSchema = t.type({ - page: t.number, - perPage: t.number, - total: t.number, - results: t.array(sloResponseSchema), -}); - -const getSLOBurnRatesResponseSchema = t.type({ - burnRates: t.array( - t.type({ - name: t.string, - burnRate: t.number, - sli: t.number, - }) - ), -}); - -const getSLOBurnRatesParamsSchema = t.type({ - path: t.type({ id: t.string }), - body: t.type({ - instanceId: allOrAnyString, - windows: t.array( - t.type({ - name: t.string, - duration: durationType, - }) - ), - }), -}); - -const getSLOInstancesParamsSchema = t.type({ - path: t.type({ id: t.string }), -}); - -const getSLOInstancesResponseSchema = t.type({ - groupBy: t.union([t.string, t.array(t.string)]), - instances: t.array(t.string), -}); - -type SLOResponse = t.OutputOf; -type SLOWithSummaryResponse = t.OutputOf; - -type SLOGroupWithSummaryResponse = t.OutputOf; - -type CreateSLOInput = t.OutputOf; // Raw payload sent by the frontend -type CreateSLOParams = t.TypeOf; // Parsed payload used by the backend -type CreateSLOResponse = t.TypeOf; // Raw response sent to the frontend - -type GetSLOParams = t.TypeOf; -type GetSLOResponse = t.OutputOf; - -type ManageSLOParams = t.TypeOf; - -type ResetSLOParams = t.TypeOf; -type ResetSLOResponse = t.OutputOf; - -type UpdateSLOInput = t.OutputOf; -type UpdateSLOParams = t.TypeOf; -type UpdateSLOResponse = t.OutputOf; - -type FindSLOParams = t.TypeOf; -type FindSLOResponse = t.OutputOf; - -type FindSLOGroupsParams = t.TypeOf; -type FindSLOGroupsResponse = t.OutputOf; - -type DeleteSLOInstancesInput = t.OutputOf; -type DeleteSLOInstancesParams = t.TypeOf; - -type FetchHistoricalSummaryParams = t.TypeOf; -type FetchHistoricalSummaryResponse = t.OutputOf; -type HistoricalSummaryResponse = t.OutputOf; - -type FindSLODefinitionsParams = t.TypeOf; -type FindSLODefinitionsResponse = t.OutputOf; - -type GetPreviewDataParams = t.TypeOf; -type GetPreviewDataResponse = t.OutputOf; - -type GetSLOInstancesResponse = t.OutputOf; - -type GetSLOBurnRatesResponse = t.OutputOf; -type BudgetingMethod = t.OutputOf; -type TimeWindow = t.OutputOf; -type IndicatorType = t.OutputOf; -type Indicator = t.OutputOf; -type Objective = t.OutputOf; -type APMTransactionErrorRateIndicator = t.OutputOf; -type APMTransactionDurationIndicator = t.OutputOf; -type SyntheticsAvailabilityIndicator = t.OutputOf; -type MetricCustomIndicator = t.OutputOf; -type TimesliceMetricIndicator = t.OutputOf; -type TimesliceMetricBasicMetricWithField = t.OutputOf; -type TimesliceMetricDocCountMetric = t.OutputOf; -type TimesclieMetricPercentileMetric = t.OutputOf; -type HistogramIndicator = t.OutputOf; -type KQLCustomIndicator = t.OutputOf; -type GroupSummary = t.TypeOf; -type KqlWithFiltersSchema = t.TypeOf; -type QuerySchema = t.TypeOf; +type SLODefinitionResponse = t.OutputOf; +type SLOWithSummaryResponse = t.OutputOf; -export { - createSLOParamsSchema, - deleteSLOParamsSchema, - deleteSLOInstancesParamsSchema, - findSLOParamsSchema, - findSLOResponseSchema, - findSLOGroupsParamsSchema, - findSLOGroupsResponseSchema, - getPreviewDataParamsSchema, - getPreviewDataResponseSchema, - getSLOParamsSchema, - getSLOResponseSchema, - fetchHistoricalSummaryParamsSchema, - fetchHistoricalSummaryResponseSchema, - findSloDefinitionsParamsSchema, - findSloDefinitionsResponseSchema, - manageSLOParamsSchema, - resetSLOParamsSchema, - resetSLOResponseSchema, - sloResponseSchema, - sloWithSummaryResponseSchema, - sloGroupWithSummaryResponseSchema, - updateSLOParamsSchema, - updateSLOResponseSchema, - getSLOBurnRatesParamsSchema, - getSLOBurnRatesResponseSchema, - getSLOInstancesParamsSchema, - getSLOInstancesResponseSchema, -}; -export type { - BudgetingMethod, - CreateSLOInput, - CreateSLOParams, - CreateSLOResponse, - DeleteSLOInstancesInput, - DeleteSLOInstancesParams, - FindSLOParams, - FindSLOResponse, - FindSLOGroupsParams, - FindSLOGroupsResponse, - GetPreviewDataParams, - GetPreviewDataResponse, - GetSLOParams, - GetSLOResponse, - FetchHistoricalSummaryParams, - FetchHistoricalSummaryResponse, - HistoricalSummaryResponse, - FindSLODefinitionsParams, - FindSLODefinitionsResponse, - ManageSLOParams, - ResetSLOParams, - ResetSLOResponse, - SLOResponse, - SLOWithSummaryResponse, - SLOGroupWithSummaryResponse, - UpdateSLOInput, - UpdateSLOParams, - UpdateSLOResponse, - APMTransactionDurationIndicator, - APMTransactionErrorRateIndicator, - SyntheticsAvailabilityIndicator, - GetSLOBurnRatesResponse, - GetSLOInstancesResponse, - IndicatorType, - Indicator, - Objective, - MetricCustomIndicator, - TimesliceMetricIndicator, - TimesliceMetricBasicMetricWithField, - TimesclieMetricPercentileMetric, - TimesliceMetricDocCountMetric, - HistogramIndicator, - KQLCustomIndicator, - TimeWindow, - GroupSummary, - KqlWithFiltersSchema, - QuerySchema, -}; +export { sloWithDataResponseSchema }; +export type { SLODefinitionResponse, SLOWithSummaryResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/schema/common.ts b/x-pack/packages/kbn-slo-schema/src/schema/common.ts index 350caed40d2d4..155164dee593f 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/common.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/common.ts @@ -59,6 +59,11 @@ const metaSchema = t.partial({ }), }); +const remoteSchema = t.type({ + remoteName: t.string, + kibanaUrl: t.string, +}); + const groupSummarySchema = t.type({ total: t.number, worst: t.type({ @@ -76,58 +81,8 @@ const groupSummarySchema = t.type({ noData: t.number, }); -const historicalSummarySchema = t.intersection([ - t.type({ - date: dateType, - }), - summarySchema, -]); - -const previewDataSchema = t.intersection([ - t.type({ - date: dateType, - sliValue: t.number, - }), - t.partial({ - events: t.type({ - good: t.number, - bad: t.number, - total: t.number, - }), - }), -]); - const dateRangeSchema = t.type({ from: dateType, to: dateType }); -const kqlQuerySchema = t.string; - -const kqlWithFiltersSchema = t.type({ - kqlQuery: t.string, - filters: t.array( - t.type({ - meta: t.partial({ - alias: t.union([t.string, t.null]), - disabled: t.boolean, - negate: t.boolean, - // controlledBy is there to identify who owns the filter - controlledBy: t.string, - // allows grouping of filters - group: t.string, - // index and type are optional only because when you create a new filter, there are no defaults - index: t.string, - isMultiIndex: t.boolean, - type: t.string, - key: t.string, - params: t.any, - value: t.string, - }), - query: t.record(t.string, t.any), - }) - ), -}); - -const querySchema = t.union([kqlQuerySchema, kqlWithFiltersSchema]); - export { ALL_VALUE, allOrAnyString, @@ -136,13 +91,9 @@ export { dateType, errorBudgetSchema, groupingsSchema, - historicalSummarySchema, - previewDataSchema, statusSchema, summarySchema, metaSchema, groupSummarySchema, - kqlWithFiltersSchema, - querySchema, - kqlQuerySchema, + remoteSchema, }; 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 2fbddc7ce8537..5fdaa72f71527 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/index.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/index.ts @@ -10,3 +10,4 @@ export * from './duration'; export * from './indicators'; export * from './time_window'; export * from './slo'; +export * from './settings'; diff --git a/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts b/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts index 189857be733f7..7123ee7a9575b 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts @@ -6,7 +6,36 @@ */ import * as t from 'io-ts'; -import { allOrAnyString, dateRangeSchema, querySchema } from './common'; +import { allOrAnyString, dateRangeSchema } from './common'; + +const kqlQuerySchema = t.string; + +const kqlWithFiltersSchema = t.type({ + kqlQuery: t.string, + filters: t.array( + t.type({ + meta: t.partial({ + alias: t.union([t.string, t.null]), + disabled: t.boolean, + negate: t.boolean, + // controlledBy is there to identify who owns the filter + controlledBy: t.string, + // allows grouping of filters + group: t.string, + // index and type are optional only because when you create a new filter, there are no defaults + index: t.string, + isMultiIndex: t.boolean, + type: t.string, + key: t.string, + params: t.any, + value: t.string, + }), + query: t.record(t.string, t.any), + }) + ), +}); + +const querySchema = t.union([kqlQuerySchema, kqlWithFiltersSchema]); const apmTransactionDurationIndicatorTypeSchema = t.literal('sli.apm.transactionDuration'); const apmTransactionDurationIndicatorSchema = t.type({ @@ -288,6 +317,9 @@ const indicatorSchema = t.union([ ]); export { + kqlQuerySchema, + kqlWithFiltersSchema, + querySchema, apmTransactionDurationIndicatorSchema, apmTransactionDurationIndicatorTypeSchema, apmTransactionErrorRateIndicatorSchema, diff --git a/x-pack/plugins/observability_solution/observability/server/domain/models/error_budget.ts b/x-pack/packages/kbn-slo-schema/src/schema/settings.ts similarity index 67% rename from x-pack/plugins/observability_solution/observability/server/domain/models/error_budget.ts rename to x-pack/packages/kbn-slo-schema/src/schema/settings.ts index 50ca6e469d7dd..5eb7e7b23abf3 100644 --- a/x-pack/plugins/observability_solution/observability/server/domain/models/error_budget.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/settings.ts @@ -6,8 +6,8 @@ */ import * as t from 'io-ts'; -import { errorBudgetSchema } from '@kbn/slo-schema'; -type ErrorBudget = t.TypeOf; - -export type { ErrorBudget }; +export const sloSettingsSchema = t.type({ + useAllRemoteClusters: t.boolean, + selectedRemoteClusters: t.array(t.string), +}); diff --git a/x-pack/packages/kbn-slo-schema/src/schema/slo.ts b/x-pack/packages/kbn-slo-schema/src/schema/slo.ts index 6f39215a5b5ab..692ec16050353 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/slo.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/slo.ts @@ -6,7 +6,7 @@ */ import * as t from 'io-ts'; -import { allOrAnyStringOrArray, dateType, summarySchema, groupingsSchema } from './common'; +import { allOrAnyStringOrArray, dateType } from './common'; import { durationType } from './duration'; import { indicatorSchema } from './indicators'; import { timeWindowSchema } from './time_window'; @@ -31,11 +31,13 @@ const settingsSchema = t.type({ frequency: durationType, }); +const groupBySchema = allOrAnyStringOrArray; + const optionalSettingsSchema = t.partial({ ...settingsSchema.props }); const tagsSchema = t.array(t.string); const sloIdSchema = t.string; -const sloSchema = t.type({ +const sloDefinitionSchema = t.type({ id: sloIdSchema, name: t.string, description: t.string, @@ -49,24 +51,19 @@ const sloSchema = t.type({ tags: tagsSchema, createdAt: dateType, updatedAt: dateType, - groupBy: allOrAnyStringOrArray, + groupBy: groupBySchema, version: t.number, }); -const sloWithSummarySchema = t.intersection([ - sloSchema, - t.type({ summary: summarySchema, groupings: groupingsSchema }), -]); - export { budgetingMethodSchema, objectiveSchema, + groupBySchema, occurrencesBudgetingMethodSchema, optionalSettingsSchema, settingsSchema, + sloDefinitionSchema, sloIdSchema, - sloSchema, - sloWithSummarySchema, tagsSchema, targetSchema, timeslicesBudgetingMethodSchema, diff --git a/x-pack/plugins/actions/server/action_type_registry.ts b/x-pack/plugins/actions/server/action_type_registry.ts index 4e6f9aa86482d..894ef5ed9d868 100644 --- a/x-pack/plugins/actions/server/action_type_registry.ts +++ b/x-pack/plugins/actions/server/action_type_registry.ts @@ -19,6 +19,7 @@ import { ActionTypeSecrets, ActionTypeParams, } from './types'; +import { isBidirectionalConnectorType } from './lib/bidirectional_connectors'; export interface ActionTypeRegistryOpts { licensing: LicensingPluginSetup; @@ -230,8 +231,10 @@ export class ActionTypeRegistry { .filter(([_, actionType]) => featureId ? actionType.supportedFeatureIds.includes(featureId) : true ) - // Temporarily don't return SentinelOne connector for Security Solution Rule Actions - .filter(([actionTypeId]) => (featureId ? actionTypeId !== '.sentinelone' : true)) + // Temporarily don't return SentinelOne and Crowdstrike connector for Security Solution Rule Actions + .filter(([actionTypeId]) => + featureId ? !isBidirectionalConnectorType(actionTypeId) : true + ) .map(([actionTypeId, actionType]) => ({ id: actionTypeId, name: actionType.name, diff --git a/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts b/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts index f9f2094ba05ba..06a74c0f011fa 100644 --- a/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts +++ b/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts @@ -18,6 +18,7 @@ import { CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG, CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG, } from '../feature'; +import { forEach } from 'lodash'; const request = {} as KibanaRequest; @@ -237,50 +238,54 @@ describe('ensureAuthorized', () => { }); }); - test('checks SentinelOne connector privileges correctly', async () => { - const { authorization } = mockSecurity(); - const checkPrivileges: jest.MockedFunction< - ReturnType - > = jest.fn(); - - authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); - const actionsAuthorization = new ActionsAuthorization({ - request, - authorization, - }); - - checkPrivileges.mockResolvedValueOnce({ - username: 'some-user', - hasAllRequested: true, - privileges: [ - { - privilege: mockAuthorizationAction('myType', 'execute'), - authorized: true, - }, - ], - }); - - await actionsAuthorization.ensureAuthorized({ - operation: 'execute', - actionTypeId: '.sentinelone', - }); - - expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( - ACTION_SAVED_OBJECT_TYPE, - 'get' - ); - - expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( - ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, - 'create' - ); - - expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [ - mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), - mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), - ADVANCED_EXECUTE_AUTHZ, - ], + describe('Bi-directional connectors', () => { + forEach(['.sentinelone', '.crowdstrike'], (actionTypeId) => { + test(`checks ${actionTypeId} connector privileges correctly`, async () => { + const { authorization } = mockSecurity(); + const checkPrivileges: jest.MockedFunction< + ReturnType + > = jest.fn(); + + authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); + const actionsAuthorization = new ActionsAuthorization({ + request, + authorization, + }); + + checkPrivileges.mockResolvedValueOnce({ + username: 'some-user', + hasAllRequested: true, + privileges: [ + { + privilege: mockAuthorizationAction('myType', 'execute'), + authorized: true, + }, + ], + }); + + await actionsAuthorization.ensureAuthorized({ + operation: 'execute', + actionTypeId, + }); + + expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( + ACTION_SAVED_OBJECT_TYPE, + 'get' + ); + + expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( + ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, + 'create' + ); + + expect(checkPrivileges).toHaveBeenCalledWith({ + kibana: [ + mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), + mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), + ADVANCED_EXECUTE_AUTHZ, + ], + }); + }); }); }); }); diff --git a/x-pack/plugins/actions/server/authorization/actions_authorization.ts b/x-pack/plugins/actions/server/authorization/actions_authorization.ts index df282b95e9686..fd4477b051cf8 100644 --- a/x-pack/plugins/actions/server/authorization/actions_authorization.ts +++ b/x-pack/plugins/actions/server/authorization/actions_authorization.ts @@ -12,6 +12,7 @@ import { ACTION_SAVED_OBJECT_TYPE, ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, } from '../constants/saved_objects'; +import { isBidirectionalConnectorType } from '../lib/bidirectional_connectors'; import { AuthorizationMode } from './get_authorization_mode_by_source'; export interface ConstructorOptions { @@ -44,6 +45,7 @@ export class ActionsAuthorization { private readonly request: KibanaRequest; private readonly authorization?: SecurityPluginSetup['authz']; private readonly authorizationMode: AuthorizationMode; + constructor({ request, authorization, @@ -77,9 +79,9 @@ export class ActionsAuthorization { kibana: [ ...privileges, ...additionalPrivileges, - // SentinelOne sub-actions require that a user have `all` privilege to Actions and Connectors. + // SentinelOne and Crowdstrike sub-actions require that a user have `all` privilege to Actions and Connectors. // This is a temporary solution until a more robust RBAC approach can be implemented for sub-actions - actionTypeId === '.sentinelone' + isBidirectionalConnectorType(actionTypeId) ? 'api:actions:execute-advanced-connectors' : 'api:actions:execute-basic-connectors', ], diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap index 1dae9bf3f27ac..77ee286e4b70f 100644 --- a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap +++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -45,6 +45,19 @@ Object { ], "type": "string", }, + "signal": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "any", + }, }, "preferences": Object { "stripUnknown": Object { @@ -134,6 +147,19 @@ Object { ], "type": "string", }, + "signal": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "any", + }, }, "preferences": Object { "stripUnknown": Object { @@ -6739,13 +6765,76 @@ Object { }, "error": [Function], "presence": "optional", - "unknown": true, }, "keys": Object { - "parentTaskId": Object { + "agentUUID": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "files": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "zipPassCode": Object { "flags": Object { "error": [Function], }, + "metas": Array [ + Object { + "x-oas-min-length": 10, + }, + ], "rules": Array [ Object { "args": Object { @@ -6753,6 +6842,12 @@ Object { }, "name": "custom", }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, ], "type": "string", }, @@ -6776,5699 +6871,736 @@ Object { "presence": "optional", }, "keys": Object { - "K8SNodeLabels__contains": Object { + "activityId": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "K8SNodeName__contains": Object { + "agentUUID": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "K8SType__contains": Object { + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 4`] = ` +Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "accountIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "K8SVersion__contains": Object { + "activityTypes": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, + "x-oas-optional": true, }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "accountIds": Object { + "activityUuids": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "activeThreats": Object { + "agentIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "activeThreats__gt": Object { + "alertIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adComputerMember__contains": Object { + "countOnly": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-optional": true, + }, + ], + "type": "boolean", + }, + "createdAt__between": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adComputerName__contains": Object { + "createdAt__gt": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adComputerQuery__contains": Object { + "createdAt__gte": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adQuery": Object { + "createdAt__lt": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adQuery__contains": Object { + "createdAt__lte": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adUserMember__contains": Object { + "cursor": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adUserName__contains": Object { + "groupIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "adUserQuery__contains": Object { + "ids": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "agentNamespace__contains": Object { + "includeHidden": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "metas": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", + "type": "boolean", }, - "agentPodName__contains": Object { + "limit": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "metas": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", + "type": "number", }, - "agentVersions": Object { + "ruleIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "agentVersionsNin": Object { + "siteIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "alertIds": Object { + "skip": Object { "flags": Object { "default": [Function], "error": [Function], "presence": "optional", }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - ], "metas": Array [ Object { "x-oas-optional": true, }, ], - "type": "array", + "type": "number", }, - "appsVulnerabilityStatuses": Object { + "skipCount": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "metas": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", + "type": "boolean", }, - "appsVulnerabilityStatusesNin": Object { + "sortBy": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "awsRole__contains": Object { + "sortOrder": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "awsSecurityGroups__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "awsSubnetIds__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "azureResourceGroup__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudAccount__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudImage__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudInstanceId__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudInstanceSize__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudLocation__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudNetwork__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudProvider": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cloudTags__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "clusterName__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "computerName": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "computerName__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "computerName__like": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "consoleMigrationStatuses": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "consoleMigrationStatusesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "coreCount__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "coreCount__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "coreCount__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "coreCount__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "coreCount__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "countsFor": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cpuCount__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cpuCount__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cpuCount__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cpuCount__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "cpuCount__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createdAt__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createdAt__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createdAt__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createdAt__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createdAt__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "decommissionedAt__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "decommissionedAt__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "decommissionedAt__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "decommissionedAt__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "decommissionedAt__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "domains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "domainsNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "encryptedApplications": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "externalId__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "externalIp__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "filterId": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "filteredGroupIds": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "filteredSiteIds": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "firewallEnabled": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "gatewayIp": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "gcpServiceAccount__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "groupIds": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "hasLocalConfiguration": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "ids": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "infected": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "installerTypes": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "installerTypesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "isActive": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "isDecommissioned": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "isPendingUninstall": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "isUninstalled": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "isUpToDate": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastActiveDate__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastActiveDate__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastActiveDate__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastActiveDate__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastActiveDate__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "lastLoggedInUserName__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "locationEnabled": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "locationIds": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "locationIdsNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "machineTypes": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "machineTypesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "migrationStatus": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "mitigationMode": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "mitigationModeSuspicious": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkInterfaceGatewayMacAddress__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkInterfaceInet__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkInterfacePhysical__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkQuarantineEnabled": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkStatuses": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "networkStatusesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "operationalStates": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "operationalStatesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "osArch": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "osTypes": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "osTypesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "osVersion__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "query": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "rangerStatus": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "rangerStatuses": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "rangerStatusesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "rangerVersions": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "rangerVersionsNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "registeredAt__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "registeredAt__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "registeredAt__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "registeredAt__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "registeredAt__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "remoteProfilingStates": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "remoteProfilingStatesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "scanStatus": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "scanStatuses": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "scanStatusesNin": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "siteIds": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatContentHash": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatCreatedAt__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatCreatedAt__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatCreatedAt__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatCreatedAt__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatCreatedAt__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatHidden": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatMitigationStatus": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatRebootRequired": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "threatResolved": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "totalMemory__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "totalMemory__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "totalMemory__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "totalMemory__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "totalMemory__lte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "updatedAt__between": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "updatedAt__gt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "updatedAt__gte": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, + "x-oas-min-length": 1, }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", - }, - "updatedAt__lt": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ + "rules": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "updatedAt__lte": Object { + "threatIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, + "x-oas-min-length": 1, }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", - }, - "userActionsNeeded": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ + "rules": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "uuid": Object { + "userEmails": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, + "x-oas-min-length": 1, }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "x-oas-optional": true, }, ], - "type": "alternatives", - }, - "uuid__contains": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ + "rules": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "uuids": Object { + "userIds": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "metas": Array [ Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], "preferences": Object { "stripUnknown": Object { "objects": false, @@ -12478,7 +7610,42 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 4`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object { + "parentTaskId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 6`] = ` Object { "flags": Object { "default": Object { @@ -18190,7 +13357,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 5`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 7`] = ` Object { "flags": Object { "default": Object { @@ -23902,7 +19069,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 6`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 8`] = ` Object { "flags": Object { "default": Object { @@ -28046,20 +23213,6 @@ Object { ], "type": "alternatives", }, - "processName": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, "query": Object { "flags": Object { "default": null, @@ -29628,7 +24781,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 7`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 9`] = ` Object { "flags": Object { "default": Object { @@ -29668,26 +24821,82 @@ Object { ], "type": "array", }, - "computerName": Object { + "filter": Object { "flags": Object { - "default": [Function], + "default": Object { + "special": "deep", + }, "error": [Function], "presence": "optional", }, - "metas": Array [ - Object { - "x-oas-optional": true, + "keys": Object { + "ids": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - ], - "rules": Array [ - Object { - "args": Object { - "method": [Function], + "uuids": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "name": "custom", + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - ], - "type": "string", + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", }, "script": Object { "flags": Object { @@ -29740,6 +24949,69 @@ Object { ], "type": "string", }, + "outputDestination": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Local", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "None", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "SentinelCloud", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "SingularityXDR", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, "outputDirectory": Object { "flags": Object { "default": [Function], @@ -29986,7 +25258,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 8`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 10`] = ` Object { "flags": Object { "default": Object { @@ -30020,7 +25292,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 9`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 11`] = ` Object { "flags": Object { "default": Object { @@ -30054,7 +25326,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 10`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 12`] = ` Object { "flags": Object { "default": Object { diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index 58298ab7138f1..a15bd8b4c7c04 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -44,6 +44,7 @@ import { RelatedSavedObjects } from './related_saved_objects'; import { createActionEventLogRecordObject } from './create_action_event_log_record_object'; import { ActionExecutionError, ActionExecutionErrorReason } from './errors/action_execution_error'; import type { ActionsAuthorization } from '../authorization/actions_authorization'; +import { isBidirectionalConnectorType } from './bidirectional_connectors'; // 1,000,000 nanoseconds in 1 millisecond const Millis2Nanos = 1000 * 1000; @@ -698,8 +699,8 @@ const ensureAuthorizedToExecute = async ({ additionalPrivileges, actionTypeId, }); - } else if (actionTypeId === '.sentinelone') { - // SentinelOne sub-actions require that a user have `all` privilege to Actions and Connectors. + } else if (isBidirectionalConnectorType(actionTypeId)) { + // SentinelOne and Crowdstrike sub-actions require that a user have `all` privilege to Actions and Connectors. // This is a temporary solution until a more robust RBAC approach can be implemented for sub-actions await authorization.ensureAuthorized({ operation: 'execute', diff --git a/x-pack/plugins/observability_solution/observability/server/domain/services/compute_sli.ts b/x-pack/plugins/actions/server/lib/bidirectional_connectors.ts similarity index 52% rename from x-pack/plugins/observability_solution/observability/server/domain/services/compute_sli.ts rename to x-pack/plugins/actions/server/lib/bidirectional_connectors.ts index bafab79104134..49d33f9d016c3 100644 --- a/x-pack/plugins/observability_solution/observability/server/domain/services/compute_sli.ts +++ b/x-pack/plugins/actions/server/lib/bidirectional_connectors.ts @@ -5,14 +5,11 @@ * 2.0. */ -import { toHighPrecision } from '../../utils/number'; - -const NO_DATA = -1; - -export function computeSLI(good: number, total: number): number { - if (total === 0) { - return NO_DATA; +const BIDIRECTIONAL_CONNECTOR_TYPES = ['.sentinelone', '.crowdstrike']; +export const isBidirectionalConnectorType = (type: string | undefined) => { + if (!type) { + return false; } - return toHighPrecision(good / total); -} + return BIDIRECTIONAL_CONNECTOR_TYPES.includes(type); +}; diff --git a/x-pack/plugins/actions/server/sub_action_framework/sub_action_connector.ts b/x-pack/plugins/actions/server/sub_action_framework/sub_action_connector.ts index 3d7e6540fd74f..14e2ded5d1a38 100644 --- a/x-pack/plugins/actions/server/sub_action_framework/sub_action_connector.ts +++ b/x-pack/plugins/actions/server/sub_action_framework/sub_action_connector.ts @@ -22,6 +22,7 @@ import { finished } from 'stream/promises'; import { IncomingMessage } from 'http'; import { PassThrough } from 'stream'; import { KibanaRequest } from '@kbn/core-http-server'; +import { inspect } from 'util'; import { assertURL } from './helpers/validators'; import { ActionsConfigurationUtilities } from '../actions_config'; import { SubAction, SubActionRequestParams } from './types'; @@ -87,14 +88,16 @@ export abstract class SubActionConnector { } private getHeaders(headers?: AxiosRequestHeaders): Record { - return { ...headers, 'Content-Type': 'application/json' }; + return { 'Content-Type': 'application/json', ...headers }; } private validateResponse(responseSchema: Type, data: unknown) { try { responseSchema.validate(data); } catch (resValidationError) { - throw new Error(`Response validation failed (${resValidationError})`); + const err = new Error(`Response validation failed (${resValidationError})`); + this.logger.debug(`${err.message}:\n${inspect(data, { depth: 10 })}`); + throw err; } } diff --git a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx index 31a34e0e3655a..b4bcf95129b2b 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx +++ b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx @@ -47,7 +47,6 @@ import type { EventRate } from './use_categorize_request'; import { CategoryTable } from './category_table'; import { InformationText } from './information_text'; import { SamplingMenu } from './sampling_menu'; -import { TechnicalPreviewBadge } from './technical_preview_badge'; import { LoadingCategorization } from './loading_categorization'; import { useValidateFieldRequest } from './use_validate_category_field'; import { FieldValidationCallout } from './category_validation_callout'; @@ -296,9 +295,6 @@ export const LogCategorizationFlyout: FC = ({ - - - forceRefresh()} /> diff --git a/x-pack/plugins/alerting/kibana.jsonc b/x-pack/plugins/alerting/kibana.jsonc index f37b7c7d72676..9b6e523e27ebf 100644 --- a/x-pack/plugins/alerting/kibana.jsonc +++ b/x-pack/plugins/alerting/kibana.jsonc @@ -25,6 +25,7 @@ "management", "esUiShared", "unifiedSearch", + "embeddable" ], "optionalPlugins": [ "usageCollection", diff --git a/x-pack/plugins/alerting/public/lib/test_utils.tsx b/x-pack/plugins/alerting/public/lib/test_utils.tsx index 9c7b59a1527c4..4701cf988de2f 100644 --- a/x-pack/plugins/alerting/public/lib/test_utils.tsx +++ b/x-pack/plugins/alerting/public/lib/test_utils.tsx @@ -8,9 +8,8 @@ import React from 'react'; import { BehaviorSubject } from 'rxjs'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { I18nProvider } from '@kbn/i18n-react'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react'; import { Capabilities, CoreStart } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; @@ -80,13 +79,11 @@ export const createAppMockRenderer = ({ }, }; const AppWrapper: React.FC<{ children: React.ReactElement }> = React.memo(({ children }) => ( - - - - {children} - - - + + + {children} + + )); AppWrapper.displayName = 'AppWrapper'; 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 4e511db3ae402..8bd10fe722c1d 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 @@ -684,7 +684,7 @@ async function getUpdatedAttributesFromOperations({ actionsAuthorization: context.actionsAuthorization, connectorAdapterRegistry: context.connectorAdapterRegistry, systemActions: genSystemActions, - rule: { consumer: updatedRule.consumer }, + rule: { consumer: updatedRule.consumer, producer: ruleType.producer }, }); try { 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 6421726e9fb4c..d1b41de921952 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 @@ -155,7 +155,7 @@ export async function createRule( actionsAuthorization: context.actionsAuthorization, connectorAdapterRegistry: context.connectorAdapterRegistry, systemActions: data.systemActions, - rule: { consumer: data.consumer }, + rule: { consumer: data.consumer, producer: ruleType.producer }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts index 93701c344bc0e..eef9026a14cd4 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts @@ -176,7 +176,7 @@ async function updateWithOCC( actionsAuthorization: context.actionsAuthorization, connectorAdapterRegistry: context.connectorAdapterRegistry, systemActions: data.systemActions, - rule: { consumer: originalRuleSavedObject.attributes.consumer }, + rule: { consumer: originalRuleSavedObject.attributes.consumer, producer: ruleType.producer }, }); // Throw error if schedule interval is less than the minimum and we are enforcing it diff --git a/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.test.ts b/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.test.ts index 9f5d053cbc2b3..9394f6ef6964a 100644 --- a/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.test.ts +++ b/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.test.ts @@ -45,7 +45,7 @@ describe('getSystemActionKibanaPrivileges', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, systemActions: [], - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual([]); @@ -54,7 +54,7 @@ describe('getSystemActionKibanaPrivileges', () => { it('should return an empty array if systemActions are not defined', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual([]); @@ -64,7 +64,7 @@ describe('getSystemActionKibanaPrivileges', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, systemActions, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual(['my-priv:stackAlerts', 'my-priv-2:stackAlerts']); @@ -74,7 +74,7 @@ describe('getSystemActionKibanaPrivileges', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, systemActions: [...systemActions, { id: 'my-id-2', actionTypeId: '.not-valid', params: {} }], - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual(['my-priv:stackAlerts', 'my-priv-2:stackAlerts']); @@ -84,7 +84,7 @@ describe('getSystemActionKibanaPrivileges', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, systemActions: [...systemActions, { id: 'my-id-2', actionTypeId: '.no-priv', params: {} }], - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual(['my-priv:stackAlerts', 'my-priv-2:stackAlerts']); @@ -94,7 +94,7 @@ describe('getSystemActionKibanaPrivileges', () => { const privileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry: registry, systemActions: [systemActions[0], systemActions[0]], - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(privileges).toEqual(['my-priv:stackAlerts']); diff --git a/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.ts b/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.ts index 2ffaaf5ead318..0dd06e7776ba7 100644 --- a/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.ts +++ b/x-pack/plugins/alerting/server/connector_adapters/get_system_action_kibana_privileges.ts @@ -10,7 +10,7 @@ import { ConnectorAdapterRegistry } from './connector_adapter_registry'; interface Args { connectorAdapterRegistry: ConnectorAdapterRegistry; - rule: { consumer: string }; + rule: { consumer: string; producer: string }; systemActions?: RuleSystemAction[]; } @@ -22,7 +22,10 @@ export const getSystemActionKibanaPrivileges = ({ const kibanaPrivileges = systemActions .filter((action) => connectorAdapterRegistry.has(action.actionTypeId)) .map((action) => connectorAdapterRegistry.get(action.actionTypeId)) - .map((adapter) => adapter.getKibanaPrivileges?.({ consumer: rule.consumer }) ?? []) + .map( + (adapter) => + adapter.getKibanaPrivileges?.({ consumer: rule.consumer, producer: rule.producer }) ?? [] + ) .flat(); return Array.from(new Set(kibanaPrivileges)); diff --git a/x-pack/plugins/alerting/server/connector_adapters/types.ts b/x-pack/plugins/alerting/server/connector_adapters/types.ts index e33fe1613be68..e189c53cfecfe 100644 --- a/x-pack/plugins/alerting/server/connector_adapters/types.ts +++ b/x-pack/plugins/alerting/server/connector_adapters/types.ts @@ -9,7 +9,9 @@ import { ObjectType } from '@kbn/config-schema'; import type { RuleTypeParams, SanitizedRule } from '../../common'; import { CombinedSummarizedAlerts } from '../types'; -type Rule = Pick, 'id' | 'name' | 'tags' | 'consumer'>; +type Rule = Pick, 'id' | 'name' | 'tags' | 'consumer'> & { + producer: string; +}; export interface ConnectorAdapterParams { [x: string]: unknown; @@ -38,5 +40,5 @@ export interface ConnectorAdapter< */ ruleActionParamsSchema: ObjectType; buildActionParams: (args: BuildActionParamsArgs) => ConnectorParams; - getKibanaPrivileges?: ({ consumer }: { consumer: string }) => string[]; + getKibanaPrivileges?: (args: { consumer: string; producer: string }) => string[]; } diff --git a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap index bbfa2fb3bb28b..74d04a8707469 100644 --- a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap +++ b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap @@ -1579,7 +1579,9 @@ Object { "keys": Object { "anomalyDetectorTypes": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "items": Array [ Object { @@ -1628,6 +1630,11 @@ Object { "type": "alternatives", }, ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], "rules": Array [ Object { "args": Object { @@ -6201,6 +6208,52 @@ Object { }, Object { "properties": Object { + "alertSuppression": Object { + "additionalProperties": false, + "properties": Object { + "duration": Object { + "additionalProperties": false, + "properties": Object { + "unit": Object { + "enum": Array [ + "s", + "m", + "h", + ], + "type": "string", + }, + "value": Object { + "minimum": 1, + "type": "integer", + }, + }, + "required": Array [ + "value", + "unit", + ], + "type": "object", + }, + "groupBy": Object { + "items": Object { + "type": "string", + }, + "maxItems": 3, + "minItems": 1, + "type": "array", + }, + "missingFieldsStrategy": Object { + "enum": Array [ + "doNotSuppress", + "suppress", + ], + "type": "string", + }, + }, + "required": Array [ + "groupBy", + ], + "type": "object", + }, "dataViewId": Object { "type": "string", }, @@ -9534,6 +9587,75 @@ Object { "presence": "optional", }, "keys": Object { + "dependencies": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "actionGroupsToSuppressOn": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "ruleId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "array", + }, "sloId": Object { "flags": Object { "error": [Function], diff --git a/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.test.ts b/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.test.ts index f69213b4f3bf2..d5aeaa3f02bbe 100644 --- a/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.test.ts +++ b/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.test.ts @@ -50,7 +50,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions: [], actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(res).toBe(undefined); @@ -78,7 +78,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Action not-exist is not a system action"`); }); @@ -103,7 +103,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Action not-exist is not a system action"`); }); @@ -128,7 +128,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }) ).rejects.toThrowErrorMatchingInlineSnapshot( `"Invalid system action params. System action type: .test - [foo]: expected value of type [string] but got [undefined]"` @@ -161,7 +161,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Cannot use the same system action twice"`); }); @@ -213,7 +213,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(res).toBe(undefined); @@ -281,7 +281,7 @@ describe('validateAndAuthorizeSystemActions', () => { systemActions, actionsClient, actionsAuthorization, - rule: { consumer: 'stackAlerts' }, + rule: { consumer: 'stackAlerts', producer: 'alerts' }, }); expect(actionsAuthorization.ensureAuthorized).toBeCalledWith({ diff --git a/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.ts b/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.ts index 22ab3f32d3d7a..3c88797581ef1 100644 --- a/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.ts +++ b/x-pack/plugins/alerting/server/lib/validate_authorize_system_actions.ts @@ -17,7 +17,7 @@ interface Params { actionsAuthorization: ActionsAuthorization; connectorAdapterRegistry: ConnectorAdapterRegistry; systemActions: Array; - rule: { consumer: string }; + rule: { consumer: string; producer: string }; } export const validateAndAuthorizeSystemActions = async ({ @@ -73,7 +73,7 @@ export const validateAndAuthorizeSystemActions = async ({ const additionalPrivileges = getSystemActionKibanaPrivileges({ connectorAdapterRegistry, systemActions: systemActionsWithActionTypeId, - rule: { consumer: rule.consumer }, + rule: { consumer: rule.consumer, producer: rule.producer }, }); await actionsAuthorization.ensureAuthorized({ operation: 'execute', additionalPrivileges }); diff --git a/x-pack/plugins/alerting/server/routes/suggestions/fields_rules.ts b/x-pack/plugins/alerting/server/routes/suggestions/fields_rules.ts index 13add7518efc2..d7c210f5a7c41 100644 --- a/x-pack/plugins/alerting/server/routes/suggestions/fields_rules.ts +++ b/x-pack/plugins/alerting/server/routes/suggestions/fields_rules.ts @@ -53,10 +53,11 @@ export function registerFieldsRoute( }); } const indices = [ALERTING_CASES_SAVED_OBJECT_INDEX]; - const { elasticsearch } = await context.core; + const { elasticsearch, uiSettings } = await context.core; const indexPatternsFetcherAsInternalUser = new IndexPatternsFetcher( - elasticsearch.client.asInternalUser + elasticsearch.client.asInternalUser, + { uiSettingsClient: uiSettings.client } ); const { fields } = await indexPatternsFetcherAsInternalUser.getFieldsForWildcard({ pattern: indices, diff --git a/x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts b/x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts index 035e98db390a1..80dc3ff19c01f 100644 --- a/x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts +++ b/x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts @@ -46,7 +46,10 @@ describe('registerFieldsRoute', () => { expect( await handler( - { ...context, core: { elasticsearch: { client: { asInternalUser: {} } } } }, + { + ...context, + core: { elasticsearch: { client: { asInternalUser: {} } }, uiSettings: { client: {} } }, + }, req, res ) diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts index 47022933e93a1..b22d7b70a9d49 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts @@ -2474,6 +2474,7 @@ describe('Execution Handler', () => { name: rule.name, tags: rule.tags, consumer: 'test-consumer', + producer: 'alerts', }, ruleUrl: 'https://example.com/s/test1/app/management/insightsAndAlerting/triggersActions/rule/1', diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts index e268162b88f1b..72dd7a06bb5fd 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts @@ -88,6 +88,7 @@ interface RunSystemActionArgs { connectorAdapter: ConnectorAdapter; summarizedAlerts: CombinedSummarizedAlerts; rule: SanitizedRule; + ruleProducer: string; spaceId: string; bulkActions: EnqueueExecutionOptions[]; } @@ -318,6 +319,7 @@ export class ExecutionHandler< connectorAdapter, summarizedAlerts, rule: this.rule, + ruleProducer: this.ruleType.producer, spaceId, bulkActions, }); @@ -453,13 +455,20 @@ export class ExecutionHandler< connectorAdapter, summarizedAlerts, rule, + ruleProducer, bulkActions, }: RunSystemActionArgs): Promise { const ruleUrl = this.buildRuleUrl(spaceId); const connectorAdapterActionParams = connectorAdapter.buildActionParams({ alerts: summarizedAlerts, - rule: { id: rule.id, tags: rule.tags, name: rule.name, consumer: rule.consumer }, + rule: { + id: rule.id, + tags: rule.tags, + name: rule.name, + consumer: rule.consumer, + producer: ruleProducer, + }, ruleUrl: ruleUrl?.absoluteUrl, spaceId, params: action.params, diff --git a/x-pack/plugins/alerting/tsconfig.json b/x-pack/plugins/alerting/tsconfig.json index 2158a9d7d33a8..ded359714bd56 100644 --- a/x-pack/plugins/alerting/tsconfig.json +++ b/x-pack/plugins/alerting/tsconfig.json @@ -48,7 +48,6 @@ "@kbn/kibana-react-plugin", "@kbn/management-plugin", "@kbn/es-ui-shared-plugin", - "@kbn/i18n-react", "@kbn/ui-theme", "@kbn/core-doc-links-server-mocks", "@kbn/doc-links", @@ -70,7 +69,6 @@ "@kbn/core-http-router-server-internal", "@kbn/core-execution-context-server-mocks", "@kbn/react-kibana-context-render", - "@kbn/react-kibana-context-theme" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/banners/kibana.jsonc b/x-pack/plugins/banners/kibana.jsonc index ffd3ced829961..75d275a6bde4a 100644 --- a/x-pack/plugins/banners/kibana.jsonc +++ b/x-pack/plugins/banners/kibana.jsonc @@ -17,8 +17,6 @@ "optionalPlugins": [ "screenshotMode" ], - "requiredBundles": [ - "kibanaReact" - ] + "requiredBundles": [] } } diff --git a/x-pack/plugins/banners/public/plugin.tsx b/x-pack/plugins/banners/public/plugin.tsx index 8d6d90e088a99..94c7d6c074379 100644 --- a/x-pack/plugins/banners/public/plugin.tsx +++ b/x-pack/plugins/banners/public/plugin.tsx @@ -7,20 +7,20 @@ import React from 'react'; import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { Banner } from './components'; import { getBannerInfo } from './get_banner_info'; import { BannerPluginStartDependencies } from './types'; export class BannersPlugin implements Plugin<{}, {}, {}, BannerPluginStartDependencies> { - constructor(context: PluginInitializerContext) {} + constructor(_context: PluginInitializerContext) {} setup({}: CoreSetup<{}, {}>) { return {}; } start( - { chrome, uiSettings, http }: CoreStart, + { chrome, http, ...startServices }: CoreStart, { screenshotMode }: BannerPluginStartDependencies ) { if (!(screenshotMode?.isScreenshotMode() ?? false)) { @@ -28,7 +28,7 @@ export class BannersPlugin implements Plugin<{}, {}, {}, BannerPluginStartDepend ({ allowed, banner }) => { if (allowed && banner.placement === 'top') { chrome.setHeaderBanner({ - content: toMountPoint(), + content: toMountPoint(, startServices), }); } }, diff --git a/x-pack/plugins/banners/tsconfig.json b/x-pack/plugins/banners/tsconfig.json index 019a4ebd7da88..978c977d0fe2c 100644 --- a/x-pack/plugins/banners/tsconfig.json +++ b/x-pack/plugins/banners/tsconfig.json @@ -6,12 +6,12 @@ "include": ["public/**/*", "server/**/*", "common/**/*", "../../../typings/**/*"], "kbn_references": [ "@kbn/core", - "@kbn/kibana-react-plugin", "@kbn/screenshot-mode-plugin", "@kbn/licensing-plugin", "@kbn/config-schema", "@kbn/i18n", "@kbn/shared-ux-markdown", + "@kbn/react-kibana-mount", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/canvas/.prettierrc b/x-pack/plugins/canvas/.prettierrc deleted file mode 100644 index f03fb6e0e808c..0000000000000 --- a/x-pack/plugins/canvas/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "semi": true, - "printWidth": 100, - "trailingComma": "es5" -} diff --git a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx index 2c739cfe1b984..0fa30647b60ac 100644 --- a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { useCallback } from 'react'; +import { useCallback, useMemo } from 'react'; import { useApplication } from '../../../common/lib/kibana/use_application'; import { CaseStatuses } from '../../../../common/types/domain'; import type { AllCasesSelectorModalProps } from '.'; @@ -158,9 +158,11 @@ export const useCasesAddToExistingCaseModal = ({ [closeModal, dispatch, handleOnRowClick, onClose, onCreateCaseClicked] ); - return { - open: openModal, - close: closeModal, - }; + return useMemo(() => { + return { + open: openModal, + close: closeModal, + }; + }, [openModal, closeModal]); }; export type UseCasesAddToExistingCaseModal = typeof useCasesAddToExistingCaseModal; diff --git a/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx index 66b808dca5591..199b0eebfb2c6 100644 --- a/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/severity_filter.test.tsx @@ -10,12 +10,11 @@ import React from 'react'; import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import userEvent from '@testing-library/user-event'; -import { screen, waitFor } from '@testing-library/react'; +import { screen, waitFor, within } from '@testing-library/react'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import { SeverityFilter } from './severity_filter'; -// FLAKY: https://github.com/elastic/kibana/issues/176336 -describe.skip('Severity form field', () => { +describe('Severity form field', () => { const onChange = jest.fn(); let appMockRender: AppMockRenderer; const props = { @@ -29,25 +28,38 @@ describe.skip('Severity form field', () => { it('renders', async () => { appMockRender.render(); - expect(await screen.findByTestId('options-filter-popover-button-severity')).toBeInTheDocument(); - expect(await screen.findByTestId('options-filter-popover-button-severity')).not.toBeDisabled(); - userEvent.click(await screen.findByRole('button', { name: 'Severity' })); + const popoverButton = await screen.findByTestId('options-filter-popover-button-severity'); + expect(popoverButton).toBeInTheDocument(); + expect(popoverButton).not.toBeDisabled(); + + userEvent.click(popoverButton); + await waitForEuiPopoverOpen(); - expect(await screen.findByRole('option', { name: CaseSeverity.LOW })).toBeInTheDocument(); - expect(await screen.findByRole('option', { name: CaseSeverity.MEDIUM })).toBeInTheDocument(); - expect(await screen.findByRole('option', { name: CaseSeverity.HIGH })).toBeInTheDocument(); - expect(await screen.findByRole('option', { name: CaseSeverity.CRITICAL })).toBeInTheDocument(); - expect((await screen.findAllByRole('option')).length).toBe(4); + const allOptions = await within(await screen.findByTestId('euiSelectableList')).findAllByRole( + 'option' + ); + + expect(allOptions.length).toBe(4); + expect(allOptions[0]).toHaveAttribute('title', CaseSeverity.LOW); + expect(allOptions[1]).toHaveAttribute('title', CaseSeverity.MEDIUM); + expect(allOptions[2]).toHaveAttribute('title', CaseSeverity.HIGH); + expect(allOptions[3]).toHaveAttribute('title', CaseSeverity.CRITICAL); }); it('selects the correct value when changed', async () => { appMockRender.render(); userEvent.click(await screen.findByRole('button', { name: 'Severity' })); + await waitForEuiPopoverOpen(); - userEvent.click(await screen.findByRole('option', { name: 'high' })); + + userEvent.click( + await within(await screen.findByTestId('euiSelectableList')).findByRole('option', { + name: 'high', + }) + ); await waitFor(() => { expect(onChange).toHaveBeenCalledWith({ diff --git a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx index 66e8eca5b0784..e544cc905cf72 100644 --- a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx @@ -19,8 +19,7 @@ const LABELS = { inProgress: i18n.STATUS_IN_PROGRESS, }; -// FLAKY: https://github.com/elastic/kibana/issues/177334 -describe.skip('StatusFilter', () => { +describe('StatusFilter', () => { const onChange = jest.fn(); const defaultProps = { selectedOptionKeys: [], @@ -37,24 +36,24 @@ describe.skip('StatusFilter', () => { it('should render', async () => { render(); - expect(screen.getByTestId('options-filter-popover-button-status')).toBeInTheDocument(); - expect(screen.getByTestId('options-filter-popover-button-status')).not.toBeDisabled(); + expect(await screen.findByTestId('options-filter-popover-button-status')).toBeInTheDocument(); + expect(await screen.findByTestId('options-filter-popover-button-status')).not.toBeDisabled(); - userEvent.click(screen.getByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByRole('button', { name: 'Status' })); await waitForEuiPopoverOpen(); - expect(screen.getByRole('option', { name: LABELS.open })).toBeInTheDocument(); - expect(screen.getByRole('option', { name: LABELS.inProgress })).toBeInTheDocument(); - expect(screen.getByRole('option', { name: LABELS.closed })).toBeInTheDocument(); - expect(screen.getAllByRole('option').length).toBe(3); + expect(await screen.findByRole('option', { name: LABELS.open })).toBeInTheDocument(); + expect(await screen.findByRole('option', { name: LABELS.inProgress })).toBeInTheDocument(); + expect(await screen.findByRole('option', { name: LABELS.closed })).toBeInTheDocument(); + expect((await screen.findAllByRole('option')).length).toBe(3); }); it('should call onStatusChanged when changing status to open', async () => { render(); - userEvent.click(screen.getByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByRole('button', { name: 'Status' })); await waitForEuiPopoverOpen(); - userEvent.click(screen.getByRole('option', { name: LABELS.open })); + userEvent.click(await screen.findByRole('option', { name: LABELS.open })); await waitFor(() => { expect(onChange).toHaveBeenCalledWith({ @@ -67,11 +66,11 @@ describe.skip('StatusFilter', () => { it('should not render hidden statuses', async () => { render(); - userEvent.click(screen.getByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByRole('button', { name: 'Status' })); await waitForEuiPopoverOpen(); - expect(screen.getAllByRole('option')).toHaveLength(2); - expect(screen.getByRole('option', { name: LABELS.open })).toBeInTheDocument(); - expect(screen.getByRole('option', { name: LABELS.inProgress })).toBeInTheDocument(); + expect(await screen.findAllByRole('option')).toHaveLength(2); + expect(await screen.findByRole('option', { name: LABELS.open })).toBeInTheDocument(); + expect(await screen.findByRole('option', { name: LABELS.inProgress })).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.tsx b/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.tsx index e6d5bd2fc2a0b..ea2290bb49633 100644 --- a/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.tsx +++ b/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.tsx @@ -6,7 +6,7 @@ */ import type React from 'react'; -import { useCallback } from 'react'; +import { useCallback, useMemo } from 'react'; import type { CaseAttachmentsWithoutOwner } from '../../../types'; import { useCasesToast } from '../../../common/use_cases_toast'; import type { CaseUI } from '../../../containers/types'; @@ -88,10 +88,12 @@ export const useCasesAddToNewCaseFlyout = ({ onClose, ] ); - return { - open: openFlyout, - close: closeFlyout, - }; + return useMemo(() => { + return { + open: openFlyout, + close: closeFlyout, + }; + }, [openFlyout, closeFlyout]); }; export type UseCasesAddToNewCaseFlyout = typeof useCasesAddToNewCaseFlyout; diff --git a/x-pack/plugins/cases/public/components/system_actions/cases/translations.ts b/x-pack/plugins/cases/public/components/system_actions/cases/translations.ts index 012c5c6fe681c..2d670a2ccb3c8 100644 --- a/x-pack/plugins/cases/public/components/system_actions/cases/translations.ts +++ b/x-pack/plugins/cases/public/components/system_actions/cases/translations.ts @@ -48,18 +48,6 @@ export const DAYS = (timeValue: string) => values: { timeValue }, }); -export const YEARS = (timeValue: string) => - i18n.translate('xpack.cases.systemActions.casesConnector.yearsLabel', { - defaultMessage: '{timeValue, plural, one {year} other {years}}', - values: { timeValue }, - }); - -export const MONTHS = (timeValue: string) => - i18n.translate('xpack.cases.systemActions.casesConnector.monthsLabel', { - defaultMessage: '{timeValue, plural, one {month} other {months}}', - values: { timeValue }, - }); - export const WEEKS = (timeValue: string) => i18n.translate('xpack.cases.systemActions.casesConnector.weeksLabel', { defaultMessage: '{timeValue, plural, one {week} other {weeks}}', diff --git a/x-pack/plugins/cases/public/containers/configure/use_action_types.test.tsx b/x-pack/plugins/cases/public/containers/configure/use_action_types.test.tsx index fcb1fa0fe59a8..5718b07438a98 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_action_types.test.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_action_types.test.tsx @@ -15,8 +15,7 @@ import { useToasts } from '../../common/lib/kibana'; jest.mock('./api'); jest.mock('../../common/lib/kibana'); -// FLAKY: https://github.com/elastic/kibana/issues/178760 -describe.skip('useActionTypes', () => { +describe('useActionTypes', () => { let appMockRenderer: AppMockRenderer; beforeEach(() => { jest.clearAllMocks(); @@ -25,25 +24,29 @@ describe.skip('useActionTypes', () => { it('should fetch action types', async () => { const spy = jest.spyOn(api, 'fetchActionTypes'); - const { waitForNextUpdate } = renderHook(() => useGetActionTypes(), { + + renderHook(() => useGetActionTypes(), { wrapper: appMockRenderer.AppWrapper, }); - await waitForNextUpdate(); expect(spy).toHaveBeenCalledWith({ signal: expect.any(AbortSignal) }); }); - it('should show a toast eror message if failed to fetch', async () => { - const spy = jest.spyOn(api, 'fetchActionTypes'); - spy.mockImplementation(() => { + it('should show a toast error message if failed to fetch', async () => { + const spyOnFetchActionTypes = jest.spyOn(api, 'fetchActionTypes'); + + spyOnFetchActionTypes.mockRejectedValue(() => { throw new Error('Something went wrong'); }); + const addErrorMock = jest.fn(); + (useToasts as jest.Mock).mockReturnValue({ addError: addErrorMock }); + const { waitForNextUpdate } = renderHook(() => useGetActionTypes(), { wrapper: appMockRenderer.AppWrapper, }); - await waitForNextUpdate(); + await waitForNextUpdate({ timeout: 2000 }); expect(addErrorMock).toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/cases/server/connectors/cases/README.md b/x-pack/plugins/cases/server/connectors/cases/README.md index de04640dcf181..bc5cbf3415440 100644 --- a/x-pack/plugins/cases/server/connectors/cases/README.md +++ b/x-pack/plugins/cases/server/connectors/cases/README.md @@ -78,7 +78,7 @@ top --> bottom ## Grouping -The case action accepts an array of alerts provided by the connector adapter. Duplicate alerts will not be attached to the same case. The case action groups the alerts by the grouping field configured by the user. For example, if the grouping field is `host.name` the case action will group the alerts by the values of the `host.name` field. Users may define more than one grouping field. In this case, the grouping will be done by multiple fields. The grouping is performed in memory by the case action as the number of alerts is expected to be low on average and they are already loaded in memory by the alerting framework. +The case action accepts an array of alerts provided by the connector adapter. Duplicate alerts will not be attached to the same case. The case action groups the alerts by the grouping field configured by the user. For example, if the grouping field is `host.name` the case action will group the alerts by the values of the `host.name` field. In this case, the grouping will be done by multiple fields. The grouping is performed in memory by the case action as the number of alerts is expected to be low on average and they are already loaded in memory by the alerting framework. ```mermaid flowchart LR diff --git a/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.test.ts b/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.test.ts index e09cf40487dc6..8d4f778d86f5b 100644 --- a/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.test.ts +++ b/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.test.ts @@ -239,82 +239,94 @@ describe('CasesConnectorExecutor', () => { }); expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledTimes(1); - expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledWith({ - cases: [ - { - id: 'mock-id-1', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `A` and `dest.ip` equals `0.0.0.1`', - owner: 'cases', - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:A', - 'dest.ip:0.0.0.1', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', - }, - customFields: [], - }, - { - id: 'mock-id-2', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `B` and `dest.ip` equals `0.0.0.1`', - owner: 'cases', - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:B', - 'dest.ip:0.0.0.1', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', - }, - customFields: [], - }, - { - id: 'mock-id-3', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `B` and `dest.ip` equals `0.0.0.3`', - owner: 'cases', - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:B', - 'dest.ip:0.0.0.3', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', + expect(casesClientMock.cases.bulkCreate.mock.calls).toMatchInlineSnapshot(` + Array [ + Array [ + Object { + "cases": Array [ + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: A\` and \`dest.ip: 0.0.0.1\`.", + "id": "mock-id-1", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:A", + "dest.ip", + "dest.ip:0.0.0.1", + "rule", + "test", + ], + "title": "Test rule - Grouping by A & 0.0.0.1 (Auto-created)", + }, + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: B\` and \`dest.ip: 0.0.0.1\`.", + "id": "mock-id-2", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:B", + "dest.ip", + "dest.ip:0.0.0.1", + "rule", + "test", + ], + "title": "Test rule - Grouping by B & 0.0.0.1 (Auto-created)", + }, + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: B\` and \`dest.ip: 0.0.0.3\`.", + "id": "mock-id-3", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:B", + "dest.ip", + "dest.ip:0.0.0.3", + "rule", + "test", + ], + "title": "Test rule - Grouping by B & 0.0.0.3 (Auto-created)", + }, + ], }, - customFields: [], - }, - ], - }); + ], + ] + `); expectCasesToHaveTheCorrectAlertsAttachedWithGrouping(casesClientMock); }); @@ -538,34 +550,38 @@ describe('CasesConnectorExecutor', () => { await connectorExecutor.execute(params); - expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledWith({ - cases: [ - { - id: 'mock-id-3', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `B` and `dest.ip` equals `0.0.0.3`', - owner: 'cases', - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:B', - 'dest.ip:0.0.0.3', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', + expect(casesClientMock.cases.bulkCreate.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "cases": Array [ + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: B\` and \`dest.ip: 0.0.0.3\`.", + "id": "mock-id-3", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:B", + "dest.ip", + "dest.ip:0.0.0.3", + "rule", + "test", + ], + "title": "Test rule - Grouping by B & 0.0.0.3 (Auto-created)", }, - customFields: [], - }, - ], - }); + ], + } + `); }); it('does not add the rule URL to the description if the ruleUrl is null', async () => { @@ -591,8 +607,8 @@ describe('CasesConnectorExecutor', () => { const description = casesClientMock.cases.bulkCreate.mock.calls[0][0].cases[0].description; - expect(description).toBe( - 'This case is auto-created by Test rule. \n\n Grouping: `host.name` equals `A` and `dest.ip` equals `0.0.0.1`' + expect(description).toMatchInlineSnapshot( + `"This case was created by the rule Test rule. The assigned alerts are grouped by \`host.name: A\` and \`dest.ip: 0.0.0.1\`."` ); }); @@ -628,8 +644,8 @@ describe('CasesConnectorExecutor', () => { const description = casesClientMock.cases.bulkCreate.mock.calls[0][0].cases[0].description; - expect(description).toBe( - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `foo` equals `["bar",1,true,{}]` and `bar.foo` equals `test` and `baz` equals `my value`' + expect(description).toMatchInlineSnapshot( + `"This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`foo: [\\"bar\\",1,true,{}]\` and \`bar.foo: test\` and \`baz: my value\`."` ); }); @@ -651,7 +667,7 @@ describe('CasesConnectorExecutor', () => { await connectorExecutor.execute({ ...params, groupingBy: [] }); const title = casesClientMock.cases.bulkCreate.mock.calls[0][0].cases[0].title; - expect(title).toBe('Test rule (2) (Auto-created)'); + expect(title).toMatchInlineSnapshot(`"Test rule (2) (Auto-created)"`); }); it(`trims the title correctly if the rule title including the suffix is bigger than ${MAX_TITLE_LENGTH}`, async () => { @@ -677,8 +693,10 @@ describe('CasesConnectorExecutor', () => { const title = casesClientMock.cases.bulkCreate.mock.calls[0][0].cases[0].title; - expect(title.length).toBe(MAX_TITLE_LENGTH); - expect(title.includes('(2) (Auto-created)')).toBe(true); + expect(title.length).toBeLessThanOrEqual(MAX_TITLE_LENGTH); + expect(title).toMatchInlineSnapshot( + `"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... (2) (Auto-created)"` + ); }); it(`trims tags that are bigger than ${MAX_LENGTH_PER_TAG} characters`, async () => { @@ -706,7 +724,9 @@ describe('CasesConnectorExecutor', () => { expect(tags).toEqual([ 'auto-generated', 'rule:rule-test-id', + 'host.name', 'host.name:A', + 'dest.ip', 'dest.ip:0.0.0.1', 'a'.repeat(MAX_LENGTH_PER_TAG), ]); @@ -736,14 +756,18 @@ describe('CasesConnectorExecutor', () => { const systemTags = [ 'auto-generated', 'rule:rule-test-id', + 'host.name', 'host.name:A', + 'dest.ip', 'dest.ip:0.0.0.1', ]; expect(tags).toEqual([ 'auto-generated', 'rule:rule-test-id', + 'host.name', 'host.name:A', + 'dest.ip', 'dest.ip:0.0.0.1', ...Array(MAX_TAGS_PER_CASE - systemTags.length).fill('foo'), ]); @@ -783,8 +807,11 @@ describe('CasesConnectorExecutor', () => { expect(tags).toEqual([ 'auto-generated', 'rule:rule-test-id', + 'foo', 'foo:["bar",1,true,{}]', + 'bar.foo', 'bar.foo:test', + 'baz', 'baz:my value', 'rule', 'test', @@ -838,34 +865,38 @@ describe('CasesConnectorExecutor', () => { { payload: { counter: 2 }, recordId: 'so-oracle-record-0', version: 'so-version-0' }, ]); - expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledWith({ - cases: [ - { - id: 'mock-id-4', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `A` and `dest.ip` equals `0.0.0.1`', - owner: 'cases', - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:A', - 'dest.ip:0.0.0.1', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', + expect(casesClientMock.cases.bulkCreate.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "cases": Array [ + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: A\` and \`dest.ip: 0.0.0.1\`.", + "id": "mock-id-4", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:A", + "dest.ip", + "dest.ip:0.0.0.1", + "rule", + "test", + ], + "title": "Test rule - Grouping by A & 0.0.0.1 (Auto-created)", }, - customFields: [], - }, - ], - }); + ], + } + `); }); describe('Custom Fields', () => { @@ -905,28 +936,6 @@ describe('CasesConnectorExecutor', () => { ], }, ]; - const expectedCustomFieldValues = [ - { - key: 'first_key', - type: CustomFieldTypes.TEXT as const, - value: 'default value', - }, - { - key: 'second_key', - type: CustomFieldTypes.TOGGLE as const, - value: true, - }, - { - key: 'third_key', - type: CustomFieldTypes.TEXT as const, - value: 'N/A', - }, - { - key: 'fourth_key', - type: CustomFieldTypes.TOGGLE as const, - value: false, - }, - ]; it('creates non existing cases with required custom fields correctly', async () => { casesClientMock.configure.get = jest.fn().mockResolvedValue(mockConfiguration); @@ -946,34 +955,59 @@ describe('CasesConnectorExecutor', () => { await connectorExecutor.execute(params); - expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledWith({ - cases: [ - { - id: 'mock-id-3', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `B` and `dest.ip` equals `0.0.0.3`', - owner: mockOwner, - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:B', - 'dest.ip:0.0.0.3', - ...rule.tags, - ], - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', + expect(casesClientMock.cases.bulkCreate.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "cases": Array [ + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [ + Object { + "key": "first_key", + "type": "text", + "value": "default value", + }, + Object { + "key": "second_key", + "type": "toggle", + "value": true, + }, + Object { + "key": "third_key", + "type": "text", + "value": "N/A", + }, + Object { + "key": "fourth_key", + "type": "toggle", + "value": false, + }, + ], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: B\` and \`dest.ip: 0.0.0.3\`.", + "id": "mock-id-3", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:B", + "dest.ip", + "dest.ip:0.0.0.3", + "rule", + "test", + ], + "title": "Test rule - Grouping by B & 0.0.0.3 (Auto-created)", }, - customFields: expectedCustomFieldValues, - }, - ], - }); + ], + } + `); }); it('creates new cases with required custom fields if reopenClosedCases=false and there are closed cases', async () => { @@ -995,35 +1029,59 @@ describe('CasesConnectorExecutor', () => { { payload: { counter: 2 }, recordId: 'so-oracle-record-0', version: 'so-version-0' }, ]); - expect(casesClientMock.cases.bulkCreate).toHaveBeenCalledWith({ - cases: [ - { - id: 'mock-id-4', - title: 'Test rule (Auto-created)', - description: - 'This case is auto-created by [Test rule](https://example.com/rules/rule-test-id). \n\n Grouping: `host.name` equals `A` and `dest.ip` equals `0.0.0.1`', - owner: mockOwner, - settings: { - syncAlerts: false, - }, - tags: [ - 'auto-generated', - 'rule:rule-test-id', - 'host.name:A', - 'dest.ip:0.0.0.1', - ...rule.tags, - ], - - connector: { - fields: null, - id: 'none', - name: 'none', - type: '.none', + expect(casesClientMock.cases.bulkCreate.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "cases": Array [ + Object { + "connector": Object { + "fields": null, + "id": "none", + "name": "none", + "type": ".none", + }, + "customFields": Array [ + Object { + "key": "first_key", + "type": "text", + "value": "default value", + }, + Object { + "key": "second_key", + "type": "toggle", + "value": true, + }, + Object { + "key": "third_key", + "type": "text", + "value": "N/A", + }, + Object { + "key": "fourth_key", + "type": "toggle", + "value": false, + }, + ], + "description": "This case was created by the rule ['Test rule'](https://example.com/rules/rule-test-id). The assigned alerts are grouped by \`host.name: A\` and \`dest.ip: 0.0.0.1\`.", + "id": "mock-id-4", + "owner": "cases", + "settings": Object { + "syncAlerts": false, + }, + "tags": Array [ + "auto-generated", + "rule:rule-test-id", + "host.name", + "host.name:A", + "dest.ip", + "dest.ip:0.0.0.1", + "rule", + "test", + ], + "title": "Test rule - Grouping by A & 0.0.0.1 (Auto-created)", }, - customFields: expectedCustomFieldValues, - }, - ], - }); + ], + } + `); }); }); }); diff --git a/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.ts b/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.ts index a5f07a9b65fc7..15435cc8be76c 100644 --- a/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.ts +++ b/x-pack/plugins/cases/server/connectors/cases/cases_connector_executor.ts @@ -40,6 +40,12 @@ import type { CasesService } from './cases_service'; import type { CasesClient } from '../../client'; import type { BulkCreateArgs as BulkCreateAlertsReq } from '../../client/attachments/types'; import { CasesConnectorError } from './cases_connector_error'; +import { + AUTO_CREATED_TITLE, + CASE_CREATED_BY_RULE_DESC, + GROUPED_BY_DESC, + GROUPED_BY_TITLE, +} from './translations'; interface CasesConnectorExecutorParams { logger: Logger; @@ -717,13 +723,7 @@ export class CasesConnectorExecutor { customFieldsConfigurations?: CustomFieldsConfiguration ): Omit & { id: string } { const { grouping, caseId, oracleRecord } = groupingData; - - const ruleName = params.rule.ruleUrl - ? `[${params.rule.name}](${params.rule.ruleUrl})` - : params.rule.name; - - const groupingDescription = this.getGroupingDescription(grouping); - const description = `This case is auto-created by ${ruleName}. \n\n Grouping: ${groupingDescription}`; + const flattenGrouping = getFlattenedObject(grouping); const requiredCustomFields = buildRequiredCustomFieldsForRequest(customFieldsConfigurations); this.logger.debug( @@ -739,9 +739,9 @@ export class CasesConnectorExecutor { return { id: caseId, - description, - tags: this.getCaseTags(params, grouping), - title: this.getCasesTitle(params.rule.name, oracleRecord.counter), + description: this.getCaseDescription(params, flattenGrouping), + tags: this.getCaseTags(params, flattenGrouping), + title: this.getCasesTitle(params, flattenGrouping, oracleRecord.counter), connector: { id: 'none', name: 'none', type: ConnectorTypes.none, fields: null }, /** * TODO: Turn on for Security solution @@ -752,28 +752,56 @@ export class CasesConnectorExecutor { }; } - private getCasesTitle(ruleName: string, oracleCounter: number) { - const suffix = - oracleCounter === INITIAL_ORACLE_RECORD_COUNTER - ? '(Auto-created)' - : `(${oracleCounter}) (Auto-created)`; + private getCasesTitle( + params: CasesConnectorRunParams, + grouping: GroupedAlerts['grouping'], + oracleCounter: number + ) { + const totalDots = 3; + + const groupingDescription = Object.entries(grouping) + .map(([_, value]) => { + return convertValueToString(value); + }) + .join(' & '); + + const suffix = `${ + groupingDescription.length > 0 ? ` - ${GROUPED_BY_TITLE(groupingDescription)}` : '' + }${ + oracleCounter > INITIAL_ORACLE_RECORD_COUNTER ? ` (${oracleCounter})` : '' + } (${AUTO_CREATED_TITLE})`; - const ruleNameTrimmed = ruleName.slice(0, MAX_TITLE_LENGTH - suffix.length - 1); + const ruleNameTrimmed = params.rule.name.slice( + 0, + MAX_TITLE_LENGTH - suffix.length - totalDots - 1 + ); - return `${ruleNameTrimmed} ${suffix}`; + const ruleNameTrimmedWithDots = + params.rule.name.length > ruleNameTrimmed.length + ? `${ruleNameTrimmed}${'.'.repeat(totalDots)}` + : ruleNameTrimmed; + + return `${ruleNameTrimmedWithDots}${suffix}`; } - private getGroupingDescription(grouping: GroupedAlerts['grouping']) { - const flattenGrouping = getFlattenedObject(grouping); + private getCaseDescription(params: CasesConnectorRunParams, grouping: GroupedAlerts['grouping']) { + const ruleName = params.rule.ruleUrl + ? `['${params.rule.name}'](${params.rule.ruleUrl})` + : params.rule.name; - return Object.entries(flattenGrouping) - .map(([key, value]) => { - const keyAsCodeBlock = `\`${key}\``; - const valueAsCodeBlock = `\`${convertValueToString(value)}\``; + const description = `${CASE_CREATED_BY_RULE_DESC(ruleName)}.`; - return `${keyAsCodeBlock} equals ${valueAsCodeBlock}`; + const groupingDescription = Object.entries(grouping) + .map(([key, value]) => { + return `\`${key}: ${convertValueToString(value)}\``; }) .join(' and '); + + if (groupingDescription.length > 0) { + return `${description} ${GROUPED_BY_DESC(groupingDescription)}.`; + } + + return description; } private getCaseTags(params: CasesConnectorRunParams, grouping: GroupedAlerts['grouping']) { @@ -789,11 +817,10 @@ export class CasesConnectorExecutor { .map((tag) => tag.slice(0, MAX_LENGTH_PER_TAG)); } - private getGroupingAsTags(grouping: GroupedAlerts['grouping']) { - const flattenGrouping = getFlattenedObject(grouping); - return Object.entries(flattenGrouping).map( - ([key, value]) => `${key}:${convertValueToString(value)}` - ); + private getGroupingAsTags(grouping: GroupedAlerts['grouping']): string[] { + return Object.entries(grouping) + .map(([key, value]) => [key, `${key}:${convertValueToString(value)}`]) + .flat(); } private async handleClosedCases( diff --git a/x-pack/plugins/cases/server/connectors/cases/index.test.ts b/x-pack/plugins/cases/server/connectors/cases/index.test.ts index ee559b335ef20..bd5e2ea71098f 100644 --- a/x-pack/plugins/cases/server/connectors/cases/index.test.ts +++ b/x-pack/plugins/cases/server/connectors/cases/index.test.ts @@ -65,6 +65,7 @@ describe('getCasesConnectorType', () => { name: 'my rule name', tags: ['my-tag'], consumer: 'test-consumer', + producer: 'test-producer', }; const getParams = (overrides = {}) => ({ @@ -272,7 +273,12 @@ describe('getCasesConnectorType', () => { it('constructs the correct privileges from the consumer', () => { const adapter = getCasesConnectorAdapter(); - expect(adapter.getKibanaPrivileges?.({ consumer: AlertConsumers.SIEM })).toEqual([ + expect( + adapter.getKibanaPrivileges?.({ + consumer: AlertConsumers.SIEM, + producer: AlertConsumers.SIEM, + }) + ).toEqual([ 'cases:securitySolution/createCase', 'cases:securitySolution/updateCase', 'cases:securitySolution/deleteCase', @@ -283,6 +289,26 @@ describe('getCasesConnectorType', () => { 'cases:securitySolution/findConfigurations', ]); }); + + it('constructs the correct privileges from the producer if the consumer is not found', () => { + const adapter = getCasesConnectorAdapter(); + + expect( + adapter.getKibanaPrivileges?.({ + consumer: 'alerting', + producer: AlertConsumers.LOGS, + }) + ).toEqual([ + 'cases:observability/createCase', + 'cases:observability/updateCase', + 'cases:observability/deleteCase', + 'cases:observability/pushCase', + 'cases:observability/createComment', + 'cases:observability/updateComment', + 'cases:observability/deleteComment', + 'cases:observability/findConfigurations', + ]); + }); }); }); }); diff --git a/x-pack/plugins/cases/server/connectors/cases/index.ts b/x-pack/plugins/cases/server/connectors/cases/index.ts index bec6fdcb97b69..6e9e6601cecc7 100644 --- a/x-pack/plugins/cases/server/connectors/cases/index.ts +++ b/x-pack/plugins/cases/server/connectors/cases/index.ts @@ -80,7 +80,7 @@ export const getCasesConnectorAdapter = (): ConnectorAdapter< buildActionParams: ({ alerts, rule, params, spaceId, ruleUrl }) => { const caseAlerts = [...alerts.new.data, ...alerts.ongoing.data]; - const owner = getOwnerFromRuleConsumer(rule.consumer); + const owner = getOwnerFromRuleConsumerProducer(rule.consumer, rule.producer); const subActionParams = { alerts: caseAlerts, @@ -94,17 +94,17 @@ export const getCasesConnectorAdapter = (): ConnectorAdapter< return { subAction: 'run', subActionParams }; }, - getKibanaPrivileges: ({ consumer }) => { - const owner = getOwnerFromRuleConsumer(consumer); + getKibanaPrivileges: ({ consumer, producer }) => { + const owner = getOwnerFromRuleConsumerProducer(consumer, producer); return constructRequiredKibanaPrivileges(owner); }, }; }; -const getOwnerFromRuleConsumer = (consumer: string): Owner => { +const getOwnerFromRuleConsumerProducer = (consumer: string, producer: string): Owner => { for (const value of Object.values(OWNER_INFO)) { const foundedConsumer = value.validRuleConsumers?.find( - (validConsumer) => validConsumer === consumer + (validConsumer) => validConsumer === consumer || validConsumer === producer ); if (foundedConsumer) { diff --git a/x-pack/plugins/cases/server/connectors/cases/translations.ts b/x-pack/plugins/cases/server/connectors/cases/translations.ts new file mode 100644 index 0000000000000..95e044d87eb24 --- /dev/null +++ b/x-pack/plugins/cases/server/connectors/cases/translations.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 { i18n } from '@kbn/i18n'; + +export const CASE_CREATED_BY_RULE_DESC = (ruleName: string) => + i18n.translate('xpack.cases.caseAction.caseCreatedByRuleDesc', { + defaultMessage: 'This case was created by the rule {ruleName}', + values: { + ruleName, + }, + }); + +export const GROUPED_BY_DESC = (groupingDescription: string) => + i18n.translate('xpack.cases.caseAction.groupedByDesc', { + defaultMessage: 'The assigned alerts are grouped by {groupingDescription}', + values: { + groupingDescription, + }, + }); + +export const GROUPED_BY_TITLE = (groupingDescription: string) => + i18n.translate('xpack.cases.caseAction.groupedByTitle', { + defaultMessage: 'Grouping by {groupingDescription}', + values: { + groupingDescription, + }, + }); + +export const AUTO_CREATED_TITLE = i18n.translate('xpack.cases.caseAction.autoCreatedTitle', { + defaultMessage: 'Auto-created', +}); diff --git a/x-pack/plugins/cross_cluster_replication/public/app/index.tsx b/x-pack/plugins/cross_cluster_replication/public/app/index.tsx index 318cdfb2a1c92..8b9fab7258055 100644 --- a/x-pack/plugins/cross_cluster_replication/public/app/index.tsx +++ b/x-pack/plugins/cross_cluster_replication/public/app/index.tsx @@ -8,23 +8,23 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { Provider } from 'react-redux'; -import { Observable } from 'rxjs'; import { UnmountCallback, - I18nStart, ScopedHistory, ApplicationStart, DocLinksStart, - CoreTheme, ExecutionContextStart, + CoreStart, } from '@kbn/core/public'; -import { KibanaThemeProvider, useExecutionContext } from '../shared_imports'; +import { KibanaRenderContextProvider, useExecutionContext } from '../shared_imports'; import { init as initBreadcrumbs, SetBreadcrumbs } from './services/breadcrumbs'; import { init as initDocumentation } from './services/documentation_links'; import { App } from './app'; import { ccrStore } from './store'; +type StartServices = Pick; + const AppWithExecutionContext = ({ history, executionContext, @@ -43,25 +43,22 @@ const AppWithExecutionContext = ({ }; const renderApp = ( + startServices: StartServices, element: Element, - I18nContext: I18nStart['Context'], history: ScopedHistory, getUrlForApp: ApplicationStart['getUrlForApp'], - theme$: Observable, executionContext: ExecutionContextStart ): UnmountCallback => { render( - - - - - - - , + + + + + , element ); @@ -69,22 +66,20 @@ const renderApp = ( }; export async function mountApp({ + startServices, element, setBreadcrumbs, - I18nContext, docLinks, history, getUrlForApp, - theme$, executionContext, }: { + startServices: StartServices; element: Element; setBreadcrumbs: SetBreadcrumbs; - I18nContext: I18nStart['Context']; docLinks: DocLinksStart; history: ScopedHistory; getUrlForApp: ApplicationStart['getUrlForApp']; - theme$: Observable; executionContext: ExecutionContextStart; }): Promise { // Import and initialize additional services here instead of in plugin.ts to reduce the size of the @@ -92,5 +87,5 @@ export async function mountApp({ initBreadcrumbs(setBreadcrumbs); initDocumentation(docLinks); - return renderApp(element, I18nContext, history, getUrlForApp, theme$, executionContext); + return renderApp(startServices, element, history, getUrlForApp, executionContext); } diff --git a/x-pack/plugins/cross_cluster_replication/public/plugin.ts b/x-pack/plugins/cross_cluster_replication/public/plugin.ts index a13fd64d927cd..624d833d0f2f6 100644 --- a/x-pack/plugins/cross_cluster_replication/public/plugin.ts +++ b/x-pack/plugins/cross_cluster_replication/public/plugin.ts @@ -41,13 +41,12 @@ export class CrossClusterReplicationPlugin implements Plugin { id: MANAGEMENT_ID, title: PLUGIN.TITLE, order: 6, - mount: async ({ element, setBreadcrumbs, history, theme$ }) => { + mount: async ({ element, setBreadcrumbs, history }) => { const { mountApp } = await import('./app'); const [coreStart] = await getStartServices(); const { chrome: { docTitle }, - i18n: { Context: I18nContext }, docLinks, application: { getUrlForApp }, executionContext, @@ -56,13 +55,12 @@ export class CrossClusterReplicationPlugin implements Plugin { docTitle.change(PLUGIN.TITLE); const unmountAppCallback = await mountApp({ + startServices: coreStart, element, setBreadcrumbs, - I18nContext, docLinks, history, getUrlForApp, - theme$, executionContext, }); diff --git a/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts b/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts index 7bea4593c7054..6a6f968627a65 100644 --- a/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts +++ b/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts @@ -15,4 +15,6 @@ export { export { KibanaThemeProvider, useExecutionContext } from '@kbn/kibana-react-plugin/public'; +export { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; + export { APP_WRAPPER_CLASS } from '@kbn/core/public'; diff --git a/x-pack/plugins/cross_cluster_replication/tsconfig.json b/x-pack/plugins/cross_cluster_replication/tsconfig.json index db1ff7daae5b8..bd442a71a86a4 100644 --- a/x-pack/plugins/cross_cluster_replication/tsconfig.json +++ b/x-pack/plugins/cross_cluster_replication/tsconfig.json @@ -29,6 +29,7 @@ "@kbn/test-jest-helpers", "@kbn/config-schema", "@kbn/shared-ux-router", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/data_visualizer/common/types/field_request_config.ts b/x-pack/plugins/data_visualizer/common/types/field_request_config.ts index ee6a382c4fb95..43ba81eccd784 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_request_config.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_request_config.ts @@ -62,9 +62,16 @@ export interface FieldVisStats { }; fieldName?: string; isTopValuesSampled?: boolean; + topValuesSampleSize?: number; max?: number; median?: number; min?: number; + sampledValues?: Array<{ + key: number | string; + doc_count: number; + percent: number; + key_as_string?: string; + }>; topValues?: Array<{ key: number | string; doc_count: number; diff --git a/x-pack/plugins/data_visualizer/common/types/field_stats.ts b/x-pack/plugins/data_visualizer/common/types/field_stats.ts index 15141888e8e32..61babb72dae70 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_stats.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_stats.ts @@ -93,6 +93,7 @@ export interface StringFieldStats { fieldName: string; isTopValuesSampled: boolean; topValues: Bucket[]; + sampledValues?: Bucket[]; topValuesSampleSize?: number; topValuesSamplerShardSize?: number; } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx index e631e5571c4d2..0dd142f827301 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx @@ -23,7 +23,8 @@ export const GeoPointContentWithMap: FC<{ dataView: DataView | undefined; combinedQuery?: CombinedQuery; esql?: string; -}> = ({ config, dataView, combinedQuery, esql }) => { + timeFieldName?: string; +}> = ({ config, dataView, combinedQuery, esql, timeFieldName }) => { const { stats } = config; const [layerList, setLayerList] = useState([]); const { @@ -72,7 +73,7 @@ export const GeoPointContentWithMap: FC<{ }, ], dataViewId: dataView.id, - dateField: dataView.timeFieldName, + dateField: dataView.timeFieldName ?? timeFieldName, geoField: config.fieldName, esql, narrowByGlobalSearch: true, diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx index da8db22fb93df..e0c83f36399e9 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx @@ -32,6 +32,7 @@ export const IndexBasedDataVisualizerExpandedRow = ({ onAddFilter, esql, totalDocuments, + timeFieldName, typeAccessor = 'type', }: { item: FieldVisConfig; @@ -44,6 +45,7 @@ export const IndexBasedDataVisualizerExpandedRow = ({ * Callback to add a filter to filter bar */ onAddFilter?: (field: DataViewField | string, value: string, type: '+' | '-') => void; + timeFieldName?: string; }) => { const config = { ...item, stats: { ...item.stats, totalDocuments } }; const { loading, existsInDocs, fieldName } = config; @@ -77,6 +79,7 @@ export const IndexBasedDataVisualizerExpandedRow = ({ dataView={dataView} combinedQuery={combinedQuery} esql={esql} + timeFieldName={timeFieldName} /> ); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/keyword_content.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/keyword_content.tsx index 0aee7715838ff..5a7b99befff64 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/keyword_content.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/keyword_content.tsx @@ -55,6 +55,16 @@ export const KeywordContent: FC = ({ config, onAddFilter }) = barColor="success" onAddFilter={onAddFilter} /> + {config.stats?.sampledValues && fieldName !== undefined ? ( + + ) : null} + {EMSSuggestion && stats && } ); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx index 88a5dca5e27b0..cc574f048a0d7 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx @@ -37,6 +37,7 @@ interface Props { barColor?: 'primary' | 'success' | 'danger' | 'subdued' | 'accent'; compressed?: boolean; onAddFilter?: (field: DataViewField | string, value: string, type: '+' | '-') => void; + showSampledValues?: boolean; } function getPercentLabel(percent: number): string { @@ -47,7 +48,20 @@ function getPercentLabel(percent: number): string { } } -export const TopValues: FC = ({ stats, fieldFormat, barColor, compressed, onAddFilter }) => { +export const TopValues: FC = ({ + stats, + fieldFormat, + barColor, + compressed, + onAddFilter, + /** Top values by default show % of time a value exist in sampled records/rows (i.e. value A exists in 10% of sampled records) + * showSampledValues: true shows % of times a value exist in all arrays of values that have been flattened + * Example for 4 records: ["a", "a", "b"], ["b", "b", "c"], "d", "e" + * "a" exists in 1/4 records (50% - showSampledValues: false), + * "a" exists in 2/8 sampled values (25% - showSampledValues: true). + */ + showSampledValues = false, +}) => { const { services: { data: { fieldFormats }, @@ -55,67 +69,99 @@ export const TopValues: FC = ({ stats, fieldFormat, barColor, compressed, } = useDataVisualizerKibana(); if (stats === undefined || !stats.topValues) return null; - const { topValues: originalTopValues, fieldName, sampleCount } = stats; + const { fieldName, sampleCount } = stats; + const originalTopValues = (showSampledValues ? stats.sampledValues : stats.topValues) ?? []; if (originalTopValues?.length === 0) return null; - const totalDocuments = Math.min(sampleCount ?? 0, stats.totalDocuments ?? 0); + const totalDocuments = showSampledValues + ? stats.topValuesSampleSize ?? 0 + : Math.min(sampleCount ?? 0, stats.totalDocuments ?? 0); - const topValues = originalTopValues.map((bucket) => ({ - ...bucket, - percent: - typeof bucket.percent === 'number' ? bucket.percent : bucket.doc_count / totalDocuments, - })); - - const topValuesOtherCountPercent = - 1 - (topValues ? topValues.reduce((acc, bucket) => acc + bucket.percent, 0) : 0); - const topValuesOtherCount = Math.floor(topValuesOtherCountPercent * (sampleCount ?? 0)); - - const countsElement = ( - - {totalDocuments > (sampleCount ?? 0) ? ( + const getMessage = () => { + if (showSampledValues && stats.topValuesSampleSize !== undefined) { + return ( {fieldFormats .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) - .convert(sampleCount)} - - ), - }} - /> - ) : ( - - {fieldFormats - .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) - .convert(totalDocuments ?? 0)} + .convert(stats.topValuesSampleSize)} ), }} /> - )} + ); + } + + return totalDocuments > (sampleCount ?? 0) ? ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(sampleCount)} + + ), + }} + /> + ) : ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(totalDocuments ?? 0)} + + ), + }} + /> + ); + }; + const countsElement = ( + + {getMessage()} ); + const topValues = originalTopValues.map((bucket) => ({ + ...bucket, + percent: + typeof bucket.percent === 'number' ? bucket.percent : bucket.doc_count / totalDocuments, + })); + + const topValuesOtherCountPercent = + 1 - (topValues ? topValues.reduce((acc, bucket) => acc + bucket.percent, 0) : 0); + const topValuesOtherCount = Math.floor(topValuesOtherCountPercent * (sampleCount ?? 0)); + return ( - + {showSampledValues ? ( + + ) : ( + + )}
= (dataVi const { totalCount, progress: combinedProgress, + queryHistoryStatus, overallStatsProgress, configs, documentCountStats, @@ -256,7 +257,7 @@ export const IndexDataVisualizerESQL: FC = (dataVi detectTimestamp={true} hideMinimizeButton={true} hideRunQueryText={false} - hideQueryHistory + isLoading={queryHistoryStatus ?? false} /> diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_data_visualizer_esql_data.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_data_visualizer_esql_data.tsx index 6fd8b7af25f29..8da84f79626f1 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_data_visualizer_esql_data.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_data_visualizer_esql_data.tsx @@ -270,10 +270,13 @@ export const useESQLDataVisualizerData = ( documentCountStats, totalCount, overallStats, + totalFields, overallStatsProgress, columns, cancelOverallStatsRequest, timeFieldName, + queryHistoryStatus, + exampleDocs, } = useESQLOverallStatsData(fieldStatsRequest); const [metricConfigs, setMetricConfigs] = useState(defaults.metricConfigs); @@ -497,13 +500,7 @@ export const useESQLDataVisualizerData = ( if (!overallStats) return; let _visibleFieldsCount = 0; - let _totalFieldsCount = 0; - Object.keys(overallStats).forEach((key) => { - const fieldsGroup = overallStats[key as keyof typeof overallStats]; - if (Array.isArray(fieldsGroup) && fieldsGroup.length > 0) { - _totalFieldsCount += fieldsGroup.length; - } - }); + const _totalFieldsCount = totalFields ?? 0; if (showEmptyFields === true) { _visibleFieldsCount = _totalFieldsCount; @@ -513,7 +510,7 @@ export const useESQLDataVisualizerData = ( overallStats.nonAggregatableExistsFields.length; } return { visibleFieldsCount: _visibleFieldsCount, totalFieldsCount: _totalFieldsCount }; - }, [overallStats, showEmptyFields]); + }, [overallStats, showEmptyFields, totalFields]); useEffect( () => { @@ -533,9 +530,14 @@ export const useESQLDataVisualizerData = ( visibleFieldTypes ).filteredFields; + const examples = exampleDocs?.reduce((map, exampleDoc) => { + map.set(exampleDoc.fieldName, exampleDoc); + return map; + }, new Map()); + if (fieldStatsProgress.loaded === 100 && fieldStats) { combinedConfigs = combinedConfigs.map((c) => { - const loadedFullStats = fieldStats.get(c.fieldName) ?? {}; + const loadedFullStats = fieldStats.get(c.fieldName) ?? examples?.get(c.fieldName) ?? {}; return loadedFullStats ? { ...c, @@ -555,6 +557,7 @@ export const useESQLDataVisualizerData = ( fieldStatsProgress.loaded, dataVisualizerListState.pageIndex, dataVisualizerListState.pageSize, + exampleDocs, ] ); @@ -570,13 +573,14 @@ export const useESQLDataVisualizerData = ( esql={query.esql} totalDocuments={totalCount} typeAccessor="secondaryType" + timeFieldName={timeFieldName} /> ); } return map; }, {} as ItemIdToExpandedRowMap); }, - [currentDataView, totalCount, query.esql] + [currentDataView, totalCount, query.esql, timeFieldName] ); const combinedProgress = useMemo( @@ -626,5 +630,6 @@ export const useESQLDataVisualizerData = ( showEmptyFields, fieldsCountStats, timeFieldName, + queryHistoryStatus, }; }; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_field_stats_data.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_field_stats_data.ts index ba647228f88fe..9754a35820196 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_field_stats_data.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_field_stats_data.ts @@ -21,7 +21,6 @@ import { getESQLNumericFieldStats } from '../../search_strategy/esql_requests/ge import { getESQLKeywordFieldStats } from '../../search_strategy/esql_requests/get_keyword_fields'; import { getESQLDateFieldStats } from '../../search_strategy/esql_requests/get_date_field_stats'; import { getESQLBooleanFieldStats } from '../../search_strategy/esql_requests/get_boolean_field_stats'; -import { getESQLExampleFieldValues } from '../../search_strategy/esql_requests/get_text_field_stats'; export const useESQLFieldStatsData = ({ searchQuery, @@ -114,19 +113,6 @@ export const useESQLFieldStatsData = ({ esqlBaseQuery, }).then(addToProcessedFieldStats); - // GETTING STATS FOR TEXT FIELDS - await getESQLExampleFieldValues({ - columns: columns.filter( - (f) => - f.secondaryType === 'text' || - f.secondaryType === 'geo_point' || - f.secondaryType === 'geo_shape' - ), - filter, - runRequest, - esqlBaseQuery, - }).then(addToProcessedFieldStats); - // GETTING STATS FOR DATE FIELDS await getESQLDateFieldStats({ columns: columns.filter((f) => f.secondaryType === 'date'), diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_overall_stats_data.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_overall_stats_data.ts index 3cb59da17ad8c..76d990236562a 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_overall_stats_data.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/esql/use_esql_overall_stats_data.ts @@ -9,12 +9,13 @@ import { ESQL_SEARCH_STRATEGY, KBN_FIELD_TYPES } from '@kbn/data-plugin/common'; import type { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; import type { AggregateQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; -import { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'; +import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'; import { type UseCancellableSearch, useCancellableSearch } from '@kbn/ml-cancellable-search'; import type { estypes } from '@elastic/elasticsearch'; import type { ISearchOptions } from '@kbn/data-plugin/common'; import type { TimeBucketsInterval } from '@kbn/ml-time-buckets'; import { getESQLWithSafeLimit, ESQL_LATEST_VERSION } from '@kbn/esql-utils'; +import { isDefined } from '@kbn/ml-is-defined'; import { OMIT_FIELDS } from '../../../../../common/constants'; import type { DataStatsFetchProgress, @@ -25,7 +26,6 @@ import { useDataVisualizerKibana } from '../../../kibana_context'; import { getInitialProgress, getReducer } from '../../progress_utils'; import { getSafeESQLName, isESQLQuery } from '../../search_strategy/requests/esql_utils'; import type { NonAggregatableField } from '../../types/overall_stats'; -import { getESQLSupportedAggs } from '../../utils/get_supported_aggs'; import { getESQLOverallStats } from '../../search_strategy/esql_requests/get_count_and_cardinality'; import type { AggregatableField } from '../../types/esql_data_visualizer'; import { @@ -33,13 +33,19 @@ import { type HandleErrorCallback, } from '../../search_strategy/esql_requests/handle_error'; -export interface Column { +interface ESQLColumn { type: string; name: string; +} +interface ESQLResponse { + rawResponse: { columns: ESQLColumn[]; all_columns: ESQLColumn[]; values: unknown[][] }; +} +export interface Column extends ESQLColumn { secondaryType: string; } interface Data { + totalFields?: number; timeFieldName?: string; columns?: Column[]; totalCount?: number; @@ -52,6 +58,7 @@ interface Data { nonAggregatableExistsFields: NonAggregatableField[]; nonAggregatableNotExistsFields: NonAggregatableField[]; }; + exampleDocs: Array<{ fieldName: string; examples: string[] }> | undefined; } const getESQLDocumentCountStats = async ( @@ -158,6 +165,8 @@ export const getInitialData = (): Data => ({ timeFieldName: undefined, columns: undefined, totalCount: undefined, + exampleDocs: undefined, + totalFields: undefined, }); const NON_AGGREGATABLE_FIELD_TYPES = new Set([ @@ -201,6 +210,7 @@ export const useESQLOverallStatsData = ( const { runRequest, cancelRequest } = useCancellableSearch(data); const [tableData, setTableData] = useReducer(getReducer(), getInitialData()); + const [queryHistoryStatus, setQueryHistoryStatus] = useState(false); const [overallStatsProgress, setOverallStatsProgress] = useReducer( getReducer(), getInitialProgress() @@ -244,24 +254,37 @@ export const useESQLOverallStatsData = ( // For doc count chart, we want the full base query without any limit const esqlBaseQuery = searchQuery.esql; - const columnsResp = await runRequest( + setQueryHistoryStatus(true); + + // Note: dropNullColumns will return empty [] for all_columns if limit size is 0 + // So we are making a query with default limit + // And use this one query to + // 1) identify populated/empty fields + // 2) gather examples for populated text fields + const columnsResp = (await runRequest( { params: { - query: esqlBaseQuery + '| LIMIT 0', + // Doing this to match with the default limit + query: esqlBaseQuery, ...(filter ? { filter } : {}), version: ESQL_LATEST_VERSION, + dropNullColumns: true, }, }, { strategy: ESQL_SEARCH_STRATEGY } - ); - const columns = columnsResp?.rawResponse - ? // @ts-expect-error ES types need to be updated with columns for ESQL queries - (columnsResp.rawResponse.columns.map((c) => ({ - ...c, - secondaryType: getSupportedFieldType(c.type), - })) as Column[]) + )) as ESQLResponse | undefined; + setQueryHistoryStatus(false); + + const columnInfo = columnsResp?.rawResponse + ? columnsResp.rawResponse.all_columns ?? columnsResp.rawResponse.columns : []; + const populatedColumns = new Set(columnsResp?.rawResponse.columns.map((c) => c.name)); + const columns = columnInfo.map((c) => ({ + ...c, + secondaryType: getSupportedFieldType(c.type), + })) as Column[]; + const timeFields = columns.filter((d) => d.type === 'date'); const dataViewTimeField = timeFields.find( @@ -324,20 +347,10 @@ export const useESQLOverallStatsData = ( setOverallStatsProgress({ loaded: 50, }); - const aggregatableFields: Array<{ - fieldName: string; - name: string; - type: string; - supportedAggs: Set; - secondaryType: string; - aggregatable: boolean; - }> = []; - const nonAggregatableFields: Array<{ - fieldName: string; - name: string; - type: string; - secondaryType: string; - }> = []; + const aggregatableNotExistsFields: AggregatableField[] = []; + + const nonAggregatableNotExistsFields: NonAggregatableField[] = []; + const fields = columns // Some field types are not supported by ESQL yet // Also, temporarily removing null columns because it causes problems with some aggs @@ -346,30 +359,33 @@ export const useESQLOverallStatsData = ( .map((field) => { return { ...field, aggregatable: !NON_AGGREGATABLE_FIELD_TYPES.has(field.type) }; }); - + const populatedFields = fields.filter((field) => populatedColumns.has(field.name)); fields?.forEach((field) => { const fieldName = field.name; + if (!OMIT_FIELDS.includes(fieldName)) { if (!field.aggregatable) { - nonAggregatableFields.push({ - ...field, - fieldName: field.name, - secondaryType: getSupportedFieldType(field.type), - }); + if (!populatedColumns.has(fieldName)) { + nonAggregatableNotExistsFields.push({ + ...field, + fieldName: field.name, + secondaryType: getSupportedFieldType(field.type), + existsInDocs: false, + }); + } } else { - aggregatableFields.push({ - ...field, - fieldName: field.name, - secondaryType: getSupportedFieldType(field.type), - supportedAggs: getESQLSupportedAggs(field, true), - aggregatable: true, - }); + if (!populatedColumns.has(fieldName)) { + aggregatableNotExistsFields.push({ + ...field, + fieldName: field.name, + aggregatable: true, + existsInDocs: false, + }); + } } } }); - setTableData({ aggregatableFields, nonAggregatableFields }); - // COUNT + CARDINALITY // For % count & cardinality, we want the full base query WITH specified limit // to safeguard against huge datasets @@ -394,20 +410,40 @@ export const useESQLOverallStatsData = ( if (totalCount > 0 && fields.length > 0) { const stats = await getESQLOverallStats({ runRequest, - fields, + // Only need to fetch stats for fields we know are populated + fields: populatedFields, esqlBaseQueryWithLimit, filter, limitSize: limit, totalCount, onError, }); + if (!stats) return; + stats.aggregatableNotExistsFields = aggregatableNotExistsFields; + stats.nonAggregatableNotExistsFields = nonAggregatableNotExistsFields; - setTableData({ overallStats: stats }); + setTableData({ overallStats: stats, totalFields: columns.length }); setOverallStatsProgress({ loaded: 100, isRunning: false, error: undefined, }); + + const columnsWithExamples = columnInfo.reduce((hashmap, curr, idx) => { + if (curr.type === 'text' || curr.type === 'geo_point' || curr.type === 'geo_shape') { + hashmap[curr.name] = idx; + } + return hashmap; + }, {} as Record); + + const exampleDocs = Object.entries(columnsWithExamples).map(([fieldName, idx]) => { + const examples = [...new Set(columnsResp?.rawResponse?.values.map((row) => row[idx]))] + .filter(isDefined) + .slice(0, 10); + return { fieldName, examples: examples as string[] }; + }); + + setTableData({ exampleDocs }); } } catch (error) { // If error already handled in sub functions, no need to propogate @@ -415,10 +451,10 @@ export const useESQLOverallStatsData = ( toasts.addError(error, { title: fieldStatsErrorTitle, }); - // Log error to console for better debugging - // eslint-disable-next-line no-console - console.error(`${fieldStatsErrorTitle}: fetchOverallStats`, error); } + // Log error to console for better debugging + // eslint-disable-next-line no-console + console.error(`${fieldStatsErrorTitle}: fetchOverallStats`, error); } }, // eslint-disable-next-line react-hooks/exhaustive-deps @@ -431,7 +467,12 @@ export const useESQLOverallStatsData = ( }, [startFetch]); return useMemo( - () => ({ ...tableData, overallStatsProgress, cancelOverallStatsRequest: cancelRequest }), - [tableData, overallStatsProgress, cancelRequest] + () => ({ + ...tableData, + overallStatsProgress, + cancelOverallStatsRequest: cancelRequest, + queryHistoryStatus, + }), + [tableData, overallStatsProgress, cancelRequest, queryHistoryStatus] ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts index 114359f2a8a51..599839f3aa78e 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts @@ -318,7 +318,6 @@ export function useOverallStats d.fields ? getProcessedFields(d.fields) : {} ); - sampledNonAggregatableFieldsExamples = docs; } if (isAggregatableFieldOverallStats(resp)) { diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx index f49e6e4e00768..6a8e043bae37a 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx @@ -7,7 +7,7 @@ import '../_index.scss'; import { pick } from 'lodash'; import type { FC } from 'react'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState, useMemo } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; import { parse, stringify } from 'query-string'; import { isEqual } from 'lodash'; @@ -30,6 +30,9 @@ import { UrlStateProvider, } from '@kbn/ml-url-state'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; +import { ENABLE_ESQL } from '@kbn/discover-utils'; +import { EuiCallOut } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import { getCoreStart, getPluginsStart } from '../../kibana_services'; import { type IndexDataVisualizerViewProps, @@ -85,6 +88,22 @@ export const getLocatorParams = (params: { }; const DataVisualizerESQLStateContextProvider = () => { + const { services } = useDataVisualizerKibana(); + const isEsqlEnabled = useMemo(() => services.uiSettings.get(ENABLE_ESQL), [services.uiSettings]); + + if (!isEsqlEnabled) { + return ( + + } + /> + ); + } + return ( @@ -314,6 +333,7 @@ export const IndexDataVisualizer: FC = ({ charts, unifiedSearch, }; + const datePickerDeps: DatePickerDependencies = { ...pick(services, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_boolean_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_boolean_field_stats.ts index 865d2c87bc02b..6cba632d4b7f7 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_boolean_field_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_boolean_field_stats.ts @@ -9,6 +9,7 @@ import type { UseCancellableSearch } from '@kbn/ml-cancellable-search'; import type { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; import { ESQL_SEARCH_STRATEGY } from '@kbn/data-plugin/common'; import pLimit from 'p-limit'; +import { ESQL_LATEST_VERSION } from '@kbn/esql-utils'; import type { Column } from '../../hooks/esql/use_esql_overall_stats_data'; import { getSafeESQLName } from '../requests/esql_utils'; import { isFulfilled, isRejected } from '../../../common/util/promise_all_settled_utils'; @@ -45,6 +46,7 @@ export const getESQLBooleanFieldStats = async ({ params: { query: esqlBaseQuery + query, ...(filter ? { filter } : {}), + version: ESQL_LATEST_VERSION, }, }, }; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_count_and_cardinality.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_count_and_cardinality.ts index 9bcf5e7190fb2..50986ffbfdab7 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_count_and_cardinality.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_count_and_cardinality.ts @@ -102,6 +102,7 @@ const getESQLOverallStatsInChunk = async ({ countQuery += fieldsToFetch.map((field) => field.query).join(','); const query = esqlBaseQueryWithLimit + (evalQuery ? ' | EVAL ' + evalQuery : '') + countQuery; + const request = { params: { query, diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_keyword_fields.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_keyword_fields.ts index 9f108b50a33bb..42f079c9b1676 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_keyword_fields.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_keyword_fields.ts @@ -9,6 +9,7 @@ import type { UseCancellableSearch } from '@kbn/ml-cancellable-search'; import type { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; import { ESQL_SEARCH_STRATEGY } from '@kbn/data-plugin/common'; import pLimit from 'p-limit'; +import { ESQL_LATEST_VERSION } from '@kbn/esql-utils'; import type { Column } from '../../hooks/esql/use_esql_overall_stats_data'; import { getSafeESQLName } from '../requests/esql_utils'; import { isFulfilled, isRejected } from '../../../common/util/promise_all_settled_utils'; @@ -33,17 +34,19 @@ export const getESQLKeywordFieldStats = async ({ const keywordFields = columns.map((field) => { const query = esqlBaseQuery + - `| STATS ${getSafeESQLName(`${field.name}_terms`)} = count(${getSafeESQLName( + `| STATS ${getSafeESQLName(`${field.name}_in_records`)} = count(MV_MIN(${getSafeESQLName( field.name - )}) BY ${getSafeESQLName(field.name)} - | LIMIT 10 - | SORT ${getSafeESQLName(`${field.name}_terms`)} DESC`; + )})), ${getSafeESQLName(`${field.name}_in_values`)} = count(${getSafeESQLName(field.name)}) + BY ${getSafeESQLName(field.name)} + | SORT ${getSafeESQLName(`${field.name}_in_records`)} DESC + | LIMIT 10`; return { field, request: { params: { query, ...(filter ? { filter } : {}), + version: ESQL_LATEST_VERSION, }, }, }; @@ -61,17 +64,31 @@ export const getESQLKeywordFieldStats = async ({ if (!resp) return; if (isFulfilled(resp)) { - const results = resp.value?.rawResponse.values as Array<[BucketCount, BucketTerm]>; + const results = resp.value?.rawResponse?.values as Array< + [BucketCount, BucketCount, BucketTerm] + >; + if (results) { + const topValuesSampleSize = results.reduce((acc, row) => { + return row[1] + acc; + }, 0); + + const sampledValues = results.map((row) => ({ + key: row[2], + doc_count: row[1], + })); + const terms = results.map((row) => ({ - key: row[1], + key: row[2], doc_count: row[0], })); return { fieldName: field.name, topValues: terms, - isTopValuesSampled: false, + sampledValues, + isTopValuesSampled: true, + topValuesSampleSize, } as StringFieldStats; } return; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts deleted file mode 100644 index f79e6fc9a7145..0000000000000 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts +++ /dev/null @@ -1,68 +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 { UseCancellableSearch } from '@kbn/ml-cancellable-search'; -import type { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; -import { ESQL_SEARCH_STRATEGY } from '@kbn/data-plugin/common'; -import { ESQL_LATEST_VERSION } from '@kbn/esql-utils'; -import type { Column } from '../../hooks/esql/use_esql_overall_stats_data'; -import type { FieldExamples, FieldStatsError } from '../../../../../common/types/field_stats'; - -interface Params { - runRequest: UseCancellableSearch['runRequest']; - columns: Column[]; - esqlBaseQuery: string; - filter?: QueryDslQueryContainer; -} - -/** - * Make one query that gets the top 10 rows for each text field requested - * then process the values to showcase examples for each field - * @param - * @returns - */ -export const getESQLExampleFieldValues = async ({ - runRequest, - columns: textFields, - esqlBaseQuery, - filter, -}: Params): Promise> => { - try { - if (textFields.length > 0) { - const request = { - params: { - query: - esqlBaseQuery + - `| KEEP ${textFields.map((f) => f.name).join(',')} - | LIMIT 10`, - ...(filter ? { filter } : {}), - version: ESQL_LATEST_VERSION, - }, - }; - const textFieldsResp = await runRequest(request, { strategy: ESQL_SEARCH_STRATEGY }); - - if (textFieldsResp) { - return textFields.map((textField, idx) => { - const examples = [ - ...new Set((textFieldsResp.rawResponse.values as unknown[][]).map((row) => row[idx])), - ]; - - return { - fieldName: textField.name, - examples, - } as FieldExamples; - }); - } - } - } catch (error) { - return textFields.map((textField, idx) => ({ - fieldName: textField.name, - error, - })) as FieldStatsError[]; - } - return []; -}; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/overall_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/overall_stats.ts index 22e61cb85c2ce..028169b6c0ce2 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/overall_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/overall_stats.ts @@ -6,7 +6,7 @@ */ import type { DocumentCountStats } from '../../../../common/types/field_stats'; - +import type { SupportedFieldType } from '../../../../common/types'; export interface AggregatableField { fieldName: string; stats: { @@ -25,6 +25,7 @@ export interface NonAggregatableField { sampleCount?: number; }; existsInDocs: boolean; + secondaryType?: SupportedFieldType; } export interface OverallStats { diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index b935b88c19625..a6a865c86818c 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -77,7 +77,8 @@ "@kbn/utility-types", "@kbn/visualization-utils", "@kbn/ml-time-buckets", - "@kbn/aiops-log-rate-analysis" + "@kbn/aiops-log-rate-analysis", + "@kbn/discover-utils" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connector_stats.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connector_stats.tsx index 4c1e62e3685df..8b2ad4490a1a6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connector_stats.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connector_stats.tsx @@ -7,6 +7,7 @@ import React, { useEffect } from 'react'; +import { css } from '@emotion/react'; import { useActions, useValues } from 'kea'; import { @@ -16,21 +17,56 @@ import { EuiSplitPanel, EuiText, EuiTitle, + EuiToolTip, + useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FetchSyncJobsStatsApiLogic } from '../../api/stats/fetch_sync_jobs_stats_api_logic'; +import { + getConnectedConnectorsBadgeLabel, + getConnectedConnectorsTooltipContent, + getConnectedBadgeAriaLabel, + getIncompleteConnectorsBadgeLabel, + getIncompleteConnectorBadgeAriaLabel, + getIncompleteConnectorsTooltip, + getIdleJobsLabel, + getIdleJobsTooltip, + getOrphanedJobsLabel, + getOrphanedJobsTooltip, + getRunningJobsBadgeAriaLabel, + getRunningJobsBadgeLabel, + getRunningJobsLabel, + getRunningJobsTooltip, + getSyncJobErrorsLabel, + getSyncJobErrorsTooltip, +} from './utils'; + export interface ConnectorStatsProps { isCrawler: boolean; } export const ConnectorStats: React.FC = ({ isCrawler }) => { + const { euiTheme } = useEuiTheme(); + + const tooltipAncherProps = { + css: css` + margin: ${euiTheme.size.xs}; + `, + }; const { makeRequest } = useActions(FetchSyncJobsStatsApiLogic); const { data } = useValues(FetchSyncJobsStatsApiLogic); + const connectorCount = (data?.connected || 0) + (data?.incomplete || 0); const hasMultipleConnectors = connectorCount > 1; + const connectedCount = data?.connected || 0; + const incompleteCount = data?.incomplete || 0; + const inProgressCount = data?.in_progress || 0; + const idleCount = data?.idle || 0; + const orphanedCount = data?.orphaned_jobs || 0; + const errorCount = data?.errors || 0; useEffect(() => { makeRequest({ isCrawler }); @@ -90,23 +126,31 @@ export const ConnectorStats: React.FC = ({ isCrawler }) => - - {i18n.translate('xpack.enterpriseSearch.connectorStats.connectedBadgeLabel', { - defaultMessage: '{number} connected', - values: { - number: data?.connected || 0, - }, - })} - - - {i18n.translate('xpack.enterpriseSearch.connectorStats.incompleteBadgeLabel', { - defaultMessage: '{number} incomplete', - - values: { - number: data?.incomplete || 0, - }, - })} - + + {}} + onClickAriaLabel={getConnectedBadgeAriaLabel(connectedCount)} + > + {getConnectedConnectorsBadgeLabel(connectedCount)} + + + + + {}} + onClickAriaLabel={getIncompleteConnectorBadgeAriaLabel(incompleteCount)} + > + {getIncompleteConnectorsBadgeLabel(incompleteCount)} + + @@ -124,42 +168,55 @@ export const ConnectorStats: React.FC = ({ isCrawler }) => - - {i18n.translate('xpack.enterpriseSearch.connectorStats.runningSyncsTextLabel', { - defaultMessage: '{syncs} running syncs', - values: { - syncs: data?.in_progress, - }, - })} - + {getRunningJobsLabel(inProgressCount, isCrawler)} - {isCrawler - ? i18n.translate( - 'xpack.enterpriseSearch.connectorStats.crawlerSyncsOrphanedSyncsLabel', - { - defaultMessage: '{orphanedCount} Orphaned syncs / {errorCount} Sync errors', - values: { - errorCount: data?.errors || 0, - orphanedCount: data?.orphaned_jobs, - }, - } - ) - : i18n.translate( - 'xpack.enterpriseSearch.connectorStats.connectorSyncsOrphanedSyncsLabel', - { - defaultMessage: - '{idleCount} Idle syncs / {orphanedCount} Orphaned syncs / {errorCount} Sync errors', - values: { - errorCount: data?.errors || 0, - idleCount: data?.idle, - orphanedCount: data?.orphaned_jobs, - }, - } - )} + + {}} + onClickAriaLabel={getRunningJobsBadgeAriaLabel(inProgressCount, isCrawler)} + > + {getRunningJobsBadgeLabel(inProgressCount, isCrawler)} + + + + {!isCrawler && ( + + {}} onClickAriaLabel={getIdleJobsLabel(idleCount)}> + {getIdleJobsLabel(idleCount)} + + + )} + + + {}} + onClickAriaLabel={getOrphanedJobsLabel(orphanedCount, isCrawler)} + > + {getOrphanedJobsLabel(orphanedCount, isCrawler)} + + + + + {}} + onClickAriaLabel={getSyncJobErrorsLabel(errorCount, isCrawler)} + > + {getSyncJobErrorsLabel(errorCount, isCrawler)} + + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/utils.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/utils.tsx new file mode 100644 index 0000000000000..e3fda297b4c97 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/utils.tsx @@ -0,0 +1,318 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const getConnectedBadgeAriaLabel = (connectedCount: number) => + i18n.translate('xpack.enterpriseSearch.connectorStats.connectedBadgeAriaLabel', { + defaultMessage: '{number} Connected connectors', + values: { + number: connectedCount, + }, + }); +export const getConnectedConnectorsBadgeLabel = (connectedCount: number) => ( + +); +export const getConnectedConnectorsTooltipContent = ( + connectedCount: number, + isCrawler: boolean +) => ( + + {!isCrawler ? ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.connectorTooltipConnected', { + defaultMessage: `Connected connectors`, + })} + + ), + connectedCount: {connectedCount}, + }} + /> + ) : ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.crawlerTooltipConnected', { + defaultMessage: `Connected crawlers`, + })} + + ), + connectedCount: {connectedCount}, + }} + /> + )} + +); +export const getIncompleteConnectorsTooltip = (incompleteCount: number, isCrawler: boolean) => ( + + {!isCrawler ? ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.incompleteTooltipConnected', { + defaultMessage: `Incomplete connectors`, + })} + + ), + incompleteCount: {incompleteCount}, + }} + /> + ) : ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.incompleteTooltipCrawler', { + defaultMessage: `Incomplete crawlers`, + })} + + ), + incompleteCount: {incompleteCount}, + }} + /> + )} + +); +export const getIncompleteConnectorsBadgeLabel = (incompleteCount: number) => ( + +); +export const getIncompleteConnectorBadgeAriaLabel = (incompleteCount: number) => + i18n.translate('xpack.enterpriseSearch.connectorStats.incompleteBadgeAriaLabel', { + defaultMessage: '{incompleteCount} Incomplete connectors', + values: { + incompleteCount, + }, + }); +export const getRunningJobsLabel = (inProgressCount: number, isCrawler: boolean) => + !isCrawler + ? i18n.translate('xpack.enterpriseSearch.connectorStats.runningSyncsTextLabel', { + defaultMessage: '{syncs} running syncs', + values: { + syncs: inProgressCount, + }, + }) + : i18n.translate('xpack.enterpriseSearch.connectorStats.runningCrawlsTextLabel', { + defaultMessage: '{syncs} running crawls', + values: { + syncs: inProgressCount, + }, + }); +export const getRunningJobsTooltip = (inProgressCount: number, isCrawler: boolean) => ( + + {!isCrawler ? ( + {inProgressCount}, + runningCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.connectorTooltipRunning', { + defaultMessage: `Running syncs`, + })} + + ), + }} + /> + ) : ( + {inProgressCount}, + runningCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.crawlerTooltipRunning', { + defaultMessage: `Running crawls`, + })} + + ), + }} + /> + )} + +); +export const getRunningJobsBadgeAriaLabel = (inProgressCount: number, isCrawler: boolean) => + !isCrawler + ? i18n.translate('xpack.enterpriseSearch.connectorStats.runningBadgeAriaLabel', { + defaultMessage: '{number} Running syncs.', + values: { + number: inProgressCount, + }, + }) + : i18n.translate('xpack.enterpriseSearch.connectorStats.runningCrawlerBadgeAriaLabel', { + defaultMessage: '{number} Running crawls.', + values: { + number: inProgressCount, + }, + }); +export const getRunningJobsBadgeLabel = (inProgressCount: number, isCrawler: boolean) => + !isCrawler + ? i18n.translate('xpack.enterpriseSearch.connectorStats.runningBadgeLabel', { + defaultMessage: '{number} Running syncs', + values: { + number: inProgressCount, + }, + }) + : i18n.translate('xpack.enterpriseSearch.connectorStats.runningCrawlerBadgeLabel', { + defaultMessage: '{number} Running crawls', + values: { + number: inProgressCount, + }, + }); +export const getIdleJobsLabel = (idleCount: number) => + i18n.translate('xpack.enterpriseSearch.connectorStats.idleJobsText', { + defaultMessage: '{idleCount} Idle syncs', + values: { + idleCount, + }, + }); +export const getIdleJobsTooltip = (idleCount: number) => ( + + {idleCount}, + idleCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.connectorTooltipIdle', { + defaultMessage: `Idle syncs`, + })} + + ), + }} + /> + +); +export const getOrphanedJobsTooltip = (orphanedCount: number, isCrawler: boolean) => ( + + {!isCrawler ? ( + {orphanedCount}, + orphanedCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.connectorTooltipOrphaned', { + defaultMessage: `Orphaned syncs`, + })} + + ), + }} + /> + ) : ( + {orphanedCount}, + orphanedCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.crawlerTooltipOrphaned', { + defaultMessage: `Orphaned crawls`, + })} + + ), + }} + /> + )} + +); +export const getOrphanedJobsLabel = (orphanedCount: number, isCrawler: boolean) => + !isCrawler + ? i18n.translate('xpack.enterpriseSearch.connectorStats.orphanedBadgeAriaLabel', { + defaultMessage: '{number} Orphaned syncs.', + values: { + number: orphanedCount, + }, + }) + : i18n.translate('xpack.enterpriseSearch.connectorStats.orphanedCrawlerBadgeAriaLabel', { + defaultMessage: '{number} Orphaned crawls.', + values: { + number: orphanedCount, + }, + }); +export const getSyncJobErrorsTooltip = (errorCount: number, isCrawler: boolean) => ( + + {!isCrawler ? ( + {errorCount}, + errorCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.connectorTooltipError', { + defaultMessage: `Sync errors`, + })} + + ), + }} + /> + ) : ( + {errorCount}, + errorCountText: ( + + {i18n.translate('xpack.enterpriseSearch.connectorStats.crawlerTooltipError', { + defaultMessage: `Crawl errors`, + })} + + ), + }} + /> + )} + +); +export const getSyncJobErrorsLabel = (errorCount: number, isCrawler: boolean) => + !isCrawler + ? i18n.translate('xpack.enterpriseSearch.connectorStats.errorBadgeLabel', { + defaultMessage: '{number} Sync errors', + values: { + number: errorCount, + }, + }) + : i18n.translate('xpack.enterpriseSearch.connectorStats.errorCrawlerBadgeLabel', { + defaultMessage: '{number} Crawl errors', + values: { + number: errorCount, + }, + }); diff --git a/x-pack/plugins/fleet/common/services/datastream_es_name.ts b/x-pack/plugins/fleet/common/services/datastream_es_name.ts index 077f1f5f0dc7f..fc90224615eb1 100644 --- a/x-pack/plugins/fleet/common/services/datastream_es_name.ts +++ b/x-pack/plugins/fleet/common/services/datastream_es_name.ts @@ -16,7 +16,7 @@ export function getRegistryDataStreamAssetBaseName(dataStream: { type: string; hidden?: boolean; }): string { - const baseName = `${dataStream.type}-${dataStream.dataset}`; + const baseName = `${dataStream.type}-${dataStream.dataset.toLowerCase()}`; return dataStream.hidden ? `.${baseName}` : baseName; } @@ -44,7 +44,7 @@ export const getPipelineNameForDatastream = ({ dataStream: { dataset: string; type: string }; packageVersion: string; }): string => { - return `${dataStream.type}-${dataStream.dataset}-${packageVersion}`; + return `${dataStream.type}-${dataStream.dataset.toLowerCase()}-${packageVersion}`; }; /** @@ -54,5 +54,5 @@ export const getCustomPipelineNameForDatastream = (dataStream: { dataset: string; type: string; }): string => { - return `${dataStream.type}-${dataStream.dataset}@custom`; + return `${dataStream.type}-${dataStream.dataset.toLowerCase()}@custom`; }; diff --git a/x-pack/plugins/fleet/common/settings/agent_policy_settings.ts b/x-pack/plugins/fleet/common/settings/agent_policy_settings.ts index 9d23f948da3e6..26d828acde9e1 100644 --- a/x-pack/plugins/fleet/common/settings/agent_policy_settings.ts +++ b/x-pack/plugins/fleet/common/settings/agent_policy_settings.ts @@ -137,12 +137,13 @@ export const AGENT_POLICY_ADVANCED_SETTINGS: SettingsConfig[] = [ description: i18n.translate( 'xpack.fleet.settings.agentPolicyAdvanced.agentLoggingLevelDescription', { - defaultMessage: 'Set the Agent log level. The default log level is "info".', + defaultMessage: + 'Sets the log level for all the agents on the policy. The default log level is "info"', } ), api_field: { name: 'agent_logging_level', }, - schema: z.nativeEnum(agentLoggingLevels), + schema: z.nativeEnum(agentLoggingLevels).default(agentLoggingLevels.Info), }, ]; diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/index.tsx index ce725773a462f..292e308ad578f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/index.tsx @@ -66,16 +66,18 @@ settingComponentRegistry.set(ZodFirstPartyTypeKind.ZodNativeEnum, (settingsConfi ( + renderItem={({ fieldKey, fieldValue, handleChange }: any) => ( ({ - text: level, - value: coercedSchema.enum[level], - }))} + options={Object.entries(settingsConfig.schema._def.innerType._def.values).map( + ([key, value]) => ({ + text: key, + value: value as string, + }) + )} /> )} /> diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/settings_field_wrapper.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/settings_field_wrapper.tsx index a19c8e67c1080..6f92966c91470 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/settings_field_wrapper.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/form_settings/settings_field_wrapper.tsx @@ -76,9 +76,11 @@ export const SettingsFieldWrapper: React.FC<{ description={ <> {settingsConfig.description}.{' '} - - Learn more. - + {settingsConfig.learnMoreLink && ( + + Learn more. + + )} } > diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/multi_text_input.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/multi_text_input.tsx index ba17c3081f935..452e8bd55dcf5 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/multi_text_input.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/multi_text_input.tsx @@ -38,7 +38,7 @@ interface RowProps { onBlur?: () => void; autoFocus?: boolean; isDisabled?: boolean; - showDeleteButton?: boolean; + isMultiRow?: boolean; } const Row: FunctionComponent = ({ @@ -50,7 +50,7 @@ const Row: FunctionComponent = ({ onBlur, autoFocus, isDisabled, - showDeleteButton, + isMultiRow, }) => { const onDeleteHandler = useCallback(() => { onDelete(index); @@ -73,10 +73,21 @@ const Row: FunctionComponent = ({ autoFocus={autoFocus} disabled={isDisabled} onBlur={onBlur} + aria-label={ + isMultiRow + ? i18n.translate('xpack.fleet.multiTextInput.ariaLabel', { + defaultMessage: '"{fieldLabel}" input {index}', + values: { + fieldLabel, + index: index + 1, + }, + }) + : fieldLabel + } data-test-subj={`multiTextInputRow-${index}`} /> - {showDeleteButton && ( + {isMultiRow && ( = ({ value={row} autoFocus={autoFocus} isDisabled={isDisabled} - showDeleteButton={rows.length > 1} + isMultiRow={rows.length > 1} /> ))} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_var_field.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_var_field.tsx index 623523da56570..9464d60402a1d 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_var_field.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_var_field.tsx @@ -143,6 +143,7 @@ export const PackagePolicyInputVarField: React.FunctionComponent : fieldLabel} labelAppend={ isOptional ? ( diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/remove_legacy.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/remove_legacy.test.ts index 1d34dd97d431e..35dd8cdfafb21 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/remove_legacy.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/remove_legacy.test.ts @@ -100,10 +100,10 @@ describe('_getLegacyComponentTemplatesForPackage', () => { it('should find legacy templates', () => { const packageName = 'testPkg'; const legacyTemplates = [ - 'logs-testPkg.dataset@settings', - 'logs-testPkg.dataset@mappings', - 'metrics-testPkg.dataset2@mappings', - 'metrics-testPkg.dataset2@settings', + 'logs-testpkg.dataset@settings', + 'logs-testpkg.dataset@mappings', + 'metrics-testpkg.dataset2@mappings', + 'metrics-testpkg.dataset2@settings', ]; const templates = [ ...makeArrayOf(100, () => createMockComponentTemplate({ packageName })), diff --git a/x-pack/plugins/index_lifecycle_management/public/application/index.tsx b/x-pack/plugins/index_lifecycle_management/public/application/index.tsx index 6f8ddf148fec9..6360bee1af571 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/index.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/index.tsx @@ -7,14 +7,7 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { Observable } from 'rxjs'; -import { - I18nStart, - ScopedHistory, - ApplicationStart, - UnmountCallback, - CoreTheme, -} from '@kbn/core/public'; +import { ScopedHistory, ApplicationStart, UnmountCallback, CoreStart } from '@kbn/core/public'; import { DocLinksStart, ExecutionContextStart } from '@kbn/core/public'; import { @@ -22,50 +15,49 @@ import { ILicense, KibanaContextProvider, APP_WRAPPER_CLASS, + KibanaRenderContextProvider, RedirectAppLinks, - KibanaThemeProvider, } from '../shared_imports'; import { App } from './app'; import { BreadcrumbService } from './services/breadcrumbs'; +type StartServices = Pick; + export const renderApp = ( + startServices: StartServices, element: Element, - I18nContext: I18nStart['Context'], history: ScopedHistory, application: ApplicationStart, breadcrumbService: BreadcrumbService, license: ILicense, - theme$: Observable, docLinks: DocLinksStart, executionContext: ExecutionContextStart, cloud?: CloudSetup ): UnmountCallback => { const { getUrlForApp } = application; render( -
- - - - - - - - - -
, + +
+ + + + + +
+
, element ); diff --git a/x-pack/plugins/index_lifecycle_management/public/plugin.tsx b/x-pack/plugins/index_lifecycle_management/public/plugin.tsx index a1496a06fe8a8..2fe173e917624 100644 --- a/x-pack/plugins/index_lifecycle_management/public/plugin.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/plugin.tsx @@ -48,11 +48,10 @@ export class IndexLifecycleManagementPlugin id: PLUGIN.ID, title: PLUGIN.TITLE, order: 2, - mount: async ({ element, history, setBreadcrumbs, theme$ }) => { + mount: async ({ element, history, setBreadcrumbs }) => { const [coreStart, { licensing }] = await getStartServices(); const { chrome: { docTitle }, - i18n: { Context: I18nContext }, application, docLinks, executionContext, @@ -66,13 +65,12 @@ export class IndexLifecycleManagementPlugin const { renderApp } = await import('./application'); const unmountAppCallback = renderApp( + coreStart, element, - I18nContext, history, application, this.breadcrumbService, license, - theme$, docLinks, executionContext, cloud diff --git a/x-pack/plugins/index_lifecycle_management/public/shared_imports.ts b/x-pack/plugins/index_lifecycle_management/public/shared_imports.ts index 402736cbd13a5..7538dc66de002 100644 --- a/x-pack/plugins/index_lifecycle_management/public/shared_imports.ts +++ b/x-pack/plugins/index_lifecycle_management/public/shared_imports.ts @@ -44,11 +44,9 @@ export { export { attemptToURIDecode } from '@kbn/es-ui-shared-plugin/public'; -export { - KibanaContextProvider, - KibanaThemeProvider, - useExecutionContext, -} from '@kbn/kibana-react-plugin/public'; +export { KibanaContextProvider, useExecutionContext } from '@kbn/kibana-react-plugin/public'; + +export { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; export { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; diff --git a/x-pack/plugins/index_lifecycle_management/tsconfig.json b/x-pack/plugins/index_lifecycle_management/tsconfig.json index b759a9468861f..231a9775bf4ab 100644 --- a/x-pack/plugins/index_lifecycle_management/tsconfig.json +++ b/x-pack/plugins/index_lifecycle_management/tsconfig.json @@ -37,7 +37,8 @@ "@kbn/shared-ux-router", "@kbn/ui-theme", "@kbn/shared-ux-link-redirect-app", - "@kbn/index-management" + "@kbn/index-management", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/index_management/public/application/app_context.tsx b/x-pack/plugins/index_management/public/application/app_context.tsx index d0544bbf867e0..cf826037ca99d 100644 --- a/x-pack/plugins/index_management/public/application/app_context.tsx +++ b/x-pack/plugins/index_management/public/application/app_context.tsx @@ -6,12 +6,12 @@ */ import React, { createContext, useContext } from 'react'; -import { Observable } from 'rxjs'; import SemVer from 'semver/classes/semver'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { ApplicationStart, - CoreTheme, + I18nStart, + ThemeServiceStart, FatalErrorsStart, ScopedHistory, DocLinksStart, @@ -38,6 +38,8 @@ export interface AppDependencies { executionContext: ExecutionContextStart; application: ApplicationStart; http: HttpSetup; + i18n: I18nStart; + theme: ThemeServiceStart; }; plugins: { usageCollection: UsageCollectionSetup; @@ -66,7 +68,6 @@ export interface AppDependencies { url: SharePluginStart['url']; docLinks: DocLinksStart; kibanaVersion: SemVer; - theme$: Observable; } export const AppContextProvider = ({ diff --git a/x-pack/plugins/index_management/public/application/index.tsx b/x-pack/plugins/index_management/public/application/index.tsx index 3f5e4960ee977..8c815a02907f8 100644 --- a/x-pack/plugins/index_management/public/application/index.tsx +++ b/x-pack/plugins/index_management/public/application/index.tsx @@ -17,7 +17,7 @@ import { createKibanaReactContext, GlobalFlyout, useKibana as useKibanaReactPlugin, - KibanaThemeProvider, + KibanaRenderContextProvider, } from '../shared_imports'; import { AppContextProvider, AppDependencies } from './app_context'; @@ -37,9 +37,8 @@ export const IndexManagementAppContext: React.FC core, dependencies, }) => { - const { i18n, docLinks, notifications, application, executionContext, overlays, theme } = core; - const { Context: I18nContext } = i18n; - const { services, setBreadcrumbs, uiSettings, settings, kibanaVersion, theme$ } = dependencies; + const { docLinks, notifications, application, executionContext, overlays, theme } = core; + const { services, setBreadcrumbs, uiSettings, settings, kibanaVersion } = dependencies; // theme is required by the CodeEditor component used to edit runtime field Painless scripts. const { Provider: KibanaReactContextProvider } = @@ -66,21 +65,19 @@ export const IndexManagementAppContext: React.FC }; return ( - - - - - - - - {children} - - - - - - - + + + + + + + {children} + + + + + + ); }; diff --git a/x-pack/plugins/index_management/public/application/mount_management_section.ts b/x-pack/plugins/index_management/public/application/mount_management_section.ts index ae202bcf55c0f..a045c60988465 100644 --- a/x-pack/plugins/index_management/public/application/mount_management_section.ts +++ b/x-pack/plugins/index_management/public/application/mount_management_section.ts @@ -7,12 +7,11 @@ import { i18n } from '@kbn/i18n'; import SemVer from 'semver/classes/semver'; -import { CoreSetup, CoreStart, CoreTheme, ScopedHistory } from '@kbn/core/public'; +import { CoreSetup, CoreStart, ScopedHistory } from '@kbn/core/public'; import { ManagementAppMountParams } from '@kbn/management-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { CloudSetup } from '@kbn/cloud-plugin/public'; -import { Observable } from 'rxjs'; import { StartDependencies } from '@kbn/index-management'; import { UIM_APP_NAME } from '../../common/constants'; import { PLUGIN } from '../../common/constants/plugin'; @@ -58,7 +57,6 @@ export function getIndexManagementDependencies({ config, cloud, startDependencies, - theme$, uiMetricService, }: { core: CoreStart; @@ -70,18 +68,14 @@ export function getIndexManagementDependencies({ config: AppDependencies['config']; cloud?: CloudSetup; startDependencies: StartDependencies; - theme$: Observable; uiMetricService: UiMetricService; }): AppDependencies { - const { docLinks, fatalErrors, application, uiSettings, executionContext, settings, http } = core; + const { docLinks, application, uiSettings, settings } = core; const { url } = startDependencies.share; return { core: { - fatalErrors, getUrlForApp: application.getUrlForApp, - executionContext, - application, - http, + ...core, }, plugins: { usageCollection, @@ -104,7 +98,6 @@ export function getIndexManagementDependencies({ url, docLinks, kibanaVersion, - theme$, }; } @@ -127,7 +120,7 @@ export async function mountManagementSection({ config: AppDependencies['config']; cloud?: CloudSetup; }) { - const { element, setBreadcrumbs, history, theme$ } = params; + const { element, setBreadcrumbs, history } = params; const [core, startDependencies] = await coreSetup.getStartServices(); const { docLinks, @@ -151,7 +144,6 @@ export async function mountManagementSection({ isFleetEnabled, kibanaVersion, startDependencies, - theme$, uiMetricService, usageCollection, }); diff --git a/x-pack/plugins/index_management/public/shared_imports.ts b/x-pack/plugins/index_management/public/shared_imports.ts index 9bec64d46b21c..dd71a4a70729d 100644 --- a/x-pack/plugins/index_management/public/shared_imports.ts +++ b/x-pack/plugins/index_management/public/shared_imports.ts @@ -76,6 +76,7 @@ export { createKibanaReactContext, reactRouterNavigate, useKibana, - KibanaThemeProvider, useExecutionContext, } from '@kbn/kibana-react-plugin/public'; + +export { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; diff --git a/x-pack/plugins/index_management/tsconfig.json b/x-pack/plugins/index_management/tsconfig.json index dc587d5a1ab9e..7f73fdc262622 100644 --- a/x-pack/plugins/index_management/tsconfig.json +++ b/x-pack/plugins/index_management/tsconfig.json @@ -46,7 +46,8 @@ "@kbn/console-plugin", "@kbn/shared-ux-utility", "@kbn/index-management", - "@kbn/utility-types" + "@kbn/utility-types", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/pipeline_processors_editor.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/pipeline_processors_editor.test.tsx index 044121d1307db..dcb234b548903 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/pipeline_processors_editor.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/pipeline_processors_editor.test.tsx @@ -12,6 +12,7 @@ import { Pipeline } from '../../../../../common/types'; import { extractProcessorDetails, getProcessorTypesAndLabels, + groupProcessorsByCategory, } from '../components/processor_form/processors/common_fields/processor_type_field'; import { mapProcessorTypeToDescriptor } from '../components/shared/map_processor_type_to_form'; @@ -113,7 +114,7 @@ describe('Pipeline Editor', () => { // Get the list of processors that are only available for platinum licenses const processorsForPlatinumLicense = extractProcessorDetails(mapProcessorTypeToDescriptor) .filter((processor) => processor.forLicenseAtLeast === 'platinum') - .map(({ value, label }) => ({ label, value })); + .map(({ value, label, category }) => ({ label, value, category })); // Check that the list of processors for platinum licenses is not included in the list of processors for basic licenses expect(getProcessorTypesAndLabels(basicLicense)).toEqual( @@ -124,6 +125,20 @@ describe('Pipeline Editor', () => { ); }); + it('knows how to group processors by category', () => { + const platinumLicense = licensingMock.createLicense({ + license: { status: 'active', type: 'platinum' }, + }); + + const processors = getProcessorTypesAndLabels(platinumLicense); + const groupedProcessors = groupProcessorsByCategory(processors); + + for (let x = 0; x < groupedProcessors.length; x++) { + expect(groupedProcessors[x].label).not.toBeUndefined(); + expect(groupedProcessors[x].options.length).toBeGreaterThan(0); + } + }); + it('edits a processor without removing unknown processor.options', async () => { const { actions, exists, form } = testBed; // Open the edit processor form for the set processor diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/common_fields/processor_type_field.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/common_fields/processor_type_field.tsx index 9c83cde08be4c..7044e695c4370 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/common_fields/processor_type_field.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/processor_form/processors/common_fields/processor_type_field.tsx @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import React, { FunctionComponent, ReactNode, useMemo } from 'react'; import { flow } from 'fp-ts/lib/function'; import { map } from 'fp-ts/lib/Array'; +import { map as _map, groupBy as _groupBy } from 'lodash'; import { FieldValidateResponse, @@ -28,9 +29,10 @@ import { getProcessorDescriptor, mapProcessorTypeToDescriptor } from '../../../s export const extractProcessorDetails = flow( Object.entries, - map(([type, { label, forLicenseAtLeast }]) => ({ + map(([type, { label, forLicenseAtLeast, category }]) => ({ label, value: type, + category, ...(forLicenseAtLeast ? { forLicenseAtLeast } : {}), })), (arr) => arr.sort((a, b) => a.label.localeCompare(b.label)) @@ -41,6 +43,10 @@ interface ProcessorTypeAndLabel { label: string; } +type ProcessorWithCategory = ProcessorTypeAndLabel & { + category: string; +}; + export const getProcessorTypesAndLabels = (license: ILicense | null) => { return ( extractProcessorDetails(mapProcessorTypeToDescriptor) @@ -48,11 +54,21 @@ export const getProcessorTypesAndLabels = (license: ILicense | null) => { .filter((option) => { return option.forLicenseAtLeast ? license?.hasAtLeast(option.forLicenseAtLeast) : true; }) - // Convert to EuiComboBox options - .map(({ value, label }) => ({ label, value })) + // Pick properties we need to build the categories + .map(({ value, label, category }) => ({ label, value, category })) ); }; +export const groupProcessorsByCategory = (filteredProcessors: ProcessorWithCategory[]) => { + return _map(_groupBy(filteredProcessors, 'category'), (options, optionLabel) => ({ + label: optionLabel, + options: _map(options, ({ label, value }) => ({ + label, + value, + })), + })); +}; + interface Props { initialType?: string; } @@ -82,7 +98,12 @@ export const ProcessorTypeField: FunctionComponent = ({ initialType }) => } = useKibana(); const esDocUrl = documentation.getEsDocsBasePath(); // Some processors are only available for certain license types - const processorOptions = useMemo(() => getProcessorTypesAndLabels(license), [license]); + const processorOptions = useMemo(() => { + // Get all processors + const processors = getProcessorTypesAndLabels(license); + // Group them by category so that they can be properly rendered by the EuiComboBox + return groupProcessorsByCategory(processors); + }, [license]); return ( config={typeConfig} defaultValue={initialType} path="type"> diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/shared/map_processor_type_to_form.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/shared/map_processor_type_to_form.tsx index a9c243b7dca52..a4a838f92d1ab 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/shared/map_processor_type_to_form.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/components/shared/map_processor_type_to_form.tsx @@ -59,6 +59,30 @@ import { Reroute, } from '../processor_form/processors'; +const processorCategories = { + DATA_ENRICHMENT: i18n.translate('xpack.ingestPipelines.processors.category.dataEnrichment', { + defaultMessage: 'Data enrichment', + }), + DATA_TRANSFORMATION: i18n.translate( + 'xpack.ingestPipelines.processors.category.dataTransformation', + { + defaultMessage: 'Data transformation', + } + ), + DATA_FILTERING: i18n.translate('xpack.ingestPipelines.processors.category.dataFiltering', { + defaultMessage: 'Data filtering', + }), + PIPELINE_HANDLING: i18n.translate('xpack.ingestPipelines.processors.category.pipelineHandling', { + defaultMessage: 'Pipeline handling', + }), + ARRAY_JSON_HANDLING: i18n.translate( + 'xpack.ingestPipelines.processors.category.arrayJsonHandling', + { + defaultMessage: 'Array/JSON handling', + } + ), +}; + interface FieldDescriptor { FieldsComponent?: FormFieldsComponent; docLinkPath: string; @@ -78,12 +102,17 @@ interface FieldDescriptor { * Some processors are only available for certain license types */ forLicenseAtLeast?: LicenseType; + /** + * Processors are grouped by category in the processors dropdown + */ + category: string; } type MapProcessorTypeToDescriptor = Record; export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { append: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Append, docLinkPath: '/append-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.append', { @@ -103,6 +132,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, attachment: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Attachment, docLinkPath: '/attachment.html', label: i18n.translate('xpack.ingestPipelines.processors.label.attachment', { @@ -120,6 +150,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, bytes: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Bytes, docLinkPath: '/bytes-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.bytes', { @@ -138,6 +169,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, circle: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Circle, docLinkPath: '/ingest-circle-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.circle', { @@ -155,6 +187,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, community_id: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: CommunityId, docLinkPath: '/community-id-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.communityId', { @@ -169,6 +202,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, convert: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Convert, docLinkPath: '/convert-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.convert', { @@ -188,6 +222,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, csv: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: CSV, docLinkPath: '/csv-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.csv', { @@ -206,6 +241,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, date: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: DateProcessor, docLinkPath: '/date-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.date', { @@ -224,6 +260,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, date_index_name: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: DateIndexName, docLinkPath: '/date-index-name-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.dateIndexName', { @@ -257,6 +294,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }, }, dissect: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Dissect, docLinkPath: '/dissect-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.dissect', { @@ -274,6 +312,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, dot_expander: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: DotExpander, docLinkPath: '/dot-expand-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.dotExpander', { @@ -303,6 +342,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }, }, drop: { + category: processorCategories.DATA_FILTERING, FieldsComponent: Drop, docLinkPath: '/drop-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.drop', { @@ -317,6 +357,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, enrich: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Enrich, docLinkPath: '/ingest-enriching-data.html', label: i18n.translate('xpack.ingestPipelines.processors.label.enrich', { @@ -349,6 +390,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, fail: { + category: processorCategories.PIPELINE_HANDLING, FieldsComponent: Fail, docLinkPath: '/fail-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.fail', { @@ -364,6 +406,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, fingerprint: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Fingerprint, docLinkPath: '/fingerprint-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.fingerprint', { @@ -378,6 +421,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, foreach: { + category: processorCategories.ARRAY_JSON_HANDLING, FieldsComponent: Foreach, docLinkPath: '/foreach-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.foreach', { @@ -395,6 +439,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, geo_grid: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: GeoGrid, docLinkPath: '/ingest-geo-grid-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.geogrid', { @@ -413,6 +458,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, geoip: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: GeoIP, docLinkPath: '/geoip-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.geoip', { @@ -431,6 +477,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, grok: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Grok, docLinkPath: '/grok-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.grok', { @@ -460,6 +507,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, gsub: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Gsub, docLinkPath: '/gsub-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.gsub', { @@ -479,6 +527,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, html_strip: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: HtmlStrip, docLinkPath: '/htmlstrip-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.htmlStrip', { @@ -496,6 +545,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, inference: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: Inference, docLinkPath: '/inference-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.inference', { @@ -517,6 +567,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, join: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Join, docLinkPath: '/join-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.join', { @@ -535,6 +586,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, json: { + category: processorCategories.ARRAY_JSON_HANDLING, FieldsComponent: Json, docLinkPath: '/json-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.json', { @@ -552,6 +604,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, kv: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Kv, docLinkPath: '/kv-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.kv', { @@ -572,6 +625,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, lowercase: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Lowercase, docLinkPath: '/lowercase-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.lowercase', { @@ -589,6 +643,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, network_direction: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: NetworkDirection, docLinkPath: '/network-direction-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.networkDirection', { @@ -606,6 +661,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, pipeline: { + category: processorCategories.PIPELINE_HANDLING, FieldsComponent: Pipeline, docLinkPath: '/pipeline-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.pipeline', { @@ -623,6 +679,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, redact: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Redact, forLicenseAtLeast: 'platinum', docLinkPath: '/redact-processor.html', @@ -642,6 +699,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, registered_domain: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: RegisteredDomain, docLinkPath: '/registered-domain-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.registeredDomain', { @@ -664,6 +722,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, remove: { + category: processorCategories.DATA_FILTERING, FieldsComponent: Remove, docLinkPath: '/remove-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.remove', { @@ -681,6 +740,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, rename: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Rename, docLinkPath: '/rename-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.rename', { @@ -699,6 +759,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, reroute: { + category: processorCategories.PIPELINE_HANDLING, FieldsComponent: Reroute, docLinkPath: '/reroute-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.reroute', { @@ -713,6 +774,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, script: { + category: processorCategories.ARRAY_JSON_HANDLING, FieldsComponent: Script, docLinkPath: '/script-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.script', { @@ -724,6 +786,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { getDefaultDescription: () => 'Runs a script on incoming documents', }, set: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: SetProcessor, docLinkPath: '/set-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.set', { @@ -753,6 +816,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }, }, set_security_user: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: SetSecurityUser, docLinkPath: '/ingest-node-set-security-user-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.setSecurityUser', { @@ -772,6 +836,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, sort: { + category: processorCategories.ARRAY_JSON_HANDLING, FieldsComponent: Sort, docLinkPath: '/sort-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.sort', { @@ -799,6 +864,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, split: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Split, docLinkPath: '/split-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.split', { @@ -816,6 +882,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, trim: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Trim, docLinkPath: '/trim-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.trim', { @@ -833,6 +900,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, uppercase: { + category: processorCategories.DATA_TRANSFORMATION, FieldsComponent: Uppercase, docLinkPath: '/uppercase-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.uppercase', { @@ -850,6 +918,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, urldecode: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: UrlDecode, docLinkPath: '/urldecode-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.urldecode', { @@ -867,6 +936,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, uri_parts: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: UriParts, docLinkPath: '/uri-parts-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.uriPartsLabel', { @@ -887,6 +957,7 @@ export const mapProcessorTypeToDescriptor: MapProcessorTypeToDescriptor = { }), }, user_agent: { + category: processorCategories.DATA_ENRICHMENT, FieldsComponent: UserAgent, docLinkPath: '/user-agent-processor.html', label: i18n.translate('xpack.ingestPipelines.processors.label.userAgent', { diff --git a/x-pack/plugins/ingest_pipelines/public/application/index.tsx b/x-pack/plugins/ingest_pipelines/public/application/index.tsx index d4c4e73f6b6c6..8f0adf677677e 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/index.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/index.tsx @@ -5,19 +5,18 @@ * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import React, { ReactNode } from 'react'; +import { CoreStart, HttpSetup } from '@kbn/core/public'; +import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { Observable } from 'rxjs'; import { ApplicationStart } from '@kbn/core/public'; -import { NotificationsSetup, IUiSettingsClient, CoreTheme } from '@kbn/core/public'; +import { NotificationsSetup, IUiSettingsClient } from '@kbn/core/public'; import { ManagementAppMountParams } from '@kbn/management-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { FileUploadPluginStart } from '@kbn/file-upload-plugin/public'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; -import { KibanaContextProvider, KibanaThemeProvider } from '../shared_imports'; +import { KibanaContextProvider, KibanaRenderContextProvider } from '../shared_imports'; import { ILicense } from '../types'; import { API_BASE_PATH } from '../../common/constants'; @@ -49,30 +48,28 @@ export interface AppServices { license: ILicense | null; } -export interface CoreServices { +type StartServices = Pick; + +export interface CoreServices extends StartServices { http: HttpSetup; } export const renderApp = ( element: HTMLElement, - I18nContext: ({ children }: { children: ReactNode }) => JSX.Element, services: AppServices, - coreServices: CoreServices, - { theme$ }: { theme$: Observable } + coreServices: CoreServices ) => { render( - - - - - - - - - , + + + + + + + , element ); diff --git a/x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts b/x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts index 07a3f9922874c..b2978d4b18fc6 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts +++ b/x-pack/plugins/ingest_pipelines/public/application/mount_management_section.ts @@ -26,14 +26,9 @@ export async function mountManagementSection( { http, getStartServices, notifications }: CoreSetup, params: AppParams ) { - const { element, setBreadcrumbs, history, theme$, license } = params; + const { element, setBreadcrumbs, history, license } = params; const [coreStart, depsStart] = await getStartServices(); - const { - docLinks, - application, - i18n: { Context: I18nContext }, - executionContext, - } = coreStart; + const { docLinks, application, executionContext } = coreStart; documentationService.setup(docLinks); breadcrumbService.setup(setBreadcrumbs); @@ -55,5 +50,5 @@ export async function mountManagementSection( license, }; - return renderApp(element, I18nContext, services, { http }, { theme$ }); + return renderApp(element, services, { ...coreStart, http }); } diff --git a/x-pack/plugins/ingest_pipelines/public/shared_imports.ts b/x-pack/plugins/ingest_pipelines/public/shared_imports.ts index 049f7b6c05572..5880bff1d3dae 100644 --- a/x-pack/plugins/ingest_pipelines/public/shared_imports.ts +++ b/x-pack/plugins/ingest_pipelines/public/shared_imports.ts @@ -88,4 +88,6 @@ export { useExecutionContext, } from '@kbn/kibana-react-plugin/public'; +export { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; + export const useKibana = () => _useKibana(); diff --git a/x-pack/plugins/ingest_pipelines/tsconfig.json b/x-pack/plugins/ingest_pipelines/tsconfig.json index f38d8b4d39ae3..b77ba94996751 100644 --- a/x-pack/plugins/ingest_pipelines/tsconfig.json +++ b/x-pack/plugins/ingest_pipelines/tsconfig.json @@ -31,6 +31,7 @@ "@kbn/shared-ux-router", "@kbn/core-ui-settings-browser", "@kbn/code-editor", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/lens/common/expressions/datatable/datatable.ts b/x-pack/plugins/lens/common/expressions/datatable/datatable.ts index 4f04fc1753c82..6b73b63d30c63 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/datatable.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/datatable.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { ExecutionContext } from '@kbn/expressions-plugin/common'; -import type { FormatFactory } from '../../types'; +import type { FormatFactory, RowHeightMode } from '../../types'; import type { ColumnConfigArg } from './datatable_column'; import type { DatatableExpressionFunction } from './types'; @@ -29,7 +29,7 @@ export interface DatatableArgs { sortingDirection: SortingState['direction']; fitRowToContent?: boolean; rowHeightLines?: number; - headerRowHeight?: 'auto' | 'single' | 'custom'; + headerRowHeight?: RowHeightMode; headerRowHeightLines?: number; pageSize?: PagingState['size']; } diff --git a/x-pack/plugins/lens/common/types.ts b/x-pack/plugins/lens/common/types.ts index 34baa25120e09..b329e8e3d2dda 100644 --- a/x-pack/plugins/lens/common/types.ts +++ b/x-pack/plugins/lens/common/types.ts @@ -95,3 +95,9 @@ export interface LegacyMetricState { size?: string; textAlign?: 'left' | 'right' | 'center'; } + +export enum RowHeightMode { + auto = 'auto', + single = 'single', + custom = 'custom', +} diff --git a/x-pack/plugins/lens/kibana.jsonc b/x-pack/plugins/lens/kibana.jsonc index add1658514cd0..367260bae0f00 100644 --- a/x-pack/plugins/lens/kibana.jsonc +++ b/x-pack/plugins/lens/kibana.jsonc @@ -35,7 +35,7 @@ "expressionTagcloud", "eventAnnotation", "unifiedSearch", - "contentManagement" + "contentManagement", ], "optionalPlugins": [ "expressionLegacyMetricVis", @@ -45,7 +45,8 @@ "globalSearch", "savedObjectsTagging", "spaces", - "serverless" + "serverless", + "licensing" ], "requiredBundles": [ "unifiedSearch", diff --git a/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_panel_content.tsx b/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_panel_content.tsx index 59d76f78123fc..28f92c6fc8832 100644 --- a/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_panel_content.tsx +++ b/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_panel_content.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiButton, EuiForm, EuiSpacer, EuiText } from '@elastic/eui'; +import { EuiButton, EuiForm, EuiFormRow, EuiSpacer, EuiText } from '@elastic/eui'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -21,32 +21,33 @@ export function DownloadPanelContent({ warnings = [], }: DownloadPanelContentProps) { return ( - - -

+ <> + + -

- {warnings.map((warning, i) => ( -

{warning}

- ))} -
- - - - -
+ {warnings.map((warning, i) => ( +

{warning}

+ ))} + + + + + + + + + ); } diff --git a/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_provider.tsx b/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_provider.tsx index 88c7c8de2c092..434ff052d2f7d 100644 --- a/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_provider.tsx +++ b/x-pack/plugins/lens/public/app_plugin/csv_download_provider/csv_download_provider.tsx @@ -11,9 +11,10 @@ import { tableHasFormulas } from '@kbn/data-plugin/common'; import { downloadMultipleAs, ShareContext, ShareMenuProvider } from '@kbn/share-plugin/public'; import { exporters } from '@kbn/data-plugin/public'; import { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; +import { FormattedMessage } from '@kbn/i18n-react'; import { FormatFactory } from '../../../common/types'; -import { DownloadPanelContent } from './csv_download_panel_content_lazy'; import { TableInspectorAdapter } from '../../editor_frame_service/types'; +import { DownloadPanelContent } from './csv_download_panel_content_lazy'; declare global { interface Window { @@ -96,13 +97,17 @@ function getWarnings(activeData: TableInspectorAdapter) { interface DownloadPanelShareOpts { uiSettings: IUiSettingsClient; formatFactoryFn: () => FormatFactory; + atLeastGold: () => boolean; + isNewVersion: boolean; } export const downloadCsvShareProvider = ({ uiSettings, formatFactoryFn, + atLeastGold, + isNewVersion, }: DownloadPanelShareOpts): ShareMenuProvider => { - const getShareMenuItems = ({ objectType, sharingData, onClose }: ShareContext) => { + const getShareMenuItems = ({ objectType, sharingData }: ShareContext) => { if ('lens' !== objectType) { return []; } @@ -121,40 +126,87 @@ export const downloadCsvShareProvider = ({ } ); + const menuItemMetadata = { + shareMenuItem: { + name: panelTitle, + icon: 'document', + disabled: !csvEnabled, + sortOrder: 1, + }, + }; + + const downloadCSVHandler = () => + downloadCSVs({ + title, + formatFactory: formatFactoryFn(), + activeData, + uiSettings, + columnsSorting, + }); + + if (!isNewVersion) { + return [ + { + ...menuItemMetadata, + panel: { + id: 'csvDownloadPanel', + title: panelTitle, + content: ( + + ), + }, + }, + ]; + } + return [ { - shareMenuItem: { - name: panelTitle, - icon: 'document', - disabled: !csvEnabled, - sortOrder: 1, - }, - panel: { - id: 'csvDownloadPanel', - title: panelTitle, - content: ( - { - await downloadCSVs({ - title, - formatFactory: formatFactoryFn(), - activeData, - uiSettings, - columnsSorting, - }); - onClose?.(); - }} - /> - ), - }, + ...menuItemMetadata, + label: 'CSV' as const, + reportType: 'lens_csv', + downloadCSVLens: downloadCSVHandler, + ...(atLeastGold() + ? { + helpText: ( + + ), + generateReportButton: ( + + ), + renderLayoutOptionSwitch: false, + getJobParams: undefined, + showRadios: true, + } + : { + isDisabled: !csvEnabled, + warnings: getWarnings(activeData), + helpText: ( + + ), + generateReportButton: ( + + ), + }), }, ]; }; return { - id: 'csvDownload', + id: 'csvDownloadLens', getShareMenuItems, }; }; diff --git a/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx b/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx index ae1a8fec7a88e..d63036ccfe7fc 100644 --- a/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx +++ b/x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx @@ -297,6 +297,7 @@ export const LensTopNavMenu = ({ dataViewFieldEditor, dataViewEditor, dataViews: dataViewsService, + notifications, } = useKibana().services; const { @@ -639,6 +640,7 @@ export const LensTopNavMenu = ({ onClose: () => { anchorElement?.focus(); }, + toasts: notifications.toasts, }); }, }, @@ -793,6 +795,7 @@ export const LensTopNavMenu = ({ isOnTextBasedMode, lensStore, theme$, + notifications.toasts, ]); const onQuerySubmitWrapped = useCallback( diff --git a/x-pack/plugins/lens/public/plugin.ts b/x-pack/plugins/lens/public/plugin.ts index 8bd4206a3fe98..0ab4e16bb70f1 100644 --- a/x-pack/plugins/lens/public/plugin.ts +++ b/x-pack/plugins/lens/public/plugin.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { take } from 'rxjs'; import type { AppMountParameters, CoreSetup, CoreStart } from '@kbn/core/public'; import type { Start as InspectorStartContract } from '@kbn/inspector-plugin/public'; import type { FieldFormatsSetup, FieldFormatsStart } from '@kbn/field-formats-plugin/public'; @@ -63,6 +64,7 @@ import { import { i18n } from '@kbn/i18n'; import type { ServerlessPluginStart } from '@kbn/serverless/public'; import { registerSavedObjectToPanelMethod } from '@kbn/embeddable-plugin/public'; +import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import type { EditorFrameService as EditorFrameServiceType } from './editor_frame_service'; import type { FormBasedDatasource as FormBasedDatasourceType, @@ -179,6 +181,7 @@ export interface LensPluginStartDependencies { eventAnnotationService: EventAnnotationServiceType; contentManagement: ContentManagementPublicStart; serverless?: ServerlessPluginStart; + licensing?: LicensingPluginStart; } export interface LensPublicSetup { @@ -393,6 +396,17 @@ export class LensPlugin { downloadCsvShareProvider({ uiSettings: core.uiSettings, formatFactoryFn: () => startServices().plugins.fieldFormats.deserialize, + atLeastGold: () => { + let isGold = false; + startServices() + .plugins.licensing?.license$.pipe(take(1)) + .subscribe((license) => { + // need to make sure user has correct license and permissions to see PDF/PNG + isGold = license.hasAtLeast('gold'); + }); + return isGold; + }, + isNewVersion: share.isNewVersion(), }) ); } diff --git a/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx b/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx index e79d5e9c1624c..0b394ec638d69 100644 --- a/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx +++ b/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx @@ -21,6 +21,7 @@ export function PalettePanelContainer(props: { return ( void }) => ( <> diff --git a/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts b/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts index 834f3f5b1bf3c..04306ffdfa326 100644 --- a/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts +++ b/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts @@ -6,7 +6,7 @@ */ import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { applyPaletteParams, getContrastColor } from './utils'; +import { applyPaletteParams, findMinMaxByColumnId, getContrastColor } from './utils'; describe('applyPaletteParams', () => { const paletteRegistry = chartPluginMock.createPaletteRegistry(); @@ -70,3 +70,41 @@ describe('getContrastColor', () => { expect(getContrastColor('rgba(255,255,255,0)', false)).toBe('#000000'); }); }); + +describe('findMinMaxByColumnId', () => { + it('should return the min and max values for a column', () => { + expect( + findMinMaxByColumnId(['b'], { + type: 'datatable', + columns: [ + { + id: 'a', + name: 'a', + meta: { + type: 'string', + source: 'esaggs', + field: 'a', + sourceParams: { type: 'terms', indexPatternId: 'indexPatternId' }, + }, + }, + { + id: 'b', + name: 'b', + meta: { + type: 'number', + source: 'esaggs', + field: 'b', + sourceParams: { indexPatternId: 'indexPatternId', type: 'count' }, + }, + }, + ], + rows: [ + { a: 'shoes', b: 3 }, + { a: 'shoes', b: 2 }, + { a: 'shoes', b: 43 }, + { a: 'shoes', b: 53 }, + ], + }) + ).toEqual({ b: { min: 2, max: 53 } }); + }); +}); diff --git a/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.tsx b/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.tsx index b96b47cfb6088..2bcb6a71bf541 100644 --- a/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.tsx +++ b/x-pack/plugins/lens/public/shared_components/setting_with_sibling_flyout.tsx @@ -32,12 +32,14 @@ export function SettingWithSiblingFlyout({ title = DEFAULT_TITLE, isInlineEditing, SettingTrigger, + dataTestSubj = 'lns-settingWithSiblingFlyout', }: { title?: string; siblingRef: MutableRefObject; SettingTrigger: ({ onClick }: { onClick: () => void }) => JSX.Element; children?: React.ReactElement | React.ReactElement[]; isInlineEditing?: boolean; + dataTestSubj?: string; }) { const [focusTrapIsEnabled, setFocusTrapIsEnabled] = useState(false); const [isFlyoutOpen, setIsFlyoutOpen] = useState(false); @@ -71,7 +73,7 @@ export function SettingWithSiblingFlyout({
diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/__snapshots__/table_basic.test.tsx.snap b/x-pack/plugins/lens/public/visualizations/datatable/components/__snapshots__/table_basic.test.tsx.snap deleted file mode 100644 index d09e312e9a6da..0000000000000 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/__snapshots__/table_basic.test.tsx.snap +++ /dev/null @@ -1,1252 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`DatatableComponent it renders actions column when there are row actions 1`] = ` - - - - a -
, - "displayAsText": "a", - "id": "a", - "schema": "a", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- b -
, - "displayAsText": "b", - "id": "b", - "schema": "b", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- c -
, - "displayAsText": "c", - "id": "c", - "schema": "c", - "visibleCellActions": 5, - }, - ] - } - data-test-subj="lnsDataTable" - gridStyle={ - Object { - "border": "horizontal", - "header": "underline", - } - } - inMemory={ - Object { - "level": "sorting", - } - } - onColumnResize={[Function]} - renderCellValue={[Function]} - rowCount={1} - rowHeightsOptions={ - Object { - "defaultHeight": undefined, - } - } - schemaDetectors={ - Array [ - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "a", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "b", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "c", - }, - ] - } - sorting={ - Object { - "columns": Array [], - "onSort": [Function], - } - } - toolbarVisibility={false} - trailingControlColumns={ - Array [ - Object { - "headerCellRender": [Function], - "id": "trailingControlColumn", - "rowCellRender": [Function], - "width": 40, - }, - ] - } - /> - - -`; - -exports[`DatatableComponent it renders custom row height if set to another value than 1 1`] = ` - - - - a -
, - "displayAsText": "a", - "id": "a", - "schema": "a", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- b -
, - "displayAsText": "b", - "id": "b", - "schema": "b", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- c -
, - "displayAsText": "c", - "id": "c", - "schema": "c", - "visibleCellActions": 5, - }, - ] - } - data-test-subj="lnsDataTable" - gridStyle={ - Object { - "border": "horizontal", - "header": "underline", - } - } - inMemory={ - Object { - "level": "sorting", - } - } - onColumnResize={[Function]} - renderCellValue={[Function]} - rowCount={1} - rowHeightsOptions={ - Object { - "defaultHeight": Object { - "lineCount": 5, - }, - } - } - schemaDetectors={ - Array [ - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "a", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "b", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "c", - }, - ] - } - sorting={ - Object { - "columns": Array [], - "onSort": [Function], - } - } - toolbarVisibility={false} - trailingControlColumns={Array []} - /> - - -`; - -exports[`DatatableComponent it renders the title and value 1`] = ` - - - - a - , - "displayAsText": "a", - "id": "a", - "schema": "a", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- b -
, - "displayAsText": "b", - "id": "b", - "schema": "b", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- c -
, - "displayAsText": "c", - "id": "c", - "schema": "c", - "visibleCellActions": 5, - }, - ] - } - data-test-subj="lnsDataTable" - gridStyle={ - Object { - "border": "horizontal", - "header": "underline", - } - } - inMemory={ - Object { - "level": "sorting", - } - } - onColumnResize={[Function]} - renderCellValue={[Function]} - rowCount={1} - rowHeightsOptions={ - Object { - "defaultHeight": undefined, - } - } - schemaDetectors={ - Array [ - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "a", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "b", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "c", - }, - ] - } - sorting={ - Object { - "columns": Array [], - "onSort": [Function], - } - } - toolbarVisibility={false} - trailingControlColumns={Array []} - /> -
-
-`; - -exports[`DatatableComponent it should render hide, reset, and sort actions on header even when it is in read only mode 1`] = ` - - - - a - , - "displayAsText": "a", - "id": "a", - "schema": "a", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- b -
, - "displayAsText": "b", - "id": "b", - "schema": "b", - "visibleCellActions": 5, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "color": "text", - "data-test-subj": "lensDatatableResetWidth", - "iconType": "empty", - "isDisabled": true, - "label": "Reset width", - "onClick": [Function], - "size": "xs", - }, - Object { - "color": "text", - "data-test-subj": "lensDatatableHide", - "iconType": "eyeClosed", - "isDisabled": false, - "label": "Hide", - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - "showSortAsc": Object { - "label": "Sort ascending", - }, - "showSortDesc": Object { - "label": "Sort descending", - }, - }, - "cellActions": Array [], - "display":
- c -
, - "displayAsText": "c", - "id": "c", - "schema": "c", - "visibleCellActions": 5, - }, - ] - } - data-test-subj="lnsDataTable" - gridStyle={ - Object { - "border": "horizontal", - "header": "underline", - } - } - inMemory={ - Object { - "level": "sorting", - } - } - onColumnResize={[Function]} - renderCellValue={[Function]} - rowCount={1} - rowHeightsOptions={ - Object { - "defaultHeight": undefined, - } - } - schemaDetectors={ - Array [ - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "a", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "b", - }, - Object { - "comparator": [Function], - "defaultSortDirection": undefined, - "detector": [Function], - "icon": "", - "sortTextAsc": "Sort Ascending", - "sortTextDesc": "Sort Descending", - "type": "c", - }, - ] - } - sorting={ - Object { - "columns": Array [], - "onSort": [Function], - } - } - toolbarVisibility={false} - trailingControlColumns={Array []} - /> -
-
-`; diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx index 5d1c39d81728a..ba436f0a588fa 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx @@ -5,19 +5,16 @@ * 2.0. */ -import { mountWithIntl } from '@kbn/test-jest-helpers'; import React from 'react'; import { DataContext } from './table_basic'; import { createGridCell } from './cell_value'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import { Datatable } from '@kbn/expressions-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; -import { act } from 'react-dom/test-utils'; -import { ReactWrapper } from 'enzyme'; import { DatatableArgs, ColumnConfigArg } from '../../../../common/expressions'; import { DataContextType } from './types'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { EuiLink } from '@elastic/eui'; +import { render, screen } from '@testing-library/react'; describe('datatable cell renderer', () => { const table: Datatable = { @@ -43,76 +40,58 @@ describe('datatable cell renderer', () => { setUpMockTheme ); - it('renders formatted value', () => { - const instance = mountWithIntl( - - {}} - isExpandable={false} - isDetails={false} - isExpanded={false} - /> - + const setCellProps = jest.fn(); + + afterEach(() => { + jest.clearAllMocks(); + }); + + const DataContextProviderWrapper = + (wrapperProps?: Partial) => + ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ); + }; + const renderCellRenderer = () => { + const rtlRender = render( + , + { wrapper: DataContextProviderWrapper() } ); - expect(instance.text()).toEqual('formatted 123'); + return { ...rtlRender }; + }; + + it('renders formatted value', () => { + renderCellRenderer(); + expect(screen.getByText('formatted 123')).toHaveTextContent('formatted 123'); }); it('set class with text alignment', () => { - const cell = mountWithIntl( - - {}} - isExpandable={false} - isDetails={false} - isExpanded={false} - /> - - ); - expect(cell.find('.lnsTableCell--right').exists()).toBeTruthy(); + renderCellRenderer(); + expect(screen.getByText('formatted 123')).toHaveClass('lnsTableCell--right'); }); it('does not set multiline class for regular height tables', () => { - const cell = mountWithIntl( - - {}} - isExpandable={false} - isDetails={false} - isExpanded={false} - /> - - ); - expect(cell.find('.lnsTableCell--multiline').exists()).toBeFalsy(); + renderCellRenderer(); + expect(screen.getByText('formatted 123')).not.toHaveClass('lnsTableCell--multiline'); }); it('set multiline class for auto height tables', () => { @@ -125,30 +104,23 @@ describe('datatable cell renderer', () => { setUpMockTheme, true ); - const cell = mountWithIntl( - - {}} - isExpandable={false} - isDetails={false} - isExpanded={false} - /> - + render( + , + { wrapper: DataContextProviderWrapper() } ); - expect(cell.find('.lnsTableCell--multiline').exists()).toBeTruthy(); + + expect(screen.getByText('formatted 123')).toHaveClass('lnsTableCell--multiline'); }); - it('renders as EuiLink if oneClickFilter is set', () => { + it('renders as button if oneClickFilter is set', () => { const MultiLineCellRenderer = createGridCell( { a: { convert: (x) => `formatted ${x}` } as FieldFormat, @@ -168,28 +140,19 @@ describe('datatable cell renderer', () => { setUpMockTheme, true ); - const cell = mountWithIntl( - {}, - }} - > - {}} - isExpandable={false} - isDetails={false} - isExpanded={false} - /> - + render( + , + { wrapper: DataContextProviderWrapper({ handleFilterClick: () => {} }) } ); - expect(cell.find(EuiLink).text()).toEqual('formatted 123'); + expect(screen.getByRole('button')).toHaveTextContent('formatted 123'); }); describe('dynamic coloring', () => { @@ -234,80 +197,67 @@ describe('datatable cell renderer', () => { }; } - function flushEffect(component: ReactWrapper) { - return act(async () => { - await component; - await new Promise((r) => setImmediate(r)); - component.update(); - }); - } - - async function renderCellComponent( - columnConfig: DatatableArgs, + function renderCellComponent( + columnConfig = getColumnConfiguration(), context: Partial = {} ) { const CellRendererWithPalette = getCellRenderer(columnConfig); - const setCellProps = jest.fn(); - const cell = mountWithIntl( - , + { + wrapper: DataContextProviderWrapper({ table, minMaxByColumnId: { a: { min: 12, max: 155 /* > 123 */ } }, getColorForValue: customPalette.getColorForValue, ...context, - }} - > - - + }), + } ); - - await flushEffect(cell); - - return { setCellProps, cell }; + return { ...rtlRender }; } - it('ignores coloring when colorMode is set to "none"', async () => { - const { setCellProps } = await renderCellComponent(getColumnConfiguration()); - + it('ignores coloring when colorMode is set to "none"', () => { + renderCellComponent(); expect(setCellProps).not.toHaveBeenCalled(); }); - it('should set the coloring of the cell when enabled', async () => { + it('should set the coloring of the cell when enabled', () => { const columnConfig = getColumnConfiguration(); columnConfig.columns[0].colorMode = 'cell'; - const { setCellProps } = await renderCellComponent(columnConfig, {}); + renderCellComponent(columnConfig, {}); expect(setCellProps).toHaveBeenCalledWith({ style: expect.objectContaining({ backgroundColor: 'blue' }), }); }); - it('should set the coloring of the text when enabled', async () => { + it('should set the coloring of the text when enabled', () => { const columnConfig = getColumnConfiguration(); columnConfig.columns[0].colorMode = 'text'; - const { setCellProps } = await renderCellComponent(columnConfig, {}); + renderCellComponent(columnConfig, {}); expect(setCellProps).toHaveBeenCalledWith({ style: expect.objectContaining({ color: 'blue' }), }); }); - it('should not color the cell when the value is an array', async () => { + it('should not color the cell when the value is an array', () => { + setCellProps.mockClear(); const columnConfig = getColumnConfiguration(); columnConfig.columns[0].colorMode = 'cell'; - const { setCellProps } = await renderCellComponent(columnConfig, { + renderCellComponent(columnConfig, { table: { ...table, rows: [{ a: [10, 123] }] }, }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.test.tsx index 1b4259e4cf63b..3612317f7a565 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.test.tsx @@ -5,11 +5,17 @@ * 2.0. */ import React from 'react'; -import { EuiDataGridColumnCellAction, EuiDataGridColumnCellActionProps } from '@elastic/eui'; +import { + EuiButtonEmptyProps, + EuiDataGridColumnCellAction, + EuiDataGridColumnCellActionProps, + EuiButtonEmpty, +} from '@elastic/eui'; import type { Datatable } from '@kbn/expressions-plugin/public'; -import { shallow } from 'enzyme'; +import { render, screen } from '@testing-library/react'; import { ReactNode } from 'react'; -import { FormatFactory } from '../../../../common/types'; +import { RowHeightMode } from '../../../../common/types'; +import type { FormatFactory } from '../../../../common/types'; import type { LensCellValueAction } from '../../../types'; import { createGridColumns } from './columns'; @@ -67,7 +73,7 @@ const callCreateGridColumns = ( params.onColumnResize ?? jest.fn(), params.onColumnHide ?? jest.fn(), params.alignments ?? {}, - params.headerRowHeight ?? 'auto', + params.headerRowHeight ?? RowHeightMode.auto, params.headerRowLines ?? 1, params.columnCellValueActions ?? [], params.closeCellPopover ?? jest.fn(), @@ -85,10 +91,12 @@ const renderCellAction = ( { rowIndex: 0, columnId: 'a', - Component: () => <>, - } as unknown as EuiDataGridColumnCellActionProps + Component: (props: EuiButtonEmptyProps) => , + isExpanded: false, + colIndex: 0, + } ); - return shallow(
{cellAction}
); + return render(<>{cellAction}); }; describe('getContentData', () => { @@ -138,8 +146,8 @@ describe('getContentData', () => { columnFilterable: [true], columnCellValueActions: [[cellValueAction]], }); - const wrapper = renderCellAction(cellActions, 0); - expect(wrapper?.find('Component').prop('data-test-subj')).toEqual('lensDatatableFilterFor'); + renderCellAction(cellActions, 0); + expect(screen.getByRole('button')).toHaveTextContent('Filter for'); }); it('should render filterOut as second action', () => { @@ -148,8 +156,8 @@ describe('getContentData', () => { columnFilterable: [true], columnCellValueActions: [[cellValueAction]], }); - const wrapper = renderCellAction(cellActions, 1); - expect(wrapper?.find('Component').prop('data-test-subj')).toEqual('lensDatatableFilterOut'); + renderCellAction(cellActions, 1); + expect(screen.getByRole('button')).toHaveTextContent('Filter out'); }); it('should render cellValue actions at the end', () => { @@ -158,10 +166,8 @@ describe('getContentData', () => { columnFilterable: [true], columnCellValueActions: [[cellValueAction]], }); - const wrapper = renderCellAction(cellActions, 2); - expect(wrapper?.find('Component').prop('data-test-subj')).toEqual( - 'lensDatatableCellAction-test' - ); + renderCellAction(cellActions, 2); + expect(screen.getByRole('button')).toHaveTextContent('Test'); }); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx index e1ad35e374428..99bc648f8bf6d 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx @@ -17,9 +17,11 @@ import type { Datatable, DatatableColumn } from '@kbn/expressions-plugin/common' import { EuiDataGridColumnCellAction } from '@elastic/eui/src/components/datagrid/data_grid_types'; import { FILTER_CELL_ACTION_TYPE } from '@kbn/cell-actions/constants'; import type { FormatFactory } from '../../../../common/types'; +import { RowHeightMode } from '../../../../common/types'; import type { ColumnConfig } from '../../../../common/expressions'; import { LensCellValueAction } from '../../../types'; import { buildColumnsMetaLookup } from './helpers'; +import { DEFAULT_HEADER_ROW_HEIGHT } from './constants'; const hasFilterCellAction = (actions: LensCellValueAction[]) => { return actions.some(({ type }) => type === FILTER_CELL_ACTION_TYPE); @@ -50,7 +52,7 @@ export const createGridColumns = ( onColumnResize: (eventData: { columnId: string; width: number | undefined }) => void, onColumnHide: ((eventData: { columnId: string }) => void) | undefined, alignments: Record, - headerRowHeight: 'auto' | 'single' | 'custom', + headerRowHeight: RowHeightMode, headerRowLines: number, columnCellValueActions: LensCellValueAction[][] | undefined, closeCellPopover?: Function, @@ -260,10 +262,12 @@ export const createGridColumns = ( } } const currentAlignment = alignments && alignments[field]; - const hasMultipleRows = headerRowHeight === 'auto' || headerRowHeight === 'custom'; + const hasMultipleRows = [RowHeightMode.auto, RowHeightMode.custom, undefined].includes( + headerRowHeight + ); const columnStyle = css({ - ...(headerRowHeight === 'custom' && { + ...((headerRowHeight === DEFAULT_HEADER_ROW_HEIGHT || headerRowHeight === undefined) && { WebkitLineClamp: headerRowLines, }), ...(hasMultipleRows && { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/constants.ts b/x-pack/plugins/lens/public/visualizations/datatable/components/constants.ts index b1053631b0117..173c75358d7a3 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/constants.ts +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/constants.ts @@ -5,7 +5,13 @@ * 2.0. */ +import { RowHeightMode } from '../../../../common/types'; + export const LENS_EDIT_SORT_ACTION = 'sort'; export const LENS_EDIT_RESIZE_ACTION = 'resize'; export const LENS_TOGGLE_ACTION = 'toggle'; export const LENS_EDIT_PAGESIZE_ACTION = 'pagesize'; +export const DEFAULT_HEADER_ROW_HEIGHT_LINES = 3; +export const DEFAULT_HEADER_ROW_HEIGHT = RowHeightMode.custom; +export const DEFAULT_ROW_HEIGHT = RowHeightMode.single; +export const DEFAULT_ROW_HEIGHT_LINES = 2; diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx index cec781a905b44..133b18bb3ce67 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx @@ -6,8 +6,12 @@ */ import React from 'react'; -import { EuiButtonGroup } from '@elastic/eui'; import type { PaletteRegistry } from '@kbn/coloring'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; +import { LayerTypes } from '@kbn/expression-xy-plugin/public'; +import { getSelectedButtonInGroup } from '@kbn/test-eui-helpers'; import { FramePublicAPI, OperationDescriptor, @@ -16,12 +20,7 @@ import { } from '../../../types'; import { DatatableVisualizationState } from '../visualization'; import { createMockDatasource, createMockFramePublicAPI } from '../../../mocks'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; import { TableDimensionEditor } from './dimension_editor'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { act } from 'react-dom/test-utils'; -import { PalettePanelContainer } from '../../../shared_components'; -import { LayerTypes } from '@kbn/expression-xy-plugin/public'; describe('data table dimension editor', () => { let frame: FramePublicAPI; @@ -65,6 +64,7 @@ describe('data table dimension editor', () => { }, }; setState = jest.fn(); + props = { accessor: 'foo', frame, @@ -80,33 +80,38 @@ describe('data table dimension editor', () => { }; }); + const renderTableDimensionEditor = ( + overrideProps?: Partial< + VisualizationDimensionEditorProps & { + paletteService: PaletteRegistry; + } + > + ) => { + return render(, { + wrapper: ({ children }) => ( + <> +
+ {children} + + ), + }); + }; + it('should render default alignment', () => { - const instance = mountWithIntl(); - expect(instance.find(EuiButtonGroup).prop('idSelected')).toEqual( - expect.stringContaining('left') - ); + renderTableDimensionEditor(); + expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Left'); }); it('should render default alignment for number', () => { frame.activeData!.first.columns[0].meta.type = 'number'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_alignment_groups"]') - .find(EuiButtonGroup) - .prop('idSelected') - ).toEqual(expect.stringContaining('right')); + renderTableDimensionEditor(); + expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Right'); }); it('should render specific alignment', () => { state.columns[0].alignment = 'center'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_alignment_groups"]') - .find(EuiButtonGroup) - .prop('idSelected') - ).toEqual(expect.stringContaining('center')); + renderTableDimensionEditor(); + expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Center'); }); it('should set state for the right column', () => { @@ -118,11 +123,8 @@ describe('data table dimension editor', () => { columnId: 'bar', }, ]; - const instance = mountWithIntl(); - instance - .find('[data-test-subj="lnsDatatable_alignment_groups"]') - .find(EuiButtonGroup) - .prop('onChange')('center'); + renderTableDimensionEditor(); + userEvent.click(screen.getByRole('button', { name: 'Center' })); expect(setState).toHaveBeenCalledWith({ ...state, columns: [ @@ -138,38 +140,28 @@ describe('data table dimension editor', () => { }); it('should not show the dynamic coloring option for non numeric columns', () => { - const instance = mountWithIntl(); - expect(instance.find('[data-test-subj="lnsDatatable_dynamicColoring_groups"]').exists()).toBe( - false - ); - expect(instance.find('[data-test-subj="lns_dynamicColoring_edit"]').exists()).toBe(false); + renderTableDimensionEditor(); + expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).not.toBeInTheDocument(); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); }); it('should set the dynamic coloring default to "none"', () => { frame.activeData!.first.columns[0].meta.type = 'number'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_dynamicColoring_groups"]') - .find(EuiButtonGroup) - .prop('idSelected') - ).toEqual(expect.stringContaining('none')); - - expect(instance.find('[data-test-subj="lns_dynamicColoring_edit"]').exists()).toBe(false); + renderTableDimensionEditor(); + expect(getSelectedButtonInGroup('lnsDatatable_dynamicColoring_groups')()).toHaveTextContent( + 'None' + ); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); }); it('should show the dynamic palette display ony when colorMode is different from "none"', () => { frame.activeData!.first.columns[0].meta.type = 'number'; state.columns[0].colorMode = 'text'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_dynamicColoring_groups"]') - .find(EuiButtonGroup) - .prop('idSelected') - ).toEqual(expect.stringContaining('text')); - - expect(instance.find('[data-test-subj="lns_dynamicColoring_edit"]').exists()).toBe(true); + renderTableDimensionEditor(); + expect(getSelectedButtonInGroup('lnsDatatable_dynamicColoring_groups')()).toHaveTextContent( + 'Text' + ); + expect(screen.getByTestId('lns_dynamicColoring_edit')).toBeInTheDocument(); }); it('should set the coloring mode to the right column', () => { @@ -182,11 +174,8 @@ describe('data table dimension editor', () => { columnId: 'bar', }, ]; - const instance = mountWithIntl(); - instance - .find('[data-test-subj="lnsDatatable_dynamicColoring_groups"]') - .find(EuiButtonGroup) - .prop('onChange')('cell'); + renderTableDimensionEditor(); + userEvent.click(screen.getByRole('button', { name: 'Cell' })); expect(setState).toHaveBeenCalledWith({ ...state, columns: [ @@ -205,13 +194,10 @@ describe('data table dimension editor', () => { it('should open the palette panel when "Settings" link is clicked in the palette input', () => { frame.activeData!.first.columns[0].meta.type = 'number'; state.columns[0].colorMode = 'cell'; - const instance = mountWithIntl(); - act(() => { - instance.find('[data-test-subj="lns_colorEditing_trigger"]').first().simulate('click'); - }); - - expect(instance.find(PalettePanelContainer).exists()).toBe(true); + renderTableDimensionEditor(); + userEvent.click(screen.getByLabelText('Edit colors')); + expect(screen.getByTestId('lns-palettePanelFlyout')).toBeInTheDocument(); }); it('should not show the dynamic coloring option for a bucketed operation', () => { @@ -221,19 +207,15 @@ describe('data table dimension editor', () => { () => ({ isBucketed: true } as OperationDescriptor) ); state.columns[0].colorMode = 'cell'; - const instance = mountWithIntl(); - expect(instance.find('[data-test-subj="lnsDatatable_dynamicColoring_groups"]').exists()).toBe( - false - ); - expect(instance.find('[data-test-subj="lns_dynamicColoring_edit"]').exists()).toBe(false); + renderTableDimensionEditor(); + expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).not.toBeInTheDocument(); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); }); - it('should show the summary field for non numeric columns', () => { - const instance = mountWithIntl(); - expect(instance.find('[data-test-subj="lnsDatatable_summaryrow_function"]').exists()).toBe( - false - ); - expect(instance.find('[data-test-subj="lnsDatatable_summaryrow_label"]').exists()).toBe(false); + it('should not show the summary field for non numeric columns', () => { + renderTableDimensionEditor(); + expect(screen.queryByTestId('lnsDatatable_summaryrow_function')).not.toBeInTheDocument(); + expect(screen.queryByTestId('lnsDatatable_summaryrow_label')).not.toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx index 770e95e54d099..b55f637f3cbb3 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx @@ -6,8 +6,10 @@ */ import React from 'react'; -import { EuiComboBox, EuiFieldText } from '@elastic/eui'; import type { PaletteRegistry } from '@kbn/coloring'; +import { render, screen } from '@testing-library/react'; +import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; +import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { DatasourcePublicAPI, FramePublicAPI, @@ -15,10 +17,7 @@ import { } from '../../../types'; import { DatatableVisualizationState } from '../visualization'; import { createMockDatasource, createMockFramePublicAPI } from '../../../mocks'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; import { TableDimensionEditorAdditionalSection } from './dimension_editor_addtional_section'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { LayerTypes } from '@kbn/expression-xy-plugin/public'; describe('data table dimension editor additional section', () => { let frame: FramePublicAPI; @@ -79,53 +78,25 @@ describe('data table dimension editor additional section', () => { it('should set the summary row function default to "none"', () => { frame.activeData!.first.columns[0].meta.type = 'number'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_summaryrow_function"]') - .find(EuiComboBox) - .prop('selectedOptions') - ).toEqual([{ value: 'none', label: 'None' }]); - - expect(instance.find('[data-test-subj="lnsDatatable_summaryrow_label"]').exists()).toBe(false); + render(); + expect(screen.getByRole('combobox')).toHaveValue('None'); + expect(screen.queryByTestId('lnsDatatable_summaryrow_label')).not.toBeInTheDocument(); }); it('should show the summary row label input ony when summary row is different from "none"', () => { frame.activeData!.first.columns[0].meta.type = 'number'; state.columns[0].summaryRow = 'sum'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_summaryrow_function"]') - .find(EuiComboBox) - .prop('selectedOptions') - ).toEqual([{ value: 'sum', label: 'Sum' }]); - - expect( - instance - .find('[data-test-subj="lnsDatatable_summaryrow_label"]') - .find(EuiFieldText) - .prop('value') - ).toBe('Sum'); + render(); + expect(screen.getByRole('combobox')).toHaveValue('Sum'); + expect(screen.getByTestId('lnsDatatable_summaryrow_label')).toHaveValue('Sum'); }); it("should show the correct summary row name when user's changes summary label", () => { frame.activeData!.first.columns[0].meta.type = 'number'; state.columns[0].summaryRow = 'sum'; state.columns[0].summaryLabel = 'MySum'; - const instance = mountWithIntl(); - expect( - instance - .find('[data-test-subj="lnsDatatable_summaryrow_function"]') - .find(EuiComboBox) - .prop('selectedOptions') - ).toEqual([{ value: 'sum', label: 'Sum' }]); - - expect( - instance - .find('[data-test-subj="lnsDatatable_summaryrow_label"]') - .find(EuiFieldText) - .prop('value') - ).toBe('MySum'); + render(); + expect(screen.getByRole('combobox')).toHaveValue('Sum'); + expect(screen.getByTestId('lnsDatatable_summaryrow_label')).toHaveValue('MySum'); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx index 7e7a18a94ac9c..8f3060c037808 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx @@ -6,22 +6,20 @@ */ import React from 'react'; -import { ReactWrapper, shallow, mount } from 'enzyme'; +import { fireEvent, render, screen, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { I18nProvider } from '@kbn/i18n-react'; +import faker from 'faker'; import { act } from 'react-dom/test-utils'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { EuiDataGrid } from '@elastic/eui'; import { IAggType } from '@kbn/data-plugin/public'; -import { IFieldFormat, SerializedFieldFormat } from '@kbn/field-formats-plugin/common'; -import { VisualizationContainer } from '../../../visualization_container'; -import { EmptyPlaceholder } from '@kbn/charts-plugin/public'; -import { IconChartDatatable } from '@kbn/chart-icons'; +import { IFieldFormat } from '@kbn/field-formats-plugin/common'; import { coreMock } from '@kbn/core/public/mocks'; -import { DataContext, DatatableComponent } from './table_basic'; -import type { DatatableProps } from '../../../../common/expressions'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { Datatable, RenderMode } from '@kbn/expressions-plugin/common'; - +import { Datatable } from '@kbn/expressions-plugin/common'; +import { DatatableComponent } from './table_basic'; +import type { DatatableProps } from '../../../../common/expressions'; import { LENS_EDIT_PAGESIZE_ACTION } from './constants'; +import { DatatableRenderProps } from './types'; const { theme: setUpMockTheme } = coreMock.createSetup(); @@ -86,132 +84,89 @@ function copyData(data: T): T { return JSON.parse(JSON.stringify(data)); } -async function waitForWrapperUpdate(wrapper: ReactWrapper) { - await act(async () => { - await new Promise((r) => setTimeout(r, 0)); - }); - wrapper.update(); -} - describe('DatatableComponent', () => { let onDispatchEvent: jest.Mock; let renderComplete: jest.Mock; + let { data, args } = sampleArgs(); beforeEach(() => { onDispatchEvent = jest.fn(); renderComplete = jest.fn(); + const sample = sampleArgs(); + data = sample.data; + args = sample.args; }); + const renderDatatableComponent = (propsOverrides: Partial = {}) => { + const props = { + data, + args, + formatFactory: () => ({ convert: (x) => x } as IFieldFormat), + dispatchEvent: onDispatchEvent, + getType: jest.fn(() => ({ type: 'buckets' } as IAggType)), + paletteService: chartPluginMock.createPaletteRegistry(), + theme: setUpMockTheme, + renderMode: 'edit' as const, + interactive: true, + renderComplete, + ...propsOverrides, + }; + const rtlRender = render(, { wrapper: I18nProvider }); + return { + ...rtlRender, + rerender: (newProps: Partial) => + rtlRender.rerender(), + }; + }; + test('it renders the title and value', () => { - const { data, args } = sampleArgs(); - - expect( - shallow( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> - ) - ).toMatchSnapshot(); + renderDatatableComponent(); + expect(screen.getByLabelText('My fanci metric chart')).toBeInTheDocument(); + expect(screen.getByRole('row')).toBeInTheDocument(); + expect(screen.queryAllByRole('gridcell').map((cell) => cell.textContent)).toEqual([ + 'shoes- a, column 1, row 1', + '1588024800000- b, column 2, row 1', + '3- c, column 3, row 1', + ]); }); test('it renders actions column when there are row actions', () => { - const { data, args } = sampleArgs(); - - expect( - shallow( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - rowHasRowClickTriggerActions={[true, true, true]} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ) - ).toMatchSnapshot(); + const rowHasRowClickTriggerActions = [true, true, true]; + renderDatatableComponent({ rowHasRowClickTriggerActions }); + expect(screen.getByRole('button', { name: 'Show actions' })).toBeInTheDocument(); + }); + test('it does not render actions column when there are row actions', () => { + const rowHasRowClickTriggerActions = [false, false, false]; + renderDatatableComponent({ rowHasRowClickTriggerActions }); + expect(screen.queryByRole('button', { name: 'Show actions' })).not.toBeInTheDocument(); }); test('it renders custom row height if set to another value than 1', () => { - const { data, args } = sampleArgs(); - - expect( - shallow( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> - ) - ).toMatchSnapshot(); + renderDatatableComponent({ + args: { + ...args, + rowHeightLines: 5, + }, + }); + screen.getAllByRole('gridcell').forEach((cell) => { + expect(cell.firstChild).toHaveClass('euiDataGridRowCell__content--lineCountHeight'); + }); }); test('it should render hide, reset, and sort actions on header even when it is in read only mode', () => { - const { data, args } = sampleArgs(); - - expect( - shallow( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - rowHasRowClickTriggerActions={[false, false, false]} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ) - ).toMatchSnapshot(); + renderDatatableComponent({ renderMode: 'view' }); + userEvent.click(screen.getByRole('button', { name: 'a' })); + const actionPopover = screen.getByRole('dialog'); + const actions = within(actionPopover) + .getAllByRole('button') + .map((button) => button.textContent); + expect(actions).toEqual(['Sort ascending', 'Sort descending', 'Reset width', 'Hide']); }); test('it invokes executeTriggerActions with correct context on click on top value', async () => { - const { args, data } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn(() => ({ type: 'buckets' } as IAggType))} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - columnFilterable={[true, true, true]} - /> - ); - - wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('mouseEnter'); - - await waitForWrapperUpdate(wrapper); - - wrapper.find('[data-test-subj="lensDatatableFilterOut"]').first().simulate('click'); + renderDatatableComponent({ columnFilterable: [true, true, true] }); + userEvent.hover(screen.getAllByTestId('dataGridRowCell')[0]); + userEvent.click(screen.getByTestId('lensDatatableFilterOut')); expect(onDispatchEvent).toHaveBeenCalledWith({ name: 'filter', @@ -230,29 +185,9 @@ describe('DatatableComponent', () => { }); test('it invokes executeTriggerActions with correct context on click on timefield', async () => { - const { args, data } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn(() => ({ type: 'buckets' } as IAggType))} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - columnFilterable={[true, true, true]} - /> - ); - - wrapper.find('[data-test-subj="dataGridRowCell"]').at(1).simulate('mouseEnter'); - - await waitForWrapperUpdate(wrapper); - - wrapper.find('[data-test-subj="lensDatatableFilterFor"]').first().simulate('click'); + renderDatatableComponent({ columnFilterable: [true, true, true] }); + userEvent.hover(screen.getAllByTestId('dataGridRowCell')[1]); + userEvent.click(screen.getByTestId('lensDatatableFilterFor')); expect(onDispatchEvent).toHaveBeenCalledWith({ name: 'filter', @@ -271,7 +206,7 @@ describe('DatatableComponent', () => { }); test('it invokes executeTriggerActions with correct context on click on timefield from range', async () => { - const data: Datatable = { + const dataWithTimestamp: Datatable = { type: 'datatable', columns: [ { @@ -297,38 +232,23 @@ describe('DatatableComponent', () => { rows: [{ a: 1588024800000, b: 3 }], }; - const args: DatatableProps['args'] = { - title: '', - columns: [ - { columnId: 'a', type: 'lens_datatable_column' }, - { columnId: 'b', type: 'lens_datatable_column' }, - ], - sortingColumnId: '', - sortingDirection: 'none', - rowHeightLines: 1, - }; - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn(() => ({ type: 'buckets' } as IAggType))} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - columnFilterable={[true, true, true]} - /> - ); - - wrapper.find('[data-test-subj="dataGridRowCell"]').at(0).simulate('mouseEnter'); - - await waitForWrapperUpdate(wrapper); + renderDatatableComponent({ + data: dataWithTimestamp, + columnFilterable: [true, true, true], + args: { + title: '', + columns: [ + { columnId: 'a', type: 'lens_datatable_column' }, + { columnId: 'b', type: 'lens_datatable_column' }, + ], + sortingColumnId: '', + sortingDirection: 'none', + rowHeightLines: 1, + }, + }); - wrapper.find('[data-test-subj="lensDatatableFilterFor"]').first().simulate('click'); + userEvent.hover(screen.getAllByTestId('dataGridRowCell')[0]); + userEvent.click(screen.getByTestId('lensDatatableFilterFor')); expect(onDispatchEvent).toHaveBeenCalledWith({ name: 'filter', @@ -337,7 +257,7 @@ describe('DatatableComponent', () => { { column: 0, row: 0, - table: data, + table: dataWithTimestamp, value: 1588024800000, }, ], @@ -347,552 +267,282 @@ describe('DatatableComponent', () => { }); test('it should not invoke executeTriggerActions if interactivity is set to false', async () => { - const { args, data } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn(() => ({ type: 'buckets' } as IAggType))} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive={false} - renderComplete={renderComplete} - columnFilterable={[true, true, true]} - /> - ); - - wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('mouseEnter'); - - await waitForWrapperUpdate(wrapper); - - expect(wrapper.find('[data-test-subj="lensDatatableFilterOut"]').exists()).toBe(false); + renderDatatableComponent({ columnFilterable: [true, true, true], interactive: false }); + userEvent.hover(screen.getAllByTestId('dataGridRowCell')[0]); + expect(screen.queryByTestId('lensDatatableFilterOut')).not.toBeInTheDocument(); }); test('it shows emptyPlaceholder for undefined bucketed data', () => { - const { args, data } = sampleArgs(); - const emptyData: Datatable = { - ...data, - rows: [{ a: undefined, b: undefined, c: 0 }], - }; - - const component = shallow( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn((type) => - type === 'count' ? ({ type: 'metrics' } as IAggType) : ({ type: 'buckets' } as IAggType) - )} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - expect(component.find(VisualizationContainer)).toHaveLength(1); - expect(component.find(EmptyPlaceholder).prop('icon')).toEqual(IconChartDatatable); + renderDatatableComponent({ + data: { + ...data, + rows: [{ a: undefined, b: undefined, c: undefined }], + }, + }); + expect(screen.getByTestId('lnsVisualizationContainer')).toHaveTextContent('No results found'); }); test('it renders the table with the given sorting', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - - expect(wrapper.find(EuiDataGrid).prop('sorting')!.columns).toEqual([ - { id: 'b', direction: 'desc' }, - ]); - - wrapper.find(EuiDataGrid).prop('sorting')!.onSort([]); - - expect(onDispatchEvent).toHaveBeenCalledWith({ - name: 'edit', - data: { - action: 'sort', - columnId: undefined, - direction: 'none', + renderDatatableComponent({ + args: { + ...args, + sortingColumnId: 'b', + sortingDirection: 'desc', }, }); - - wrapper - .find(EuiDataGrid) - .prop('sorting')! - .onSort([{ id: 'a', direction: 'asc' }]); + expect(screen.getByTestId('dataGridHeaderCellSortingIcon-b')).toHaveAttribute( + 'data-euiicon-type', + 'sortDown' + ); + userEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-b')); + fireEvent.click(screen.getByRole('button', { name: 'Sort ascending' })); expect(onDispatchEvent).toHaveBeenCalledWith({ name: 'edit', data: { action: 'sort', - columnId: 'a', + columnId: 'b', direction: 'asc', }, }); }); test('it renders the table with the given sorting in readOnly mode', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> + renderDatatableComponent({ + args: { + ...args, + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + expect(screen.getByTestId('dataGridHeaderCellSortingIcon-b')).toHaveAttribute( + 'data-euiicon-type', + 'sortDown' ); - - expect(wrapper.find(EuiDataGrid).prop('sorting')!.columns).toEqual([ - { id: 'b', direction: 'desc' }, - ]); }); test('it does not render a hidden column', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - - expect(wrapper.find(EuiDataGrid).prop('columns')!.length).toEqual(2); + renderDatatableComponent({ + args: { + ...args, + columns: [ + { columnId: 'a', hidden: true, type: 'lens_datatable_column' }, + { columnId: 'b', type: 'lens_datatable_column' }, + { columnId: 'c', type: 'lens_datatable_column' }, + ], + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + expect(screen.queryAllByRole('gridcell').map((cell) => cell.textContent)).toEqual([ + '1588024800000- b, column 1, row 1', + '3- c, column 2, row 1', + ]); }); test('it adds alignment data to context', () => { - const { data, args } = sampleArgs(); - - const wrapper = shallow( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); + renderDatatableComponent({ + args: { + ...args, + columns: [ + { columnId: 'a', alignment: 'center', type: 'lens_datatable_column' }, + { columnId: 'b', type: 'lens_datatable_column' }, + { columnId: 'c', type: 'lens_datatable_column' }, + ], + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + const alignmentsClassNames = screen + .getAllByTestId('lnsTableCellContent') + .map((cell) => cell.className); - expect(wrapper.find(DataContext.Provider).prop('value').alignments).toEqual({ + expect(alignmentsClassNames).toEqual([ // set via args - a: 'center', + 'lnsTableCell--center', // default for date - b: 'left', + 'lnsTableCell--left', // default for number - c: 'right', - }); + 'lnsTableCell--right', + ]); + // ({ convert: (x) => x } as IFieldFormat)} + // dispatchEvent={onDispatchEvent} + // getType={jest.fn()} + // renderMode="view" + // paletteService={chartPluginMock.createPaletteRegistry()} + // theme={setUpMockTheme} + // interactive + // renderComplete={renderComplete} + // /> + // ); + + // expect(wrapper.find(DataContext.Provider).prop('value').alignments).toEqual({ + // // set via args + // a: 'center', + // // default for date + // b: 'left', + // // default for number + // c: 'right', + // }); }); test('it should refresh the table header when the datatable data changes', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="edit" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - // mnake a copy of the data, changing only the name of the first column + const { rerender } = renderDatatableComponent(); const newData = copyData(data); newData.columns[0].name = 'new a'; - wrapper.setProps({ data: newData }); - wrapper.update(); - - // Using .toContain over .toEqual because this element includes text from - // which can't be seen, but shows in the text content - expect(wrapper.find('[data-test-subj="dataGridHeader"]').children().first().text()).toContain( - 'new a' - ); - }); - - test('it does compute minMax for each numeric column', () => { - const { data, args } = sampleArgs(); - - const wrapper = shallow( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - - expect(wrapper.find(DataContext.Provider).prop('value').minMaxByColumnId).toEqual({ - c: { min: 3, max: 3 }, - }); + rerender({ data: newData }); + expect(screen.getAllByTestId('dataGridHeader')[0]).toHaveTextContent('new a'); }); test('it does render a summary footer if at least one column has it configured', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - expect(wrapper.find('[data-test-subj="lnsDataTable-footer-a"]').exists()).toEqual(false); - expect(wrapper.find('[data-test-subj="lnsDataTable-footer-c"]').first().text()).toEqual( - 'Sum: 3' - ); + renderDatatableComponent({ + args: { + ...args, + columns: [ + ...args.columns.slice(0, 2), + { + columnId: 'c', + type: 'lens_datatable_column', + summaryRow: 'sum', + summaryLabel: 'Sum', + summaryRowValue: 3, + }, + ], + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + expect(screen.queryByTestId('lnsDataTable-footer-a')).not.toBeInTheDocument(); + expect(screen.getByTestId('lnsDataTable-footer-c')).toHaveTextContent('Sum: 3'); }); test('it does render a summary footer with just the raw value for empty label', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - - expect(wrapper.find('[data-test-subj="lnsDataTable-footer-c"]').first().text()).toEqual('3'); + renderDatatableComponent({ + args: { + ...args, + columns: [ + ...args.columns.slice(0, 2), + { + columnId: 'c', + type: 'lens_datatable_column', + summaryRow: 'sum', + summaryLabel: '', + summaryRowValue: 3, + }, + ], + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + expect(screen.getByTestId('lnsDataTable-footer-c')).toHaveTextContent('3'); }); test('it does not render the summary row if the only column with summary is hidden', () => { - const { data, args } = sampleArgs(); - - const wrapper = mountWithIntl( - ({ convert: (x) => x } as IFieldFormat)} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - renderMode="view" - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - interactive - renderComplete={renderComplete} - /> - ); - - expect(wrapper.find('[data-test-subj="lnsDataTable-footer-c"]').exists()).toBe(false); + renderDatatableComponent({ + args: { + ...args, + columns: [ + ...args.columns.slice(0, 2), + { + columnId: 'c', + type: 'lens_datatable_column', + summaryRow: 'sum', + summaryLabel: '', + summaryRowValue: 3, + hidden: true, + }, + ], + sortingColumnId: 'b', + sortingDirection: 'desc', + }, + }); + expect(screen.queryByTestId('lnsDataTable-footer-c')).not.toBeInTheDocument(); }); describe('pagination', () => { - it('enables pagination', async () => { - const { data, args } = sampleArgs(); - - data.rows = new Array(10).fill({ a: 'shoes', b: 1588024800000, c: 3 }); - - args.pageSize = 2; - - const wrapper = mount( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> - ); - - const paginationConfig = wrapper.find(EuiDataGrid).prop('pagination'); - expect(paginationConfig).toBeTruthy(); - expect(paginationConfig?.pageIndex).toBe(0); // should start at 0 - expect(paginationConfig?.pageSize).toBe(args.pageSize); - - // trigger new page - const newIndex = 3; - act(() => paginationConfig?.onChangePage(newIndex)); - wrapper.update(); - - const updatedConfig = wrapper.find(EuiDataGrid).prop('pagination'); - expect(updatedConfig).toBeTruthy(); - expect(updatedConfig?.pageIndex).toBe(newIndex); - expect(updatedConfig?.pageSize).toBe(args.pageSize); + it('disables pagination by default', async () => { + renderDatatableComponent(); + expect(screen.queryByTestId('tablePaginationPopoverButton')).not.toBeInTheDocument(); }); - it('resets page position if rows change so page will be empty', async () => { - const { data, args } = sampleArgs(); - - data.rows = new Array(10).fill({ a: 'shoes', b: 1588024800000, c: 3 }); - - args.pageSize = 2; - - const wrapper = mount( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> - ); - const newIndex = 3; - act(() => wrapper.find(EuiDataGrid).prop('pagination')?.onChangePage(newIndex)); - wrapper.update(); - - expect(wrapper.find(EuiDataGrid).prop('pagination')?.pageIndex).toBe(newIndex); - - wrapper.setProps({ - data: { - ...data, - rows: new Array(20).fill({ a: 'shoes', b: 1588024800000, c: 3 }), - }, + it('enables pagination', async () => { + const rowNumbers = 13; + const pageSize = 4; + data.rows = new Array(rowNumbers).fill({ + a: 'shoes', + b: 1588024800000, + c: faker.random.number(), }); - await waitForWrapperUpdate(wrapper); + args.pageSize = pageSize; - // keeps existing page if more data is added - expect(wrapper.find(EuiDataGrid).prop('pagination')?.pageIndex).toBe(newIndex); + const numberOfPages = Math.ceil(rowNumbers / pageSize); - wrapper.setProps({ - data: { - ...data, - rows: new Array(3).fill({ a: 'shoes', b: 1588024800000, c: 3 }), - }, + renderDatatableComponent({ + args, + data, }); - - await waitForWrapperUpdate(wrapper); - // resets to the last page if the current page becomes out of bounds - expect(wrapper.find(EuiDataGrid).prop('pagination')?.pageIndex).toBe(1); - }); - - it('disables pagination by default', async () => { - const { data, args } = sampleArgs(); - - delete args.pageSize; - - const wrapper = mount( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> + expect(screen.queryByTestId('tablePaginationPopoverButton')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: `Page 1 of ${numberOfPages}` })).toHaveAttribute( + 'aria-current', + 'true' ); - - const paginationConfig = wrapper.find(EuiDataGrid).prop('pagination'); - expect(paginationConfig).not.toBeTruthy(); + const newIndex = 3; + userEvent.click(screen.getByRole('link', { name: `Page ${newIndex} of ${numberOfPages}` })); + expect( + screen.getByRole('button', { name: `Page ${newIndex} of ${numberOfPages}` }) + ).toHaveAttribute('aria-current', 'true'); }); - it('dynamically toggles pagination', async () => { - const { data, args } = sampleArgs(); - - const argsWithPagination = copyData(args); - argsWithPagination.pageSize = 20; - const argsWithoutPagination = copyData(args); delete argsWithoutPagination.pageSize; - const defaultProps = { - data, - formatFactory: (x?: SerializedFieldFormat) => x as unknown as IFieldFormat, - dispatchEvent: onDispatchEvent, - getType: jest.fn(), - paletteService: chartPluginMock.createPaletteRegistry(), - theme: setUpMockTheme, - renderMode: 'edit' as RenderMode, - interactive: true, - renderComplete, - }; - - const wrapper = mount( - - ); - wrapper.update(); - - expect(wrapper.find(EuiDataGrid).prop('pagination')).not.toBeTruthy(); - - wrapper.setProps({ args: argsWithPagination }); - wrapper.update(); - - expect(wrapper.find(EuiDataGrid).prop('pagination')).toBeTruthy(); + const rowNumbers = 13; + const pageSize = 4; + data.rows = new Array(rowNumbers).fill({ + a: 'shoes', + b: 1588024800000, + c: faker.random.number(), + }); - wrapper.setProps({ args: argsWithoutPagination }); - wrapper.update(); + args.pageSize = pageSize; - expect(wrapper.find(EuiDataGrid).prop('pagination')).not.toBeTruthy(); + const { rerender } = renderDatatableComponent({ + args, + data, + }); + expect(screen.queryByTestId('tablePaginationPopoverButton')).toBeInTheDocument(); + await act(async () => { + rerender({ args: argsWithoutPagination }); + }); + expect(screen.queryByTestId('tablePaginationPopoverButton')).not.toBeInTheDocument(); }); it('dispatches event when page size changed', async () => { - const { data, args } = sampleArgs(); - - args.pageSize = 10; - - const wrapper = mount( - x as unknown as IFieldFormat} - dispatchEvent={onDispatchEvent} - getType={jest.fn()} - paletteService={chartPluginMock.createPaletteRegistry()} - theme={setUpMockTheme} - renderMode="edit" - interactive - renderComplete={renderComplete} - /> - ); - - const paginationConfig = wrapper.find(EuiDataGrid).prop('pagination'); - expect(paginationConfig).toBeTruthy(); - + args.pageSize = 2; + data.rows = new Array(20).fill({ + a: 'shoes', + b: 1588024800000, + c: faker.random.number(), + }); + renderDatatableComponent({ + args, + }); + userEvent.click(screen.getByTestId('tablePaginationPopoverButton')); const sizeToChangeTo = 100; - paginationConfig?.onChangeItemsPerPage(sizeToChangeTo); + fireEvent.click(screen.getByRole('button', { name: `${sizeToChangeTo} rows` })); expect(onDispatchEvent).toHaveBeenCalledTimes(1); expect(onDispatchEvent).toHaveBeenCalledWith({ @@ -903,5 +553,84 @@ describe('DatatableComponent', () => { }, }); }); + + it('doesnt change page position when changing the data to a bigger set', async () => { + const rowNumbers = 10; + const pageSize = 2; + const numberOfPages = Math.ceil(rowNumbers / pageSize); + data.rows = new Array(rowNumbers).fill({ + a: 'shoes', + b: 1588024800000, + c: faker.random.number(), + }); + + args.pageSize = pageSize; + + const { rerender } = renderDatatableComponent({ + args, + data, + }); + const newIndex = 3; + userEvent.click(screen.getByRole('link', { name: `Page ${newIndex} of ${numberOfPages}` })); + expect( + screen.getByRole('button', { name: `Page ${newIndex} of ${numberOfPages}` }) + ).toHaveAttribute('aria-current', 'true'); + + await act(async () => { + rerender({ + data: { + ...data, + rows: new Array(20).fill({ a: 'shoes', b: 1588024800000, c: 3 }), + }, + }); + }); + const newNumberOfPages = Math.ceil(20 / pageSize); + + // keeps existing page if more data is added + expect( + screen.getByRole('button', { name: `Page ${newIndex} of ${newNumberOfPages}` }) + ).toHaveAttribute('aria-current', 'true'); + }); + + it('resets page position if rows change so page will be empty', async () => { + const rowNumbers = 10; + const pageSize = 2; + const numberOfPages = Math.ceil(rowNumbers / pageSize); + data.rows = new Array(rowNumbers).fill({ + a: 'shoes', + b: 1588024800000, + c: faker.random.number(), + }); + + args.pageSize = pageSize; + + const { rerender } = renderDatatableComponent({ + args, + data, + }); + const newIndex = 3; + userEvent.click(screen.getByRole('link', { name: `Page ${newIndex} of ${numberOfPages}` })); + expect( + screen.getByRole('button', { name: `Page ${newIndex} of ${numberOfPages}` }) + ).toHaveAttribute('aria-current', 'true'); + + await act(async () => { + rerender({ + args: { + ...args, + pageSize: 2, + }, + data: { + ...data, + rows: new Array(4).fill({ a: 'shoes', b: 1588024800000, c: 3 }), + }, + }); + }); + // resets to the last page if the current page becomes out of bounds + expect(screen.getByTestId('euiDataGridBody')).toHaveAttribute( + 'aria-label', + 'My fanci metric chart; Page 2 of 2.' + ); + }); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx index 89518457cb83e..07c095ecc87ab 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx @@ -32,6 +32,7 @@ import { ClickTriggerEvent } from '@kbn/charts-plugin/public'; import { IconChartDatatable } from '@kbn/chart-icons'; import type { LensTableRowContextMenuEvent } from '../../../types'; import type { FormatFactory } from '../../../../common/types'; +import { RowHeightMode } from '../../../../common/types'; import type { LensGridDirection } from '../../../../common/expressions'; import { VisualizationContainer } from '../../../visualization_container'; import { findMinMaxByColumnId } from '../../../shared_components'; @@ -55,6 +56,7 @@ import { } from './table_actions'; import { getFinalSummaryConfiguration } from '../../../../common/expressions/datatable/summary'; import { getOriginalId } from '../../../../common/expressions/datatable/transpose_helpers'; +import { DEFAULT_HEADER_ROW_HEIGHT, DEFAULT_HEADER_ROW_HEIGHT_LINES } from './constants'; export const DataContext = React.createContext({}); @@ -294,8 +296,8 @@ export const DatatableComponent = (props: DatatableRenderProps) => { ); }, [props.data, isNumericMap, columnConfig]); - const headerRowHeight = props.args.headerRowHeight ?? 'single'; - const headerRowLines = props.args.headerRowHeightLines ?? 1; + const headerRowHeight = props.args.headerRowHeight ?? DEFAULT_HEADER_ROW_HEIGHT; + const headerRowLines = props.args.headerRowHeightLines ?? DEFAULT_HEADER_ROW_HEIGHT_LINES; const columns: EuiDataGridColumn[] = useMemo( () => @@ -478,7 +480,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { data-test-subj="lnsDataTable" rowHeightsOptions={{ defaultHeight: props.args.fitRowToContent - ? 'auto' + ? RowHeightMode.auto : props.args.rowHeightLines && props.args.rowHeightLines !== 1 ? { lineCount: props.args.rowHeightLines, diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.test.tsx index 484fff9e6d1bd..f2dbad4dd5664 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.test.tsx @@ -38,14 +38,11 @@ describe('datatable toolbar', () => { defaultProps = { setState: jest.fn(), frame: {} as FramePublicAPI, - state: { - rowHeight: 'single', - headerRowHeight: 'single', - } as DatatableVisualizationState, + state: {} as DatatableVisualizationState, }; }); - const renderToolbar = (overrides = {}) => { + const renderAndOpenToolbar = (overrides = {}) => { const ROW_HEIGHT_SETTINGS_TEST_ID = 'lnsRowHeightSettings'; const HEADER_HEIGHT_SETTINGS_TEST_ID = 'lnsHeaderHeightSettings'; @@ -54,6 +51,7 @@ describe('datatable toolbar', () => { const togglePopover = () => { userEvent.click(screen.getByRole('button', { name: /visual options/i })); }; + togglePopover(); const selectOptionFromButtonGroup = (testId: string) => (optionName: string | RegExp) => { const buttonGroup = screen.getByTestId(testId); @@ -84,46 +82,46 @@ describe('datatable toolbar', () => { }; it('should reflect default state in the UI', async () => { - const { togglePopover, getRowHeightValue, getHeaderHeightValue, getPaginationSwitch } = - renderToolbar(); - togglePopover(); + const { + getHeaderHeightCustomValue, + getRowHeightValue, + getHeaderHeightValue, + getPaginationSwitch, + } = renderAndOpenToolbar(); expect(getRowHeightValue()).toHaveTextContent(/single/i); - expect(getHeaderHeightValue()).toHaveTextContent(/single/i); + expect(getHeaderHeightValue()).toHaveTextContent(/custom/i); + expect(getHeaderHeightCustomValue()).toHaveValue(3); expect(getPaginationSwitch()).not.toBeChecked(); }); it('should reflect passed state in the UI', async () => { const { - togglePopover, getRowHeightValue, getHeaderHeightValue, getPaginationSwitch, getHeaderHeightCustomValue, getRowHeightCustomValue, - } = renderToolbar({ + } = renderAndOpenToolbar({ state: { ...defaultProps.state, rowHeight: 'custom', rowHeightLines: 2, headerRowHeight: 'custom', - headerRowHeightLines: 3, + headerRowHeightLines: 4, paging: { size: 10, enabled: true }, }, }); - togglePopover(); - expect(getRowHeightValue()).toHaveTextContent(/custom/i); expect(getRowHeightCustomValue()).toHaveValue(2); expect(getHeaderHeightValue()).toHaveTextContent(/custom/i); - expect(getHeaderHeightCustomValue()).toHaveValue(3); + expect(getHeaderHeightCustomValue()).toHaveValue(4); expect(getPaginationSwitch()).toBeChecked(); }); it('should change row height to "Auto" mode when selected', async () => { - const { togglePopover, selectRowHeightOption } = renderToolbar(); - togglePopover(); + const { selectRowHeightOption } = renderAndOpenToolbar(); selectRowHeightOption(/auto fit/i); expect(defaultProps.setState).toHaveBeenCalledTimes(1); @@ -133,8 +131,7 @@ describe('datatable toolbar', () => { }); it('should toggle pagination on click', async () => { - const { togglePopover, clickPaginationSwitch } = renderToolbar(); - togglePopover(); + const { clickPaginationSwitch } = renderAndOpenToolbar(); clickPaginationSwitch(); expect(defaultProps.setState).toHaveBeenCalledTimes(1); @@ -144,59 +141,52 @@ describe('datatable toolbar', () => { }); it('should change row height to "Custom" mode when selected', async () => { - const { togglePopover, selectRowHeightOption } = renderToolbar(); - togglePopover(); + const { selectRowHeightOption } = renderAndOpenToolbar(); selectRowHeightOption(/custom/i); expect(defaultProps.setState).toHaveBeenCalledTimes(1); expect(defaultProps.setState).toHaveBeenCalledWith({ rowHeight: 'custom', - headerRowHeight: 'single', rowHeightLines: 2, }); }); it('should change header height to "Custom" mode', async () => { - const { togglePopover, selectHeaderHeightOption } = renderToolbar(); - togglePopover(); + const { selectHeaderHeightOption } = renderAndOpenToolbar({ + headerRowHeight: 'single', + }); selectHeaderHeightOption(/custom/i); expect(defaultProps.setState).toHaveBeenCalledTimes(1); expect(defaultProps.setState).toHaveBeenCalledWith({ - rowHeight: 'single', headerRowHeight: 'custom', - headerRowHeightLines: 2, + headerRowHeightLines: 3, }); }); it('should toggle on table pagination', async () => { - const { togglePopover, clickPaginationSwitch } = renderToolbar(); - togglePopover(); + const { clickPaginationSwitch } = renderAndOpenToolbar(); clickPaginationSwitch(); expect(defaultProps.setState).toHaveBeenCalledTimes(1); expect(defaultProps.setState).toHaveBeenCalledWith( expect.objectContaining({ paging: defaultPagingState, - rowHeight: 'single', - headerRowHeight: 'single', }) ); }); it('should toggle off table pagination', async () => { - const { togglePopover, clickPaginationSwitch } = renderToolbar({ + const { clickPaginationSwitch } = renderAndOpenToolbar({ state: { ...defaultProps.state, paging: defaultPagingState, }, }); - togglePopover(); + clickPaginationSwitch(); expect(defaultProps.setState).toHaveBeenCalledTimes(1); expect(defaultProps.setState).toHaveBeenCalledWith({ - rowHeight: 'single', - headerRowHeight: 'single', paging: { ...defaultPagingState, enabled: false }, }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.tsx index 19e60e28cd566..b27dc0305c684 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/toolbar.tsx @@ -12,14 +12,29 @@ import { RowHeightSettings } from '@kbn/unified-data-table'; import { ToolbarPopover } from '../../../shared_components'; import type { VisualizationToolbarProps } from '../../../types'; import type { DatatableVisualizationState } from '../visualization'; +import { RowHeightMode } from '../../../../common/types'; import { DEFAULT_PAGE_SIZE } from './table_basic'; +import { + DEFAULT_HEADER_ROW_HEIGHT, + DEFAULT_HEADER_ROW_HEIGHT_LINES, + DEFAULT_ROW_HEIGHT_LINES, +} from './constants'; export function DataTableToolbar(props: VisualizationToolbarProps) { const { state, setState } = props; const onChangeHeight = useCallback( - (newHeightMode, heightProperty, heightLinesProperty) => { + ( + newHeightMode, + heightProperty, + heightLinesProperty, + defaultRowHeight = DEFAULT_ROW_HEIGHT_LINES + ) => { const rowHeightLines = - newHeightMode === 'single' ? 1 : newHeightMode !== 'auto' ? 2 : undefined; + newHeightMode === RowHeightMode.single + ? 1 + : newHeightMode !== RowHeightMode.auto + ? defaultRowHeight + : undefined; setState({ ...state, [heightProperty]: newHeightMode, @@ -59,13 +74,18 @@ export function DataTableToolbar(props: VisualizationToolbarProps - onChangeHeight(mode, 'headerRowHeight', 'headerRowHeightLines') + onChangeHeight( + mode, + 'headerRowHeight', + 'headerRowHeightLines', + DEFAULT_HEADER_ROW_HEIGHT_LINES + ) } onChangeRowHeightLines={(lines) => { onChangeHeightLines(lines, 'headerRowHeightLines'); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx index 963e471e912f7..877fed8a4016e 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx @@ -23,6 +23,7 @@ import { VisualizationDimensionGroupConfig, VisualizationConfigProps, } from '../../types'; +import { RowHeightMode } from '../../../common/types'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { themeServiceMock } from '@kbn/core/public/mocks'; @@ -746,18 +747,24 @@ describe('Datatable Visualization', () => { ).toEqual([false]); expect( - getDatatableExpressionArgs({ ...defaultExpressionTableState, rowHeight: 'single' }) - .fitRowToContent + getDatatableExpressionArgs({ + ...defaultExpressionTableState, + rowHeight: RowHeightMode.single, + }).fitRowToContent ).toEqual([false]); expect( - getDatatableExpressionArgs({ ...defaultExpressionTableState, rowHeight: 'custom' }) - .fitRowToContent + getDatatableExpressionArgs({ + ...defaultExpressionTableState, + rowHeight: RowHeightMode.custom, + }).fitRowToContent ).toEqual([false]); expect( - getDatatableExpressionArgs({ ...defaultExpressionTableState, rowHeight: 'auto' }) - .fitRowToContent + getDatatableExpressionArgs({ + ...defaultExpressionTableState, + rowHeight: RowHeightMode.auto, + }).fitRowToContent ).toEqual([true]); }); @@ -767,15 +774,17 @@ describe('Datatable Visualization', () => { ); expect( - getDatatableExpressionArgs({ ...defaultExpressionTableState, rowHeight: 'single' }) - .rowHeightLines + getDatatableExpressionArgs({ + ...defaultExpressionTableState, + rowHeight: RowHeightMode.single, + }).rowHeightLines ).toEqual([1]); // should ignore lines value based on mode expect( getDatatableExpressionArgs({ ...defaultExpressionTableState, - rowHeight: 'single', + rowHeight: RowHeightMode.single, rowHeightLines: 5, }).rowHeightLines ).toEqual([1]); @@ -783,7 +792,7 @@ describe('Datatable Visualization', () => { expect( getDatatableExpressionArgs({ ...defaultExpressionTableState, - rowHeight: 'custom', + rowHeight: RowHeightMode.custom, rowHeightLines: 5, }).rowHeightLines ).toEqual([5]); @@ -792,41 +801,44 @@ describe('Datatable Visualization', () => { expect( getDatatableExpressionArgs({ ...defaultExpressionTableState, - rowHeight: 'custom', + rowHeight: RowHeightMode.custom, }).rowHeightLines ).toEqual([2]); }); it('sets headerRowHeight && headerRowHeightLines correctly', () => { + // should fallback to 3 lines in case it's not set expect( getDatatableExpressionArgs({ ...defaultExpressionTableState }).headerRowHeightLines - ).toEqual([1]); + ).toEqual([3]); - // should fallback to single in case it's not set + // should fallback to custom in case it's not set expect( getDatatableExpressionArgs({ ...defaultExpressionTableState }).headerRowHeight - ).toEqual(['single']); + ).toEqual([RowHeightMode.custom]); expect( - getDatatableExpressionArgs({ ...defaultExpressionTableState, headerRowHeight: 'single' }) - .headerRowHeightLines + getDatatableExpressionArgs({ + ...defaultExpressionTableState, + headerRowHeight: RowHeightMode.single, + }).headerRowHeightLines ).toEqual([1]); expect( getDatatableExpressionArgs({ ...defaultExpressionTableState, - headerRowHeight: 'custom', + headerRowHeight: RowHeightMode.custom, headerRowHeightLines: 5, }).headerRowHeightLines ).toEqual([5]); - // should fallback to 2 for custom in case it's not set + // should fallback to 3 for custom in case it's not set expect( getDatatableExpressionArgs({ ...defaultExpressionTableState, - headerRowHeight: 'custom', + headerRowHeight: RowHeightMode.custom, }).headerRowHeightLines - ).toEqual([2]); + ).toEqual([3]); }); it('sets alignment correctly', () => { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx index 05e05279567e5..534ece1785af4 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx @@ -26,6 +26,7 @@ import type { import { TableDimensionDataExtraEditor, TableDimensionEditor } from './components/dimension_editor'; import { TableDimensionEditorAdditionalSection } from './components/dimension_editor_addtional_section'; import type { LayerType } from '../../../common/types'; +import { RowHeightMode } from '../../../common/types'; import { getDefaultSummaryLabel } from '../../../common/expressions/datatable/summary'; import type { ColumnState, @@ -36,14 +37,18 @@ import type { DatatableExpressionFunction, } from '../../../common/expressions'; import { DataTableToolbar } from './components/toolbar'; - +import { + DEFAULT_HEADER_ROW_HEIGHT, + DEFAULT_HEADER_ROW_HEIGHT_LINES, + DEFAULT_ROW_HEIGHT, +} from './components/constants'; export interface DatatableVisualizationState { columns: ColumnState[]; layerId: string; layerType: LayerType; sorting?: SortingState; - rowHeight?: 'auto' | 'single' | 'custom'; - headerRowHeight?: 'auto' | 'single' | 'custom'; + rowHeight?: RowHeightMode; + headerRowHeight?: RowHeightMode; rowHeightLines?: number; headerRowHeightLines?: number; paging?: PagingState; @@ -471,7 +476,7 @@ export const getDatatableVisualization = ({ // rewrite colors and stops as two distinct arguments colors: (column.palette?.params?.stops || []).map(({ color }) => color), stops: - column.palette?.params?.name === 'custom' + column.palette?.params?.name === RowHeightMode.custom ? (column.palette?.params?.stops || []).map(({ stop }) => stop) : [], reverse: false, // managed at UI level @@ -515,14 +520,14 @@ export const getDatatableVisualization = ({ }), sortingColumnId: state.sorting?.columnId || '', sortingDirection: state.sorting?.direction || 'none', - fitRowToContent: state.rowHeight === 'auto', - headerRowHeight: state.headerRowHeight ?? 'single', + fitRowToContent: state.rowHeight === RowHeightMode.auto, + headerRowHeight: state.headerRowHeight ?? DEFAULT_HEADER_ROW_HEIGHT, rowHeightLines: - !state.rowHeight || state.rowHeight === 'single' ? 1 : state.rowHeightLines ?? 2, + !state.rowHeight || state.rowHeight === DEFAULT_ROW_HEIGHT ? 1 : state.rowHeightLines ?? 2, headerRowHeightLines: - !state.headerRowHeight || state.headerRowHeight === 'single' + state.headerRowHeight === RowHeightMode.single ? 1 - : state.headerRowHeightLines ?? 2, + : state.headerRowHeightLines ?? DEFAULT_HEADER_ROW_HEIGHT_LINES, pageSize: state.paging?.enabled ? state.paging.size : undefined, }).toAst(); 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 8a4a14dd6f6e7..9135fc525e3a6 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx @@ -2786,6 +2786,48 @@ describe('xy_visualization', () => { }, ]); }); + it('should return an error with batched messages for the same error with the correct index for multiple layers', () => { + expect( + getErrorMessages(xyVisualization, { + ...exampleState(), + layers: [ + { + layerId: 'referenceLine', + layerType: layerTypes.REFERENCELINE, + accessors: [], + }, + { + layerId: 'first', + layerType: layerTypes.DATA, + seriesType: 'area', + xAccessor: 'a', + accessors: ['a'], + }, + { + layerId: 'second', + layerType: layerTypes.DATA, + seriesType: 'area', + xAccessor: undefined, + accessors: [], + splitAccessor: 'a', + }, + { + layerId: 'third', + layerType: layerTypes.DATA, + seriesType: 'area', + xAccessor: undefined, + accessors: [], + splitAccessor: 'a', + }, + ], + }) + ).toEqual([ + { + shortMessage: 'Missing Vertical axis.', + longMessage: 'Layers 3, 4 require a field for the Vertical axis.', + }, + ]); + }); it("should return an error when some layers are complete but other layers aren't", () => { expect( getErrorMessages(xyVisualization, { diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx index 1d678ef902991..5f64bb3f7de68 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx @@ -825,7 +825,6 @@ export const getXyVisualization = ({ const hasNoAccessors = ({ accessors }: XYDataLayerConfig) => accessors == null || accessors.length === 0; - const dataLayers = getDataLayers(state.layers); const hasNoSplitAccessor = ({ splitAccessor, seriesType }: XYDataLayerConfig) => seriesType.includes('percentage') && splitAccessor == null; @@ -837,13 +836,8 @@ export const getXyVisualization = ({ ['Break down', hasNoSplitAccessor], ]; - // filter out those layers with no accessors at all - const filteredLayers = dataLayers.filter( - ({ accessors, xAccessor, splitAccessor, layerType }) => - accessors.length > 0 || xAccessor != null || splitAccessor != null - ); for (const [dimension, criteria] of checks) { - const result = validateLayersForDimension(dimension, filteredLayers, criteria); + const result = validateLayersForDimension(dimension, state.layers, criteria); if (!result.valid) { errors.push({ severity: 'error', diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx index 5236f814b04c2..793b0bb16be84 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx @@ -395,7 +395,7 @@ export function getLayersByType(state: State, byType?: string) { export function validateLayersForDimension( dimension: string, - layers: XYDataLayerConfig[], + allLayers: XYLayerConfig[], missingCriteria: (layer: XYDataLayerConfig) => boolean ): | { valid: true } @@ -403,23 +403,45 @@ export function validateLayersForDimension( valid: false; payload: { shortMessage: string; longMessage: React.ReactNode }; } { + const dataLayers = allLayers + .map((layer, i) => ({ layer, originalIndex: i })) + .filter(({ layer }) => isDataLayer(layer)) as Array<{ + layer: XYDataLayerConfig; + originalIndex: number; + }>; + + // filter out those layers with no accessors at all + const filteredLayers = dataLayers.filter( + ({ layer: { accessors, xAccessor, splitAccessor } }) => + accessors.length > 0 || xAccessor != null || splitAccessor != null + ); // Multiple layers must be consistent: // * either a dimension is missing in ALL of them // * or should not miss on any - if (layers.every(missingCriteria) || !layers.some(missingCriteria)) { + if ( + filteredLayers.every(({ layer }) => missingCriteria(layer)) || + !filteredLayers.some(({ layer }) => missingCriteria(layer)) + ) { return { valid: true }; } // otherwise it's an error and it has to be reported - const layerMissingAccessors = layers.reduce((missing: number[], layer, i) => { - if (missingCriteria(layer)) { - missing.push(i); - } - return missing; - }, []); + const layerMissingAccessors = filteredLayers.reduce( + (missing: number[], { layer, originalIndex }) => { + if (missingCriteria(layer)) { + missing.push(originalIndex); + } + return missing; + }, + [] + ); return { valid: false, - payload: getMessageIdsForDimension(dimension, layerMissingAccessors, isHorizontalChart(layers)), + payload: getMessageIdsForDimension( + dimension, + layerMissingAccessors, + isHorizontalChart(dataLayers.map(({ layer }) => layer)) + ), }; } diff --git a/x-pack/plugins/lens/server/migrations/common_migrations.ts b/x-pack/plugins/lens/server/migrations/common_migrations.ts index f6a683afc2297..0018f892b8b8e 100644 --- a/x-pack/plugins/lens/server/migrations/common_migrations.ts +++ b/x-pack/plugins/lens/server/migrations/common_migrations.ts @@ -37,7 +37,7 @@ import { LensDocShape860, } from './types'; import { DOCUMENT_FIELD_NAME } from '../../common/constants'; -import type { LegacyMetricState } from '../../common/types'; +import { RowHeightMode, type LegacyMetricState } from '../../common/types'; import { isPartitionShape } from '../../common/visualizations'; import { LensDocShape } from './saved_object_migrations'; @@ -228,7 +228,7 @@ export const commonEnhanceTableRowHeight = ( const visState810 = attributes.state.visualization as VisState810; const newAttributes = cloneDeep(attributes); const vizState = newAttributes.state.visualization as VisState820; - vizState.rowHeight = visState810.fitRowToContent ? 'auto' : 'single'; + vizState.rowHeight = visState810.fitRowToContent ? RowHeightMode.auto : RowHeightMode.single; vizState.rowHeightLines = visState810.fitRowToContent ? 2 : 1; return newAttributes as LensDocShape810; }; diff --git a/x-pack/plugins/lens/server/migrations/types.ts b/x-pack/plugins/lens/server/migrations/types.ts index 73e0fb0f51759..553abdf78f11d 100644 --- a/x-pack/plugins/lens/server/migrations/types.ts +++ b/x-pack/plugins/lens/server/migrations/types.ts @@ -8,7 +8,12 @@ import type { PaletteOutput, CustomPaletteParams } from '@kbn/coloring'; import type { Query, Filter } from '@kbn/es-query'; import type { MigrateFunctionsObject } from '@kbn/kibana-utils-plugin/common'; -import type { LayerType, PersistableFilter, ValueLabelConfig } from '../../common/types'; +import type { + LayerType, + PersistableFilter, + RowHeightMode, + ValueLabelConfig, +} from '../../common/types'; export type CustomVisualizationMigrations = Record MigrateFunctionsObject>; @@ -253,7 +258,7 @@ export interface VisState810 { // Datatable only export interface VisState820 { - rowHeight: 'auto' | 'single' | 'custom'; + rowHeight: RowHeightMode; rowHeightLines: number; } diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index f0b7038d05ab7..99806418a2605 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -111,7 +111,8 @@ "@kbn/presentation-publishing", "@kbn/saved-objects-finder-plugin", "@kbn/unified-data-table", - "@kbn/shared-ux-markdown" + "@kbn/shared-ux-markdown", + "@kbn/licensing-plugin", ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/license_management/public/application/app_context.tsx b/x-pack/plugins/license_management/public/application/app_context.tsx index 3be069bc818e7..fc2ffd8836b4d 100644 --- a/x-pack/plugins/license_management/public/application/app_context.tsx +++ b/x-pack/plugins/license_management/public/application/app_context.tsx @@ -6,9 +6,8 @@ */ import React, { createContext, useContext } from 'react'; -import { Observable } from 'rxjs'; -import { CoreStart, ScopedHistory, CoreTheme } from '@kbn/core/public'; +import { CoreStart, ScopedHistory } from '@kbn/core/public'; import { LicensingPluginSetup, ILicense } from '@kbn/licensing-plugin/public'; import { TelemetryPluginStart } from '@kbn/telemetry-plugin/public'; import { ClientConfigType } from '../types'; @@ -33,7 +32,6 @@ export interface AppDependencies { initialLicense: ILicense; }; config: ClientConfigType; - theme$: Observable; } export const AppContextProvider = ({ diff --git a/x-pack/plugins/license_management/public/application/app_providers.tsx b/x-pack/plugins/license_management/public/application/app_providers.tsx index 704dd962c4f29..1c35a4f3ccda5 100644 --- a/x-pack/plugins/license_management/public/application/app_providers.tsx +++ b/x-pack/plugins/license_management/public/application/app_providers.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { Provider } from 'react-redux'; -import { KibanaThemeProvider } from '../shared_imports'; +import { KibanaRenderContextProvider } from '../shared_imports'; import { AppContextProvider, AppDependencies } from './app_context'; // @ts-ignore import { licenseManagementStore } from './store'; @@ -24,13 +24,11 @@ export const AppProviders = ({ appDependencies, children }: Props) => { plugins, services, store: { initialLicense }, - theme$, } = appDependencies; const { http, notifications: { toasts }, - i18n: { Context: I18nContext }, } = core; // Setup Redux store @@ -47,12 +45,10 @@ export const AppProviders = ({ appDependencies, children }: Props) => { const store = licenseManagementStore(initialState, thunkServices); return ( - - - - {children} - - - + + + {children} + + ); }; diff --git a/x-pack/plugins/license_management/public/plugin.ts b/x-pack/plugins/license_management/public/plugin.ts index 09dc79c55a5c1..ed0e6d0d2f448 100644 --- a/x-pack/plugins/license_management/public/plugin.ts +++ b/x-pack/plugins/license_management/public/plugin.ts @@ -69,7 +69,7 @@ export class LicenseManagementUIPlugin id: PLUGIN.id, title: PLUGIN.title, order: 0, - mount: async ({ element, setBreadcrumbs, history, theme$ }) => { + mount: async ({ element, setBreadcrumbs, history }) => { const [coreStart, { telemetry }] = await getStartServices(); const initialLicense = await firstValueFrom(plugins.licensing.license$); @@ -102,7 +102,6 @@ export class LicenseManagementUIPlugin initialLicense, }, docLinks: appDocLinks, - theme$, }; const { renderApp } = await import('./application'); diff --git a/x-pack/plugins/license_management/public/shared_imports.ts b/x-pack/plugins/license_management/public/shared_imports.ts index 5651102fbcfc5..7641a64feb458 100644 --- a/x-pack/plugins/license_management/public/shared_imports.ts +++ b/x-pack/plugins/license_management/public/shared_imports.ts @@ -7,4 +7,6 @@ export { SectionLoading } from '@kbn/es-ui-shared-plugin/public'; -export { KibanaThemeProvider, useExecutionContext } from '@kbn/kibana-react-plugin/public'; +export { useExecutionContext } from '@kbn/kibana-react-plugin/public'; + +export { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; diff --git a/x-pack/plugins/license_management/tsconfig.json b/x-pack/plugins/license_management/tsconfig.json index 479f60cb75470..eaa0cee9f90c7 100644 --- a/x-pack/plugins/license_management/tsconfig.json +++ b/x-pack/plugins/license_management/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/shared-ux-router", "@kbn/utility-types", "@kbn/share-plugin", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/lists/public/exceptions/components/builder/entry_renderer.tsx b/x-pack/plugins/lists/public/exceptions/components/builder/entry_renderer.tsx index 1f7f8380555a0..52075f49cb241 100644 --- a/x-pack/plugins/lists/public/exceptions/components/builder/entry_renderer.tsx +++ b/x-pack/plugins/lists/public/exceptions/components/builder/entry_renderer.tsx @@ -15,6 +15,7 @@ import { EuiIcon, EuiIconTip, EuiSpacer, + EuiText, useEuiPaddingSize, } from '@elastic/eui'; import styled from 'styled-components'; @@ -374,8 +375,21 @@ export const BuilderEntryItem: React.FC = ({ } }; + // show warning when a wildcard is detected with the IS operator + const getWildcardWithIsOperatorWarning = (): React.ReactNode => { + return ( + + {' '} + + + ); + }; + // show this when wildcard with matches operator - const getEventFilterWildcardWarningInfo = (precedingWarning: string): React.ReactNode => { + const getWildcardPerformanceWarningInfo = (precedingWarning: string): React.ReactNode => { return (

{precedingWarning}{' '} @@ -404,6 +418,9 @@ export const BuilderEntryItem: React.FC = ({ switch (type) { case OperatorTypeEnum.MATCH: const value = typeof entry.value === 'string' ? entry.value : undefined; + const fieldMatchWarning = /[*?]/.test(value ?? '') + ? getWildcardWithIsOperatorWarning() + : ''; return ( = ({ isClearable={false} indexPattern={indexPattern} onError={handleError} + onWarning={handleWarning} + warning={fieldMatchWarning} onChange={handleFieldMatchValueChange} isRequired data-test-subj="exceptionBuilderEntryFieldMatch" @@ -460,9 +479,7 @@ export const BuilderEntryItem: React.FC = ({ value: wildcardValue, }); actualWarning = - warning === WILDCARD_WARNING && listType === 'endpoint_events' - ? getEventFilterWildcardWarningInfo(warning) - : warning; + warning === WILDCARD_WARNING ? getWildcardPerformanceWarningInfo(warning) : warning; } return ( diff --git a/x-pack/plugins/lists/public/exceptions/components/builder/translations.ts b/x-pack/plugins/lists/public/exceptions/components/builder/translations.ts index 33d8dc71cc252..0ef118f8eabe2 100644 --- a/x-pack/plugins/lists/public/exceptions/components/builder/translations.ts +++ b/x-pack/plugins/lists/public/exceptions/components/builder/translations.ts @@ -107,3 +107,11 @@ export const CONFLICT_MULTIPLE_INDEX_DESCRIPTION = (name: string, count: number) defaultMessage: '{name} ({count} indices)', values: { count, name }, }); + +export const WILDCARD_WITH_IS_OPERATOR_TOOLTIP = i18n.translate( + 'xpack.lists.exceptions.builder.exceptionIsOperator.warningmessage.tooltip', + { + defaultMessage: + 'Using a wildcard with the "IS" operator can make an entry ineffective. Change the operator to "MATCHES" to ensure wildcards run properly.', + } +); diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/register_alerts_table_configuration.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/register_alerts_table_configuration.tsx index 6c01c056bad99..25ffef0456e42 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/register_alerts_table_configuration.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/register_alerts_table_configuration.tsx @@ -129,7 +129,7 @@ export function registerAlertsTableConfiguration( }, columns, useInternalFlyout: getAlertFlyout(columns, getAlertFormatters(fieldFormats)), - getRenderCellValue: getRenderCellValue(fieldFormats), + getRenderCellValue, sort, useActionsColumn: () => ({ renderCustomActionsRow: (props: RenderCustomActionsRowArgs) => { diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/render_cell_value.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/render_cell_value.tsx index bfc86e390c0e9..afba911e5ddea 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/render_cell_value.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/render_cell_value.tsx @@ -6,10 +6,10 @@ */ import { isEmpty } from 'lodash'; -import React, { type ReactNode } from 'react'; +import React from 'react'; +import type { RenderCellValue } from '@elastic/eui'; import { isDefined } from '@kbn/ml-is-defined'; import { ALERT_DURATION, ALERT_END, ALERT_START } from '@kbn/rule-data-utils'; -import type { GetRenderCellValue } from '@kbn/triggers-actions-ui-plugin/public'; import type { FieldFormatsRegistry } from '@kbn/field-formats-plugin/common'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import { getFormattedSeverityScore, getSeverityColor } from '@kbn/ml-anomaly-utils'; @@ -21,11 +21,6 @@ import { } from '../../../common/constants/alerts'; import { getFieldFormatterProvider } from '../../application/contexts/kibana/use_field_formatter'; -interface Props { - columnId: string; - data: any; -} - export const getMappedNonEcsValue = ({ data, fieldName, @@ -54,22 +49,17 @@ const getRenderValue = (mappedNonEcsValue: any) => { return '—'; }; -export const getRenderCellValue = (fieldFormats: FieldFormatsRegistry): GetRenderCellValue => { +export const getRenderCellValue: RenderCellValue = ({ columnId, data, fieldFormats }) => { const alertValueFormatter = getAlertFormatters(fieldFormats); + if (!isDefined(data)) return; - return ({ setFlyoutAlert }) => - (props): ReactNode => { - const { columnId, data } = props as Props; - if (!isDefined(data)) return; + const mappedNonEcsValue = getMappedNonEcsValue({ + data, + fieldName: columnId, + }); + const value = getRenderValue(mappedNonEcsValue); - const mappedNonEcsValue = getMappedNonEcsValue({ - data, - fieldName: columnId, - }); - const value = getRenderValue(mappedNonEcsValue); - - return alertValueFormatter(columnId, value); - }; + return alertValueFormatter(columnId, value); }; export function getAlertFormatters(fieldFormats: FieldFormatsRegistry) { diff --git a/x-pack/plugins/ml/public/application/aiops/log_categorization.tsx b/x-pack/plugins/ml/public/application/aiops/log_categorization.tsx index d3dfb0af1bf43..1ca0fc8ec2ef4 100644 --- a/x-pack/plugins/ml/public/application/aiops/log_categorization.tsx +++ b/x-pack/plugins/ml/public/application/aiops/log_categorization.tsx @@ -15,7 +15,6 @@ import { useDataSource } from '../contexts/ml/data_source_context'; import { useMlKibana } from '../contexts/kibana'; import { useEnabledFeatures } from '../contexts/ml'; import { HelpMenu } from '../components/help_menu'; -import { TechnicalPreviewBadge } from '../components/technical_preview_badge'; import { MlPageHeader } from '../components/page_header'; export const LogCategorizationPage: FC = () => { @@ -34,9 +33,6 @@ export const LogCategorizationPage: FC = () => { defaultMessage="Log pattern analysis" /> - - - {dataView && ( diff --git a/x-pack/plugins/ml/public/application/components/create_data_view_button/create_data_view_button.tsx b/x-pack/plugins/ml/public/application/components/create_data_view_button/create_data_view_button.tsx index 069b5589eb058..02c56fb4008e5 100644 --- a/x-pack/plugins/ml/public/application/components/create_data_view_button/create_data_view_button.tsx +++ b/x-pack/plugins/ml/public/application/components/create_data_view_button/create_data_view_button.tsx @@ -8,13 +8,14 @@ import { EuiButton } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useCallback, useEffect, useRef } from 'react'; +import { type DataView } from '@kbn/data-plugin/common'; import { useMlKibana } from '../../contexts/kibana'; export const CreateDataViewButton = ({ onDataViewCreated, allowAdHocDataView = false, }: { - onDataViewCreated: (id: string, type: string, name?: string) => void; + onDataViewCreated: (dataView: DataView) => void; allowAdHocDataView?: boolean; }) => { const { dataViewEditor } = useMlKibana().services; @@ -25,10 +26,9 @@ export const CreateDataViewButton = ({ closeDataViewEditorRef.current = dataViewEditor?.openEditor({ onSave: async (dataView) => { if (dataView.id && onDataViewCreated) { - onDataViewCreated(dataView.id, 'index-pattern', dataView.name); + onDataViewCreated(dataView); } }, - allowAdHocDataView, }); }, [onDataViewCreated, dataViewEditor, allowAdHocDataView]); diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx index 4c1530de60825..4c8bb7c3a6382 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx @@ -160,7 +160,12 @@ export const SourceSelection: FC = () => { uiSettings, }} > - + { + onSearchSelected(dataView.id!, 'index-pattern', dataView.getIndexPattern()); + }} + allowAdHocDataView={true} + /> diff --git a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx index 048c8dbe2b5eb..051219481118d 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx @@ -6,7 +6,7 @@ */ import type { FC } from 'react'; -import React, { Fragment } from 'react'; +import React, { Fragment, useMemo } from 'react'; import { EuiButton, @@ -25,6 +25,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ENABLE_ESQL } from '@kbn/discover-utils'; import { isFullLicense } from '../license'; import { useMlKibana, useNavigateToPath } from '../contexts/kibana'; import { HelpMenu } from '../components/help_menu'; @@ -61,8 +62,10 @@ export const DatavisualizerSelector: FC = () => { http: { basePath }, docLinks, dataVisualizer, + uiSettings, }, } = useMlKibana(); + const isEsqlEnabled = useMemo(() => uiSettings.get(ENABLE_ESQL), [uiSettings]); const helpLink = docLinks.links.ml.guide; const navigateToPath = useNavigateToPath(); @@ -160,60 +163,62 @@ export const DatavisualizerSelector: FC = () => { data-test-subj="mlDataVisualizerCardIndexData" /> - - } - title={ - - <> - {' '} - - } - tooltipPosition={'right'} - aria-label={i18n.translate( - 'xpack.ml.datavisualizer.selector.technicalPreviewBadge.ariaLabel', - { - defaultMessage: 'ES|QL is in technical preview.', + {isEsqlEnabled ? ( + + } + title={ + + <> + {' '} + } - )} - /> - - - } - description={ - - } - footer={ - navigateToPath(ML_PAGES.DATA_VISUALIZER_ESQL)} - data-test-subj="mlDataVisualizerSelectESQLButton" - > + tooltipPosition={'right'} + aria-label={i18n.translate( + 'xpack.ml.datavisualizer.selector.technicalPreviewBadge.ariaLabel', + { + defaultMessage: 'ES|QL is in technical preview.', + } + )} + /> + + + } + description={ - - } - data-test-subj="mlDataVisualizerCardESQLData" - /> - + } + footer={ + navigateToPath(ML_PAGES.DATA_VISUALIZER_ESQL)} + data-test-subj="mlDataVisualizerSelectESQLButton" + > + + + } + data-test-subj="mlDataVisualizerCardESQLData" + /> + + ) : null} {startTrialVisible === true && ( diff --git a/x-pack/plugins/ml/public/application/explorer/alerts/alerts_panel.tsx b/x-pack/plugins/ml/public/application/explorer/alerts/alerts_panel.tsx index d5a5821aae98a..4c76ebe628f4f 100644 --- a/x-pack/plugins/ml/public/application/explorer/alerts/alerts_panel.tsx +++ b/x-pack/plugins/ml/public/application/explorer/alerts/alerts_panel.tsx @@ -33,7 +33,9 @@ export const AlertsPanel: FC = () => { const [isOpen, setIsOpen] = useState(true); const [toggleSelected, setToggleSelected] = useState(`alertsSummary`); - + const { + services: { fieldFormats }, + } = useMlKibana(); const { anomalyDetectionAlertsStateService } = useAnomalyExplorerContext(); const countByStatus = useObservable(anomalyDetectionAlertsStateService.countByStatus$); @@ -48,6 +50,9 @@ export const AlertsPanel: FC = () => { query: alertsQuery, showExpandToDetails: true, showAlertStatusWithFlapping: true, + cellContext: { + fieldFormats, + }, }; const alertsStateTable = triggersActionsUi!.getAlertsStateTable(alertStateProps); diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx index b1ed10c3f121e..972b8dc09e3ef 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx @@ -89,7 +89,9 @@ export const Page: FC = ({ > { + onObjectSelection(dataView.id!, 'index-pattern', dataView.getIndexPattern()); + }} allowAdHocDataView={true} /> {extraButtons ? extraButtons : null} diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx index bf1823e2ab3cd..edc085c1ec5e9 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx @@ -6,7 +6,8 @@ */ import type { FC } from 'react'; -import React, { useState, useMemo, useEffect, useCallback } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; import useObservable from 'react-use/lib/useObservable'; import { firstValueFrom } from 'rxjs'; @@ -15,14 +16,17 @@ import { EuiAccordion, EuiCode, EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, EuiFormRow, - EuiSpacer, EuiSelect, + EuiSpacer, EuiText, } from '@elastic/eui'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { i18n } from '@kbn/i18n'; +import { CreateDataViewButton } from '../../../components/create_data_view_button'; import { useMlKibana } from '../../../contexts/kibana'; import { RUNNING_STATE } from './inference_base'; import type { InferrerType } from '.'; @@ -45,6 +49,7 @@ export const InferenceInputFormIndexControls: FC = ({ setSelectedDataViewId, selectedField, setSelectedField, + setDataViewListItems, } = data; const runningState = useObservable(inferrer.getRunningState$(), inferrer.getRunningState()); @@ -53,27 +58,57 @@ export const InferenceInputFormIndexControls: FC = ({ return ( <> - - {disableIndexSelection ? ( - - - {dataViewListItems.find((item) => item.value === selectedDataViewId)?.text} - - - ) : ( - { - inferrer.setSelectedDataViewId(e.target.value); - setSelectedDataViewId(e.target.value); - }} - hasNoInitialSelection={true} - disabled={runningState === RUNNING_STATE.RUNNING} + + + + } fullWidth + > + {disableIndexSelection ? ( + + + {dataViewListItems.find((item) => item.value === selectedDataViewId)?.text} + + + ) : ( + { + inferrer.setSelectedDataViewId(e.target.value); + setSelectedDataViewId(e.target.value); + }} + hasNoInitialSelection={true} + disabled={runningState === RUNNING_STATE.RUNNING} + fullWidth + /> + )} + + + + { + setDataViewListItems((prev) => { + return [ + ...prev, + { + text: dataView.getIndexPattern(), + value: dataView.id!, + }, + ].sort((a, b) => a.text.localeCompare(b.text)); + }); + setSelectedDataViewId(dataView.id!); + }} /> - )} - + + + { />, defaultOptions ); - const errorMessage = await findByText('Unable to load the ML anomaly explorer data'); + const errorMessage = await findByText('Unable to load the data for the anomaly charts'); expect(errorMessage).toBeDefined(); }); }); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx index 41f56e699410c..e7c5ce816b02b 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx @@ -151,7 +151,7 @@ export const EmbeddableAnomalyChartsContainer: FC } color="danger" diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx index 5763f9d4f345d..f569f93752c35 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx @@ -259,7 +259,7 @@ export const getAnomalySwimLaneEmbeddableFactory = ( title={ } color="danger" diff --git a/x-pack/plugins/ml/public/embeddables/single_metric_viewer/embeddable_single_metric_viewer_container.tsx b/x-pack/plugins/ml/public/embeddables/single_metric_viewer/embeddable_single_metric_viewer_container.tsx index d7dae512e1935..7db1a07bb17bd 100644 --- a/x-pack/plugins/ml/public/embeddables/single_metric_viewer/embeddable_single_metric_viewer_container.tsx +++ b/x-pack/plugins/ml/public/embeddables/single_metric_viewer/embeddable_single_metric_viewer_container.tsx @@ -7,12 +7,15 @@ import type { FC } from 'react'; import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { EuiCallOut } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import moment from 'moment'; import { EuiResizeObserver } from '@elastic/eui'; import type { Observable } from 'rxjs'; import { throttle } from 'lodash'; import type { MlJob } from '@elastic/elasticsearch/lib/api/types'; import usePrevious from 'react-use/lib/usePrevious'; +import { extractErrorMessage } from '@kbn/ml-error-utils'; import { useToastNotificationService } from '../../application/services/toast_notification_service'; import { useEmbeddableExecutionContext } from '../common/use_embeddable_execution_context'; import { useSingleMetricViewerInputResolver } from './use_single_metric_viewer_input_resolver'; @@ -63,6 +66,7 @@ export const EmbeddableSingleMetricViewerContainer: FC< const [selectedJob, setSelectedJob] = useState(); const [autoZoomDuration, setAutoZoomDuration] = useState(); const [jobsLoaded, setJobsLoaded] = useState(false); + const [error, setError] = useState(); const { mlApiServices, mlJobService } = services[2]; const { data, bounds, lastRefresh } = useSingleMetricViewerInputResolver( @@ -85,8 +89,13 @@ export const EmbeddableSingleMetricViewerContainer: FC< useEffect(function setUpJobsLoaded() { async function loadJobs() { - await mlJobService.loadJobsWrapper(); - setJobsLoaded(true); + try { + await mlJobService.loadJobsWrapper(); + setJobsLoaded(true); + } catch (e) { + const errorMessage = extractErrorMessage(e); + setError(errorMessage); + } } loadJobs(); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -95,15 +104,20 @@ export const EmbeddableSingleMetricViewerContainer: FC< useEffect( function setUpSelectedJob() { async function fetchSelectedJob() { - if (mlApiServices && selectedJobId !== undefined) { - const { jobs } = await mlApiServices.getJobs({ jobId: selectedJobId }); - const job = jobs[0]; - setSelectedJob(job); + if (mlApiServices && selectedJobId !== undefined && error === undefined) { + try { + const { jobs } = await mlApiServices.getJobs({ jobId: selectedJobId }); + const job = jobs[0]; + setSelectedJob(job); + } catch (e) { + const errorMessage = extractErrorMessage(e); + setError(errorMessage); + } } } fetchSelectedJob(); }, - [selectedJobId, mlApiServices] + [selectedJobId, mlApiServices, error] ); useEffect( @@ -159,6 +173,24 @@ export const EmbeddableSingleMetricViewerContainer: FC< const containerPadding = 10; + if (error) { + return ( + + } + color="danger" + iconType="warning" + css={{ width: '100%' }} + > +

{error}

+ + ); + } + return ( {(resizeRef) => ( diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 0ca8c1ee6c016..e3bf7e3520649 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -50,6 +50,7 @@ import type { SavedSearchPublicPluginStart } from '@kbn/saved-search-plugin/publ import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import type { FieldFormatsRegistry } from '@kbn/field-formats-plugin/common'; +import { ENABLE_ESQL } from '@kbn/discover-utils'; import type { MlSharedServices } from './application/services/get_shared_ml_services'; import { getMlSharedServices } from './application/services/get_shared_ml_services'; import { registerManagementSection } from './application/management'; @@ -222,6 +223,8 @@ export class MlPlugin implements Plugin { const { capabilities } = coreStart.application; const mlCapabilities = capabilities.ml as MlCapabilities; + const isEsqlEnabled = core.uiSettings.get(ENABLE_ESQL); + // register various ML plugin features which require a full license // note including registerHomeFeature in register_helper would cause the page bundle size to increase significantly if (mlEnabled) { @@ -236,7 +239,13 @@ export class MlPlugin implements Plugin { registerSearchLinks, registerCasesAttachments, } = await import('./register_helper'); - registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, this.isServerless); + registerSearchLinks( + this.appUpdater$, + fullLicense, + mlCapabilities, + this.isServerless, + isEsqlEnabled + ); if ( pluginsSetup.triggersActionsUi && diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts index e446f7bc4bf65..abfa1a3fd7c5d 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts @@ -16,7 +16,8 @@ export function registerSearchLinks( appUpdater: BehaviorSubject, isFullLicense: boolean, mlCapabilities: MlCapabilities, - isServerless: boolean + isServerless: boolean, + isEsqlEnabled?: boolean ) { appUpdater.next(() => ({ keywords: [ @@ -24,6 +25,6 @@ export function registerSearchLinks( defaultMessage: 'ML', }), ], - deepLinks: getDeepLinks(isFullLicense, mlCapabilities, isServerless), + deepLinks: getDeepLinks(isFullLicense, mlCapabilities, isServerless, isEsqlEnabled), })); } diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts index e34766e02f848..f1e2cdcf96c9b 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts @@ -15,7 +15,8 @@ import { ML_PAGES } from '../../../common/constants/locator'; function createDeepLinks( mlCapabilities: MlCapabilities, isFullLicense: boolean, - isServerless: boolean + isServerless: boolean, + esqlEnabled?: boolean ) { return { getOverviewLinkDeepLink: (): AppDeepLink | null => { @@ -238,7 +239,8 @@ function createDeepLinks( }; }, - getESQLDataVisualizerDeepLink: (): AppDeepLink => { + getESQLDataVisualizerDeepLink: (): AppDeepLink | null => { + if (!esqlEnabled) return null; return { id: 'esqlDataVisualizer', title: i18n.translate('xpack.ml.deepLink.esqlDataVisualizer', { @@ -263,9 +265,10 @@ function createDeepLinks( export function getDeepLinks( isFullLicense: boolean, mlCapabilities: MlCapabilities, - isServerless: boolean + isServerless: boolean, + esqlEnabled?: boolean ): Array> { - const links = createDeepLinks(mlCapabilities, isFullLicense, isServerless); + const links = createDeepLinks(mlCapabilities, isFullLicense, isServerless, esqlEnabled); return Object.values(links) .map((link) => link()) .filter((link): link is AppDeepLink => link !== null); diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 3366a1925a7e0..9a016c972a766 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -124,5 +124,6 @@ "@kbn/presentation-containers", "@kbn/presentation-panel-plugin", "@kbn/shared-ux-utility", + "@kbn/discover-utils", ], } diff --git a/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx b/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx index 4c2ed3f50c4e0..3cef2c1722438 100644 --- a/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx +++ b/x-pack/plugins/monitoring/public/alerts/lib/alerts_toast.tsx @@ -8,17 +8,16 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiSpacer, EuiLink } from '@elastic/eui'; -import type { Observable } from 'rxjs'; -import type { CoreTheme } from '@kbn/core/public'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { Legacy } from '../../legacy_shims'; +import { MonitoringStartServices } from '../../types'; export interface EnableAlertResponse { isSufficientlySecure?: boolean; hasPermanentEncryptionKey?: boolean; } -const showApiKeyAndEncryptionError = (theme$?: Observable) => { +const showApiKeyAndEncryptionError = (services: MonitoringStartServices) => { const settingsUrl = Legacy.shims.docLinks.links.alerting.generalSettings; Legacy.shims.toastNotifications.addWarning({ @@ -40,7 +39,7 @@ const showApiKeyAndEncryptionError = (theme$?: Observable) => { })}
, - { theme$ } + services ), }); }; @@ -58,11 +57,14 @@ const showAlertsCreatedConfirmation = () => { }); }; -export const showAlertsToast = (response: EnableAlertResponse, theme$?: Observable) => { +export const showAlertsToast = ( + response: EnableAlertResponse, + services: MonitoringStartServices +) => { const { isSufficientlySecure, hasPermanentEncryptionKey } = response; if (isSufficientlySecure === false || hasPermanentEncryptionKey === false) { - showApiKeyAndEncryptionError(theme$); + showApiKeyAndEncryptionError(services); } else { showAlertsCreatedConfirmation(); } diff --git a/x-pack/plugins/monitoring/public/application/hooks/use_alerts_modal.ts b/x-pack/plugins/monitoring/public/application/hooks/use_alerts_modal.ts index 5469d02895bfc..c7c3295d44be1 100644 --- a/x-pack/plugins/monitoring/public/application/hooks/use_alerts_modal.ts +++ b/x-pack/plugins/monitoring/public/application/hooks/use_alerts_modal.ts @@ -7,9 +7,10 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useRequestErrorHandler } from './use_request_error_handler'; import { EnableAlertResponse, showAlertsToast } from '../../alerts/lib/alerts_toast'; +import { MonitoringStartServices } from '../../types'; export const useAlertsModal = () => { - const { services } = useKibana(); + const { services } = useKibana(); const handleRequestError = useRequestErrorHandler(); function shouldShowAlertsModal(alerts: {}) { @@ -38,9 +39,9 @@ export const useAlertsModal = () => { {} )!; window.localStorage.setItem('ALERTS_MODAL_DECISION_MADE', 'true'); - showAlertsToast(response, services.theme?.theme$); + showAlertsToast(response, services); } catch (err) { - await handleRequestError(err); + handleRequestError(err); } } diff --git a/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx b/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx index e5a3e4260ac2f..11f152536b54e 100644 --- a/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx +++ b/x-pack/plugins/monitoring/public/application/hooks/use_request_error_handler.tsx @@ -11,9 +11,10 @@ import { includes } from 'lodash'; import type { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButton, EuiSpacer, EuiText } from '@elastic/eui'; -import { toMountPoint, useKibana } from '@kbn/kibana-react-plugin/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { formatMsg } from '../../lib/format_msg'; -import { MonitoringStartPluginDependencies } from '../../types'; +import { MonitoringStartServices } from '../../types'; export function formatMonitoringError(err: IHttpFetchError) { if (err.response?.status && err.response?.status !== -1) { @@ -35,7 +36,7 @@ export function formatMonitoringError(err: IHttpFetchError) { } export const useRequestErrorHandler = () => { - const { services } = useKibana(); + const { services } = useKibana(); const history = useHistory(); return useCallback( (err: IHttpFetchError) => { @@ -64,7 +65,7 @@ export const useRequestErrorHandler = () => { /> , - { theme$: services.theme?.theme$ } + services ), }); } else { @@ -72,10 +73,10 @@ export const useRequestErrorHandler = () => { title: i18n.translate('xpack.monitoring.ajaxErrorHandler.requestErrorNotificationTitle', { defaultMessage: 'Monitoring Request Error', }), - text: toMountPoint(formatMonitoringError(err), { theme$: services.theme?.theme$ }), + text: toMountPoint(formatMonitoringError(err), services), }); } }, - [history, services.notifications?.toasts, services.theme] + [history, services] ); }; diff --git a/x-pack/plugins/monitoring/public/application/index.tsx b/x-pack/plugins/monitoring/public/application/index.tsx index b9fd25f60c367..39969c550570e 100644 --- a/x-pack/plugins/monitoring/public/application/index.tsx +++ b/x-pack/plugins/monitoring/public/application/index.tsx @@ -6,8 +6,8 @@ */ import { AppMountParameters, CoreStart, CoreTheme, MountPoint } from '@kbn/core/public'; -import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import React from 'react'; import ReactDOM from 'react-dom'; import { Redirect } from 'react-router-dom'; @@ -21,7 +21,7 @@ import { CODE_PATH_KIBANA, CODE_PATH_LOGSTASH, } from '../../common/constants'; -import { MonitoringStartPluginDependencies } from '../types'; +import { MonitoringStartPluginDependencies, MonitoringStartServices } from '../types'; import { ExternalConfig, ExternalConfigContext } from './contexts/external_config_context'; import { GlobalStateProvider } from './contexts/global_state_context'; import { HeaderActionMenuContext } from './contexts/header_action_menu_context'; @@ -99,255 +99,253 @@ const MonitoringApp: React.FC<{ theme$: Observable; }> = ({ core, plugins, externalConfig, setHeaderActionMenu, theme$ }) => { const history = createPreserveQueryHistory(); - const darkMode = core.theme.getTheme().darkMode; + const startServices: MonitoringStartServices = { ...core, ...plugins }; return ( - - - - - - - - - - - - - - - - - - {/* ElasticSearch Views */} - - - - - - - - - - - - - - - - - - - - - {/* Kibana Views */} - - - - - - - {/* Beats Views */} - - - - - - - {/* Logstash Routes */} - - - - - - - - - - - - - - - {/* APM Views */} - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + {/* ElasticSearch Views */} + + + + + + + + + + + + + + + + + + + + + {/* Kibana Views */} + + + + + + + {/* Beats Views */} + + + + + + + {/* Logstash Routes */} + + + + + + + + + + + + + + + {/* APM Views */} + + + + + + + + + + + + + + + + + + ); }; diff --git a/x-pack/plugins/monitoring/public/application/pages/access_denied/index.tsx b/x-pack/plugins/monitoring/public/application/pages/access_denied/index.tsx index 2ad779588b6af..839cf418123fb 100644 --- a/x-pack/plugins/monitoring/public/application/pages/access_denied/index.tsx +++ b/x-pack/plugins/monitoring/public/application/pages/access_denied/index.tsx @@ -13,12 +13,12 @@ import useInterval from 'react-use/lib/useInterval'; import { Redirect } from 'react-router-dom'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { ComponentProps } from '../../route_init'; -import { MonitoringStartPluginDependencies } from '../../../types'; +import { MonitoringStartServices } from '../../../types'; import { ExternalConfigContext } from '../../contexts/external_config_context'; export const AccessDeniedPage: React.FC = () => { const { isCcsEnabled } = useContext(ExternalConfigContext); - const { services } = useKibana(); + const { services } = useKibana(); const [hasAccess, setHasAccess] = useState(false); useInterval(() => { diff --git a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/elasticsearch_template.tsx b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/elasticsearch_template.tsx index b034478f720c3..a1d2fc6ca2fe3 100644 --- a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/elasticsearch_template.tsx +++ b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/elasticsearch_template.tsx @@ -8,9 +8,8 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { includes } from 'lodash'; -import { DashboardStart } from '@kbn/dashboard-plugin/public'; -import { FleetStart } from '@kbn/fleet-plugin/public'; import { EuiIcon, EuiToolTip } from '@elastic/eui'; +import { MonitoringStartServices } from '../../../types'; import { PageTemplate } from '../page_template'; import { TabMenuItem, PageTemplateProps } from '../page_template'; import { ML_SUPPORTED_LICENSES } from '../../../../common/constants'; @@ -24,7 +23,7 @@ export const ElasticsearchTemplate: React.FC = ({ cluster, ...props }) => { - const { services } = useKibana<{ dashboard?: DashboardStart; fleet?: FleetStart }>(); + const { services } = useKibana(); const tabs: TabMenuItem[] = [ { diff --git a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx index 29207177d93ec..a1b3e2805e8b5 100644 --- a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx +++ b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx @@ -6,13 +6,12 @@ */ import React, { useState } from 'react'; -import { toMountPoint } from '@kbn/kibana-react-plugin/public'; -import type { CoreStart } from '@kbn/core/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { EuiCallOut, EuiConfirmModal, EuiSpacer } from '@elastic/eui'; -import { DashboardStart } from '@kbn/dashboard-plugin/public'; -import { FleetStart, KibanaSavedObjectType } from '@kbn/fleet-plugin/public'; +import { KibanaSavedObjectType } from '@kbn/fleet-plugin/public'; +import { MonitoringStartServices } from '../../../types'; const INGEST_PIPELINE_DASHBOARD_ID = 'elasticsearch-metrics-ingest-pipelines'; @@ -22,9 +21,7 @@ const INGEST_PIPELINE_DASHBOARD_ID = 'elasticsearch-metrics-ingest-pipelines'; * @param services * @returns */ -export const ingestPipelineTabOnClick = async ( - services: Partial -) => { +export const ingestPipelineTabOnClick = async (services: MonitoringStartServices) => { const response = await services.fleet?.hooks.epm.getBulkAssets({ assetIds: [ { @@ -56,9 +53,7 @@ export const ingestPipelineTabOnClick = async ( canInstallPackages={!!services.fleet?.authz.integrations.installPackages} closeModal={() => ref.close()} />, - { - theme$: services.theme?.theme$, - } + services ) ); diff --git a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js index d4bc3e3529610..a10dbd1fd2198 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js +++ b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js @@ -28,7 +28,8 @@ import { AlertsStatus } from '../../../alerts/status'; import { STANDALONE_CLUSTER_CLUSTER_UUID } from '../../../../common/constants'; import { getSafeForExternalLink } from '../../../lib/get_safe_for_external_link'; import './listing.scss'; -import { toMountPoint, useKibana } from '@kbn/kibana-react-plugin/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { toMountPoint } from '@kbn/react-kibana-mount'; const IsClusterSupported = ({ isSupported, children }) => { return isSupported ? children : '-'; @@ -260,7 +261,7 @@ const licenseWarning = (scope, { title, text }) => { }); }; -const handleClickIncompatibleLicense = (scope, theme$, clusterName) => { +const handleClickIncompatibleLicense = (scope, services, clusterName) => { licenseWarning(scope, { title: i18n.translate( 'xpack.monitoring.cluster.listing.incompatibleLicense.warningMessageTitle', @@ -294,12 +295,12 @@ const handleClickIncompatibleLicense = (scope, theme$, clusterName) => { />

, - { theme$ } + services ), }); }; -const handleClickInvalidLicense = (scope, theme$, clusterName) => { +const handleClickInvalidLicense = (scope, services, clusterName) => { const licensingPath = `${Legacy.shims.getBasePath()}/app/management/stack/license_management/home`; licenseWarning(scope, { @@ -340,7 +341,7 @@ const handleClickInvalidLicense = (scope, theme$, clusterName) => { />

, - { theme$ } + services ), }); }; @@ -404,16 +405,8 @@ export const Listing = ({ angular, clusters, sorting, pagination, onTableChange const { services } = useKibana(); const _changeCluster = partial(changeCluster, scope, globalState); - const _handleClickIncompatibleLicense = partial( - handleClickIncompatibleLicense, - scope, - services.theme.theme$ - ); - const _handleClickInvalidLicense = partial( - handleClickInvalidLicense, - scope, - services.theme.theme$ - ); + const _handleClickIncompatibleLicense = partial(handleClickIncompatibleLicense, scope, services); + const _handleClickInvalidLicense = partial(handleClickInvalidLicense, scope, services); const hasStandaloneCluster = !!clusters.find( (cluster) => cluster.cluster_uuid === STANDALONE_CLUSTER_CLUSTER_UUID ); diff --git a/x-pack/plugins/monitoring/tsconfig.json b/x-pack/plugins/monitoring/tsconfig.json index 112bf5f695b17..6361f5beea6f0 100644 --- a/x-pack/plugins/monitoring/tsconfig.json +++ b/x-pack/plugins/monitoring/tsconfig.json @@ -44,6 +44,8 @@ "@kbn/logs-shared-plugin", "@kbn/alerts-as-data-utils", "@kbn/rule-data-utils", + "@kbn/react-kibana-mount", + "@kbn/react-kibana-context-render", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/observability_solution/apm/.prettierrc b/x-pack/plugins/observability_solution/apm/.prettierrc deleted file mode 100644 index 650cb880f6f5a..0000000000000 --- a/x-pack/plugins/observability_solution/apm/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "semi": true -} diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/configuration_types.d.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/configuration_types.d.ts index 88302dea91200..db0b4163f174d 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/configuration_types.d.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/configuration_types.d.ts @@ -8,9 +8,7 @@ import t from 'io-ts'; import { agentConfigurationIntakeRt } from './runtime_types/agent_configuration_intake_rt'; -export type AgentConfigurationIntake = t.TypeOf< - typeof agentConfigurationIntakeRt ->; +export type AgentConfigurationIntake = t.TypeOf; export type AgentConfiguration = { '@timestamp': number; diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/agent_configuration_intake_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/agent_configuration_intake_rt.ts index 30cbafbd2075c..7d5b6ad12a388 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/agent_configuration_intake_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/agent_configuration_intake_rt.ts @@ -10,22 +10,20 @@ import { settingDefinitions } from '../setting_definitions'; import { SettingValidation } from '../setting_definitions/types'; // retrieve validation from config definitions settings and validate on the server -const knownSettings = settingDefinitions.reduce< - Record ->((acc, { key, validation }) => { - acc[key] = validation; - return acc; -}, {}); +const knownSettings = settingDefinitions.reduce>( + (acc, { key, validation }) => { + acc[key] = validation; + return acc; + }, + {} +); export const serviceRt = t.partial({ name: t.string, environment: t.string, }); -export const settingsRt = t.intersection([ - t.record(t.string, t.string), - t.partial(knownSettings), -]); +export const settingsRt = t.intersection([t.record(t.string, t.string), t.partial(knownSettings)]); export const agentConfigurationIntakeRt = t.intersection([ t.partial({ agent_name: t.string }), diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/bytes_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/bytes_rt.ts index 62d8a153179db..96ae8ba18b901 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/bytes_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/bytes_rt.ts @@ -39,21 +39,14 @@ export function getBytesRt({ min, max }: { min?: string; max?: string }) { 'bytesRt', t.string.is, (input, context) => { - return either.chain( - t.string.validate(input, context), - (inputAsString) => { - const inputAsBytes = amountAndUnitToBytes(inputAsString); + return either.chain(t.string.validate(input, context), (inputAsString) => { + const inputAsBytes = amountAndUnitToBytes(inputAsString); - const isValidAmount = - inputAsBytes !== undefined && - inputAsBytes >= minAsBytes && - inputAsBytes <= maxAsBytes; + const isValidAmount = + inputAsBytes !== undefined && inputAsBytes >= minAsBytes && inputAsBytes <= maxAsBytes; - return isValidAmount - ? t.success(inputAsString) - : t.failure(input, context, message); - } - ); + return isValidAmount ? t.success(inputAsString) : t.failure(input, context, message); + }); }, t.identity ); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.test.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.test.ts index 9ad5b62149e4b..8e711d4c85ffe 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.test.ts @@ -13,19 +13,7 @@ describe('getDurationRt', () => { describe('must be at least 1m', () => { const customDurationRt = getDurationRt({ min: '1m' }); describe('it should not accept', () => { - [ - undefined, - null, - '', - 0, - 'foo', - true, - false, - '0m', - '-1m', - '1ms', - '1s', - ].map((input) => { + [undefined, null, '', 0, 'foo', true, false, '0m', '-1m', '1ms', '1s'].map((input) => { it(`${JSON.stringify(input)}`, () => { expect(isRight(customDurationRt.decode(input))).toBeFalsy(); }); @@ -98,13 +86,11 @@ describe('getDurationRt', () => { const customDurationRt = getDurationRt({ max: '1m' }); describe('it should not accept', () => { - [undefined, null, '', 0, 'foo', true, false, '2m', '61s', '60001ms'].map( - (input) => { - it(`${JSON.stringify(input)}`, () => { - expect(isRight(customDurationRt.decode(input))).toBeFalsy(); - }); - } - ); + [undefined, null, '', 0, 'foo', true, false, '2m', '61s', '60001ms'].map((input) => { + it(`${JSON.stringify(input)}`, () => { + expect(isRight(customDurationRt.decode(input))).toBeFalsy(); + }); + }); }); describe('it should return correct error message', () => { ['2m', '61s', '60001ms'].map((input) => { diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.ts index bfc1d9b26f8fa..c968a7cacebc4 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/duration_rt.ts @@ -33,22 +33,16 @@ export function getDurationRt({ min, max }: { min?: string; max?: string }) { 'durationRt', t.string.is, (input, context) => { - return either.chain( - t.string.validate(input, context), - (inputAsString) => { - const inputAsMilliseconds = - amountAndUnitToMilliseconds(inputAsString); + return either.chain(t.string.validate(input, context), (inputAsString) => { + const inputAsMilliseconds = amountAndUnitToMilliseconds(inputAsString); - const isValidAmount = - inputAsMilliseconds !== undefined && - inputAsMilliseconds >= minAsMilliseconds && - inputAsMilliseconds <= maxAsMilliseconds; + const isValidAmount = + inputAsMilliseconds !== undefined && + inputAsMilliseconds >= minAsMilliseconds && + inputAsMilliseconds <= maxAsMilliseconds; - return isValidAmount - ? t.success(inputAsString) - : t.failure(input, context, message); - } - ); + return isValidAmount ? t.success(inputAsString) : t.failure(input, context, message); + }); }, t.identity ); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/float_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/float_rt.ts index ba026b0579d14..a0e2d3f5b60ba 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/float_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/float_rt.ts @@ -14,11 +14,9 @@ export const floatRt = new t.Type( (input, context) => { return either.chain(t.string.validate(input, context), (inputAsString) => { const inputAsFloat = parseFloat(inputAsString); - const maxThreeDecimals = - parseFloat(inputAsFloat.toFixed(3)) === inputAsFloat; + const maxThreeDecimals = parseFloat(inputAsFloat.toFixed(3)) === inputAsFloat; - const isValid = - inputAsFloat >= 0 && inputAsFloat <= 1 && maxThreeDecimals; + const isValid = inputAsFloat >= 0 && inputAsFloat <= 1 && maxThreeDecimals; return isValid ? t.success(inputAsString) diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/get_range_type_message.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/get_range_type_message.ts index 855f2276b6eb5..d4efd93126947 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/get_range_type_message.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/get_range_type_message.ts @@ -19,10 +19,7 @@ function getRangeType(min?: number, max?: number) { } } -export function getRangeTypeMessage( - min?: number | string, - max?: number | string -) { +export function getRangeTypeMessage(min?: number | string, max?: number | string) { return i18n.translate('xpack.apm.agentConfig.range.errorText', { defaultMessage: `{rangeType, select, between {Must be between {min} and {max}} diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.test.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.test.ts index 34809c4c0f9dd..6d9dffca8ab61 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.test.ts @@ -17,13 +17,11 @@ describe('getIntegerRt', () => { }); describe('it should not accept', () => { - [NaN, undefined, null, '', 'foo', 0, 55, '-1', '-55', '33000'].map( - (input) => { - it(`${JSON.stringify(input)}`, () => { - expect(isRight(integerRt.decode(input))).toBe(false); - }); - } - ); + [NaN, undefined, null, '', 'foo', 0, 55, '-1', '-55', '33000'].map((input) => { + it(`${JSON.stringify(input)}`, () => { + expect(isRight(integerRt.decode(input))).toBe(false); + }); + }); }); describe('it should return correct error message', () => { diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.ts index e451cfc7102e3..e5fd4435ee2b3 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/integer_rt.ts @@ -22,16 +22,11 @@ export function getIntegerRt({ 'integerRt', t.string.is, (input, context) => { - return either.chain( - t.string.validate(input, context), - (inputAsString) => { - const inputAsInt = parseInt(inputAsString, 10); - const isValid = inputAsInt >= min && inputAsInt <= max; - return isValid - ? t.success(inputAsString) - : t.failure(input, context, message); - } - ); + return either.chain(t.string.validate(input, context), (inputAsString) => { + const inputAsInt = parseInt(inputAsString, 10); + const isValid = inputAsInt >= min && inputAsInt <= max; + return isValid ? t.success(inputAsString) : t.failure(input, context, message); + }); }, t.identity ); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/storage_size_rt.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/storage_size_rt.ts index 491a274316c3b..57649f9746417 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/storage_size_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/runtime_types/storage_size_rt.ts @@ -38,34 +38,25 @@ function amountAndUnitToBytes({ } export function getStorageSizeRt({ min, max }: { min?: string; max?: string }) { - const minAsBytes = - amountAndUnitToBytes({ value: min, decimalUnitBase: true }) ?? -Infinity; - const maxAsBytes = - amountAndUnitToBytes({ value: max, decimalUnitBase: true }) ?? Infinity; + const minAsBytes = amountAndUnitToBytes({ value: min, decimalUnitBase: true }) ?? -Infinity; + const maxAsBytes = amountAndUnitToBytes({ value: max, decimalUnitBase: true }) ?? Infinity; const message = getRangeTypeMessage(min, max); return new t.Type( 'storageSizeRt', t.string.is, (input, context) => { - return either.chain( - t.string.validate(input, context), - (inputAsString) => { - const inputAsBytes = amountAndUnitToBytes({ - value: inputAsString, - decimalUnitBase: true, - }); + return either.chain(t.string.validate(input, context), (inputAsString) => { + const inputAsBytes = amountAndUnitToBytes({ + value: inputAsString, + decimalUnitBase: true, + }); - const isValidAmount = - inputAsBytes !== undefined && - inputAsBytes >= minAsBytes && - inputAsBytes <= maxAsBytes; + const isValidAmount = + inputAsBytes !== undefined && inputAsBytes >= minAsBytes && inputAsBytes <= maxAsBytes; - return isValidAmount - ? t.success(inputAsString) - : t.failure(input, context, message); - } - ); + return isValidAmount ? t.success(inputAsString) : t.failure(input, context, message); + }); }, t.identity ); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/general_settings.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/general_settings.ts index 08fd02770ba5b..e7d04ffa3d97c 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/general_settings.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/general_settings.ts @@ -21,13 +21,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.apiRequestSize.label', { defaultMessage: 'API Request Size', }), - description: i18n.translate( - 'xpack.apm.agentConfig.apiRequestSize.description', - { - defaultMessage: - 'The maximum total compressed size of the request body which is sent to the APM Server intake api via a chunked encoding (HTTP streaming).\nNote that a small overshoot is possible.\n\nAllowed byte units are `b`, `kb` and `mb`. `1kb` is equal to `1024b`.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.apiRequestSize.description', { + defaultMessage: + 'The maximum total compressed size of the request body which is sent to the APM Server intake api via a chunked encoding (HTTP streaming).\nNote that a small overshoot is possible.\n\nAllowed byte units are `b`, `kb` and `mb`. `1kb` is equal to `1024b`.', + }), excludeAgents: [ 'js-base', 'rum-js', @@ -48,13 +45,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.apiRequestTime.label', { defaultMessage: 'API Request Time', }), - description: i18n.translate( - 'xpack.apm.agentConfig.apiRequestTime.description', - { - defaultMessage: - "Maximum time to keep an HTTP request to the APM Server open for.\n\nNOTE: This value has to be lower than the APM Server's `read_timeout` setting.", - } - ), + description: i18n.translate('xpack.apm.agentConfig.apiRequestTime.description', { + defaultMessage: + "Maximum time to keep an HTTP request to the APM Server open for.\n\nNOTE: This value has to be lower than the APM Server's `read_timeout` setting.", + }), excludeAgents: [ 'js-base', 'rum-js', @@ -76,13 +70,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.captureBody.label', { defaultMessage: 'Capture body', }), - description: i18n.translate( - 'xpack.apm.agentConfig.captureBody.description', - { - defaultMessage: - 'For transactions that are HTTP requests, the agent can optionally capture the request body (e.g. POST variables).\nFor transactions that are initiated by receiving a message from a message broker, the agent can capture the textual message body.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.captureBody.description', { + defaultMessage: + 'For transactions that are HTTP requests, the agent can optionally capture the request body (e.g. POST variables).\nFor transactions that are initiated by receiving a message from a message broker, the agent can capture the textual message body.', + }), options: [ { text: 'off', value: 'off' }, { text: 'errors', value: 'errors' }, @@ -95,23 +86,16 @@ export const generalSettings: RawSettingDefinition[] = [ { key: 'capture_body_content_types', type: 'text', - defaultValue: - 'application/x-www-form-urlencoded*, text/*, application/json*, application/xml*', - label: i18n.translate( - 'xpack.apm.agentConfig.captureBodyContentTypes.label', - { - defaultMessage: 'Capture Body Content Types', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.captureBodyContentTypes.description', - { - defaultMessage: - 'Configures which content types should be recorded.\n' + - '\n' + - 'The defaults end with a wildcard so that content types like `text/plain; charset=utf-8` are captured as well.', - } - ), + defaultValue: 'application/x-www-form-urlencoded*, text/*, application/json*, application/xml*', + label: i18n.translate('xpack.apm.agentConfig.captureBodyContentTypes.label', { + defaultMessage: 'Capture Body Content Types', + }), + description: i18n.translate('xpack.apm.agentConfig.captureBodyContentTypes.description', { + defaultMessage: + 'Configures which content types should be recorded.\n' + + '\n' + + 'The defaults end with a wildcard so that content types like `text/plain; charset=utf-8` are captured as well.', + }), includeAgents: ['java', 'dotnet'], }, @@ -123,21 +107,11 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.captureHeaders.label', { defaultMessage: 'Capture Headers', }), - description: i18n.translate( - 'xpack.apm.agentConfig.captureHeaders.description', - { - defaultMessage: - 'If set to `true`, the agent will capture HTTP request and response headers (including cookies), as well as message headers/properties when using messaging frameworks (like Kafka).\n\nNOTE: Setting this to `false` reduces network bandwidth, disk space and object allocations.', - } - ), - excludeAgents: [ - 'js-base', - 'rum-js', - 'nodejs', - 'php', - 'android/java', - 'iOS/swift', - ], + description: i18n.translate('xpack.apm.agentConfig.captureHeaders.description', { + defaultMessage: + 'If set to `true`, the agent will capture HTTP request and response headers (including cookies), as well as message headers/properties when using messaging frameworks (like Kafka).\n\nNOTE: Setting this to `false` reduces network bandwidth, disk space and object allocations.', + }), + excludeAgents: ['js-base', 'rum-js', 'nodejs', 'php', 'android/java', 'iOS/swift'], }, { @@ -147,17 +121,14 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.dedotCustomMetrics.label', { defaultMessage: 'Dedot custom metrics', }), - description: i18n.translate( - 'xpack.apm.agentConfig.dedotCustomMetrics.description', - { - defaultMessage: - 'Replaces dots with underscores in the metric names for custom metrics.\n' + - '\n' + - 'WARNING: Setting this to `false` can lead to mapping conflicts as dots indicate nesting in Elasticsearch.\n' + - 'An example of when a conflict happens is two metrics with the name `foo` and `foo.bar`.\n' + - 'The first metric maps `foo` to a number and the second metric maps `foo` as an object.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.dedotCustomMetrics.description', { + defaultMessage: + 'Replaces dots with underscores in the metric names for custom metrics.\n' + + '\n' + + 'WARNING: Setting this to `false` can lead to mapping conflicts as dots indicate nesting in Elasticsearch.\n' + + 'An example of when a conflict happens is two metrics with the name `foo` and `foo.bar`.\n' + + 'The first metric maps `foo` to a number and the second metric maps `foo` as an object.', + }), includeAgents: ['java'], }, @@ -165,24 +136,18 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'disable_instrumentations', type: 'text', defaultValue: '', - label: i18n.translate( - 'xpack.apm.agentConfig.disableInstrumentations.label', - { - defaultMessage: 'Disable instrumentations', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.disableInstrumentations.description', - { - defaultMessage: - 'Comma-separated list of modules to disable instrumentation for.\n' + - 'When instrumentation is disabled for a module, no spans will be collected for that module.\n' + - '\n' + - 'The up-to-date list of modules for which instrumentation can be disabled is language specific ' + - 'and can be found under the following links: ' + - '[Java](https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html#config-disable-instrumentations)', - } - ), + label: i18n.translate('xpack.apm.agentConfig.disableInstrumentations.label', { + defaultMessage: 'Disable instrumentations', + }), + description: i18n.translate('xpack.apm.agentConfig.disableInstrumentations.description', { + defaultMessage: + 'Comma-separated list of modules to disable instrumentation for.\n' + + 'When instrumentation is disabled for a module, no spans will be collected for that module.\n' + + '\n' + + 'The up-to-date list of modules for which instrumentation can be disabled is language specific ' + + 'and can be found under the following links: ' + + '[Java](https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html#config-disable-instrumentations)', + }), includeAgents: ['java'], }, @@ -190,12 +155,9 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'disable_outgoing_tracecontext_headers', type: 'boolean', defaultValue: 'true', - label: i18n.translate( - 'xpack.apm.agentConfig.disableOutgoingTracecontextHeaders.label', - { - defaultMessage: 'Disable outgoing tracecontext headers', - } - ), + label: i18n.translate('xpack.apm.agentConfig.disableOutgoingTracecontextHeaders.label', { + defaultMessage: 'Disable outgoing tracecontext headers', + }), description: i18n.translate( 'xpack.apm.agentConfig.disableOutgoingTracecontextHeaders.description', { @@ -216,15 +178,12 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.exitSpanMinDuration.label', { defaultMessage: 'Exit span min duration', }), - description: i18n.translate( - 'xpack.apm.agentConfig.exitSpanMinDuration.description', - { - defaultMessage: - 'Exit spans are spans that represent a call to an external service, like a database. If such calls are very short, they are usually not relevant and can be ignored.\n' + - '\n' + - 'NOTE: If a span propagates distributed tracing ids, it will not be ignored, even if it is shorter than the configured threshold. This is to ensure that no broken traces are recorded.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.exitSpanMinDuration.description', { + defaultMessage: + 'Exit spans are spans that represent a call to an external service, like a database. If such calls are very short, they are usually not relevant and can be ignored.\n' + + '\n' + + 'NOTE: If a span propagates distributed tracing ids, it will not be ignored, even if it is shorter than the configured threshold. This is to ensure that no broken traces are recorded.', + }), includeAgents: ['java', 'dotnet', 'nodejs', 'python'], }, @@ -235,16 +194,13 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.ignoreMessageQueues.label', { defaultMessage: 'Ignore message queues', }), - description: i18n.translate( - 'xpack.apm.agentConfig.ignoreMessageQueues.description', - { - defaultMessage: - 'Used to filter out specific messaging queues/topics from being traced. \n' + - '\n' + - 'This property should be set to an array containing one or more strings.\n' + - 'When set, sends-to and receives-from the specified queues/topic will be ignored.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.ignoreMessageQueues.description', { + defaultMessage: + 'Used to filter out specific messaging queues/topics from being traced. \n' + + '\n' + + 'This property should be set to an array containing one or more strings.\n' + + 'When set, sends-to and receives-from the specified queues/topic will be ignored.', + }), includeAgents: ['java', 'dotnet', 'nodejs'], }, @@ -256,15 +212,12 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.logEcsReformatting.label', { defaultMessage: 'Log ECS reformatting', }), - description: i18n.translate( - 'xpack.apm.agentConfig.logEcsReformatting.description', - { - defaultMessage: - 'Specifying whether and how the agent should automatically reformat application logs into ' + - '[ECS-compatible JSON](https://www.elastic.co/guide/en/ecs-logging/overview/master/intro.html), ' + - 'suitable for ingestion into Elasticsearch for further Log analysis.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.logEcsReformatting.description', { + defaultMessage: + 'Specifying whether and how the agent should automatically reformat application logs into ' + + '[ECS-compatible JSON](https://www.elastic.co/guide/en/ecs-logging/overview/master/intro.html), ' + + 'suitable for ingestion into Elasticsearch for further Log analysis.', + }), options: [ { text: 'off', value: 'off' }, { text: 'shade', value: 'shade' }, @@ -302,12 +255,9 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'mongodb_capture_statement_commands', type: 'boolean', defaultValue: 'false', - label: i18n.translate( - 'xpack.apm.agentConfig.mongodbCaptureStatementCommands.label', - { - defaultMessage: 'MongoDB capture statement commands', - } - ), + label: i18n.translate('xpack.apm.agentConfig.mongodbCaptureStatementCommands.label', { + defaultMessage: 'MongoDB capture statement commands', + }), description: i18n.translate( 'xpack.apm.agentConfig.mongodbCaptureStatementCommands.description', { @@ -341,19 +291,13 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'context_propagation_only', type: 'boolean', defaultValue: 'false', - label: i18n.translate( - 'xpack.apm.agentConfig.context_propagation_only.label', - { - defaultMessage: 'Context Propagation Only', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.context_propagation_only.description', - { - defaultMessage: - 'When set to true, disables log sending, metrics and trace collection. Trace context propagation and log correlation will stay active.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.context_propagation_only.label', { + defaultMessage: 'Context Propagation Only', + }), + description: i18n.translate('xpack.apm.agentConfig.context_propagation_only.description', { + defaultMessage: + 'When set to true, disables log sending, metrics and trace collection. Trace context propagation and log correlation will stay active.', + }), includeAgents: ['java'], }, @@ -365,13 +309,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.serverTimeout.label', { defaultMessage: 'Server Timeout', }), - description: i18n.translate( - 'xpack.apm.agentConfig.serverTimeout.description', - { - defaultMessage: - 'If a request to the APM Server takes longer than the configured timeout,\nthe request is cancelled and the event (exception or transaction) is discarded.\nSet to 0 to disable timeouts.\n\nWARNING: If timeouts are disabled or set to a high value, your app could experience memory issues if the APM Server times out.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.serverTimeout.description', { + defaultMessage: + 'If a request to the APM Server takes longer than the configured timeout,\nthe request is cancelled and the event (exception or transaction) is discarded.\nSet to 0 to disable timeouts.\n\nWARNING: If timeouts are disabled or set to a high value, your app could experience memory issues if the APM Server times out.', + }), includeAgents: ['java'], }, @@ -379,20 +320,14 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'span_compression_enabled', type: 'boolean', defaultValue: 'true', - label: i18n.translate( - 'xpack.apm.agentConfig.spanCompressionEnabled.label', - { - defaultMessage: 'Span compression enabled', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.spanCompressionEnabled.description', - { - defaultMessage: - 'Setting this option to true will enable span compression feature.\n' + - 'Span compression reduces the collection, processing, and storage overhead, and removes clutter from the UI. The tradeoff is that some information such as DB statements of all the compressed spans will not be collected.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.spanCompressionEnabled.label', { + defaultMessage: 'Span compression enabled', + }), + description: i18n.translate('xpack.apm.agentConfig.spanCompressionEnabled.description', { + defaultMessage: + 'Setting this option to true will enable span compression feature.\n' + + 'Span compression reduces the collection, processing, and storage overhead, and removes clutter from the UI. The tradeoff is that some information such as DB statements of all the compressed spans will not be collected.', + }), includeAgents: ['java', 'dotnet', 'python'], }, @@ -401,12 +336,9 @@ export const generalSettings: RawSettingDefinition[] = [ type: 'duration', defaultValue: '50ms', min: '0ms', - label: i18n.translate( - 'xpack.apm.agentConfig.spanCompressionExactMatchMaxDuration.label', - { - defaultMessage: 'Span compression exact match max duration', - } - ), + label: i18n.translate('xpack.apm.agentConfig.spanCompressionExactMatchMaxDuration.label', { + defaultMessage: 'Span compression exact match max duration', + }), description: i18n.translate( 'xpack.apm.agentConfig.spanCompressionExactMatchMaxDuration.description', { @@ -421,12 +353,9 @@ export const generalSettings: RawSettingDefinition[] = [ type: 'duration', defaultValue: '0ms', min: '0ms', - label: i18n.translate( - 'xpack.apm.agentConfig.spanCompressionSameKindMaxDuration.label', - { - defaultMessage: 'Span compression same kind max duration', - } - ), + label: i18n.translate('xpack.apm.agentConfig.spanCompressionSameKindMaxDuration.label', { + defaultMessage: 'Span compression same kind max duration', + }), description: i18n.translate( 'xpack.apm.agentConfig.spanCompressionSameKindMaxDuration.description', { @@ -446,21 +375,11 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.spanFramesMinDuration.label', { defaultMessage: 'Span frames minimum duration', }), - description: i18n.translate( - 'xpack.apm.agentConfig.spanFramesMinDuration.description', - { - defaultMessage: - '(Deprecated, use `span_stack_trace_min_duration` instead!) In its default settings, the APM agent will collect a stack trace with every recorded span.\nWhile this is very helpful to find the exact place in your code that causes the span, collecting this stack trace does have some overhead. \nWhen setting this option to a negative value, like `-1ms`, stack traces will be collected for all spans. Setting it to a positive value, e.g. `5ms`, will limit stack trace collection to spans with durations equal to or longer than the given value, e.g. 5 milliseconds.\n\nTo disable stack trace collection for spans completely, set the value to `0ms`.', - } - ), - excludeAgents: [ - 'js-base', - 'rum-js', - 'nodejs', - 'php', - 'android/java', - 'iOS/swift', - ], + description: i18n.translate('xpack.apm.agentConfig.spanFramesMinDuration.description', { + defaultMessage: + '(Deprecated, use `span_stack_trace_min_duration` instead!) In its default settings, the APM agent will collect a stack trace with every recorded span.\nWhile this is very helpful to find the exact place in your code that causes the span, collecting this stack trace does have some overhead. \nWhen setting this option to a negative value, like `-1ms`, stack traces will be collected for all spans. Setting it to a positive value, e.g. `5ms`, will limit stack trace collection to spans with durations equal to or longer than the given value, e.g. 5 milliseconds.\n\nTo disable stack trace collection for spans completely, set the value to `0ms`.', + }), + excludeAgents: ['js-base', 'rum-js', 'nodejs', 'php', 'android/java', 'iOS/swift'], }, { @@ -468,24 +387,18 @@ export const generalSettings: RawSettingDefinition[] = [ type: 'duration', min: '-1ms', defaultValue: '5ms', - label: i18n.translate( - 'xpack.apm.agentConfig.spanStackTraceMinDuration.label', - { - defaultMessage: 'Span stack trace minimum duration', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.spanStackTraceMinDuration.description', - { - defaultMessage: - 'While this is very helpful to find the exact place in your code that causes the span, ' + - 'collecting this stack trace does have some overhead. When setting this option to the value `0ms`, ' + - 'stack traces will be collected for all spans. Setting it to a positive value, e.g. `5ms`, will limit ' + - 'stack trace collection to spans with durations equal to or longer than the given value, e.g. 5 milliseconds.\n' + - '\n' + - 'To disable stack trace collection for spans completely, set the value to `-1ms`.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.spanStackTraceMinDuration.label', { + defaultMessage: 'Span stack trace minimum duration', + }), + description: i18n.translate('xpack.apm.agentConfig.spanStackTraceMinDuration.description', { + defaultMessage: + 'While this is very helpful to find the exact place in your code that causes the span, ' + + 'collecting this stack trace does have some overhead. When setting this option to the value `0ms`, ' + + 'stack traces will be collected for all spans. Setting it to a positive value, e.g. `5ms`, will limit ' + + 'stack trace collection to spans with durations equal to or longer than the given value, e.g. 5 milliseconds.\n' + + '\n' + + 'To disable stack trace collection for spans completely, set the value to `-1ms`.', + }), includeAgents: ['java', 'dotnet', 'nodejs', 'python'], }, @@ -497,13 +410,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.stackTraceLimit.label', { defaultMessage: 'Stack trace limit', }), - description: i18n.translate( - 'xpack.apm.agentConfig.stackTraceLimit.description', - { - defaultMessage: - 'Setting it to 0 will disable stack trace collection. Any positive integer value will be used as the maximum number of frames to collect. Setting it -1 means that all frames will be collected.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.stackTraceLimit.description', { + defaultMessage: + 'Setting it to 0 will disable stack trace collection. Any positive integer value will be used as the maximum number of frames to collect. Setting it -1 means that all frames will be collected.', + }), includeAgents: ['java', 'dotnet', 'go', 'python'], }, @@ -512,31 +422,25 @@ export const generalSettings: RawSettingDefinition[] = [ validation: traceContinuationStrategyRt, type: 'select', defaultValue: 'continue', - label: i18n.translate( - 'xpack.apm.agentConfig.traceContinuationStrategy.label', - { - defaultMessage: 'Trace continuation strategy', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.traceContinuationStrategy.description', - { - defaultMessage: - 'This option allows some control over how the APM agent handles W3C trace-context headers on incoming requests. By default, the `traceparent` and `tracestate` headers are used per W3C spec for distributed tracing. However, in certain cases it can be helpful to not use the incoming `traceparent` header. Some example use cases:\n' + - '\n' + - '* An Elastic-monitored service is receiving requests with `traceparent` headers from unmonitored services.\n' + - '* An Elastic-monitored service is publicly exposed, and does not want tracing data (trace-ids, sampling decisions) to possibly be spoofed by user requests.\n' + - '\n' + - 'Valid values are:\n' + - "* 'continue': The default behavior. An incoming `traceparent` value is used to continue the trace and determine the sampling decision.\n" + - "* 'restart': Always ignores the `traceparent` header of incoming requests. A new trace-id will be generated and the sampling decision will be made based on transaction_sample_rate. A span link will be made to the incoming `traceparent`.\n" + - "* 'restart_external': If an incoming request includes the `es` vendor flag in `tracestate`, then any `traceparent` will be considered internal and will be handled as described for 'continue' above. Otherwise, any `traceparent` is considered external and will be handled as described for 'restart' above.\n" + - '\n' + - 'Starting with Elastic Observability 8.2, span links are visible in trace views.\n' + - '\n' + - 'This option is case-insensitive.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.traceContinuationStrategy.label', { + defaultMessage: 'Trace continuation strategy', + }), + description: i18n.translate('xpack.apm.agentConfig.traceContinuationStrategy.description', { + defaultMessage: + 'This option allows some control over how the APM agent handles W3C trace-context headers on incoming requests. By default, the `traceparent` and `tracestate` headers are used per W3C spec for distributed tracing. However, in certain cases it can be helpful to not use the incoming `traceparent` header. Some example use cases:\n' + + '\n' + + '* An Elastic-monitored service is receiving requests with `traceparent` headers from unmonitored services.\n' + + '* An Elastic-monitored service is publicly exposed, and does not want tracing data (trace-ids, sampling decisions) to possibly be spoofed by user requests.\n' + + '\n' + + 'Valid values are:\n' + + "* 'continue': The default behavior. An incoming `traceparent` value is used to continue the trace and determine the sampling decision.\n" + + "* 'restart': Always ignores the `traceparent` header of incoming requests. A new trace-id will be generated and the sampling decision will be made based on transaction_sample_rate. A span link will be made to the incoming `traceparent`.\n" + + "* 'restart_external': If an incoming request includes the `es` vendor flag in `tracestate`, then any `traceparent` will be considered internal and will be handled as described for 'continue' above. Otherwise, any `traceparent` is considered external and will be handled as described for 'restart' above.\n" + + '\n' + + 'Starting with Elastic Observability 8.2, span links are visible in trace views.\n' + + '\n' + + 'This option is case-insensitive.', + }), options: [ { text: 'continue', value: 'continue' }, { text: 'restart', value: 'restart' }, @@ -554,13 +458,9 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.transactionMaxSpans.label', { defaultMessage: 'Transaction max spans', }), - description: i18n.translate( - 'xpack.apm.agentConfig.transactionMaxSpans.description', - { - defaultMessage: - 'Limits the amount of spans that are recorded per transaction.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.transactionMaxSpans.description', { + defaultMessage: 'Limits the amount of spans that are recorded per transaction.', + }), excludeAgents: ['js-base', 'rum-js', 'android/java', 'iOS/swift'], }, @@ -572,13 +472,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.transactionSampleRate.label', { defaultMessage: 'Transaction sample rate', }), - description: i18n.translate( - 'xpack.apm.agentConfig.transactionSampleRate.description', - { - defaultMessage: - 'By default, the agent will sample every transaction (e.g. request to your service). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. We still record overall time and the result for unsampled transactions, but not context information, labels, or spans.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.transactionSampleRate.description', { + defaultMessage: + 'By default, the agent will sample every transaction (e.g. request to your service). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. We still record overall time and the result for unsampled transactions, but not context information, labels, or spans.', + }), excludeAgents: ['android/java', 'iOS/swift'], }, @@ -591,13 +488,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.sanitizeFiledNames.label', { defaultMessage: 'Sanitize field names', }), - description: i18n.translate( - 'xpack.apm.agentConfig.sanitizeFiledNames.description', - { - defaultMessage: - 'Sometimes it is necessary to sanitize, i.e., remove, sensitive data sent to Elastic APM. This config accepts a list of wildcard patterns of field names which should be sanitized. These apply to HTTP headers (including cookies) and `application/x-www-form-urlencoded` data (POST form fields). The query string and the captured request body (such as `application/json` data) will not get sanitized.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.sanitizeFiledNames.description', { + defaultMessage: + 'Sometimes it is necessary to sanitize, i.e., remove, sensitive data sent to Elastic APM. This config accepts a list of wildcard patterns of field names which should be sanitized. These apply to HTTP headers (including cookies) and `application/x-www-form-urlencoded` data (POST form fields). The query string and the captured request body (such as `application/json` data) will not get sanitized.', + }), includeAgents: ['java', 'python', 'go', 'dotnet', 'nodejs', 'ruby'], }, @@ -610,13 +504,10 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.transactionIgnoreUrl.label', { defaultMessage: 'Ignore transactions based on URLs', }), - description: i18n.translate( - 'xpack.apm.agentConfig.transactionIgnoreUrl.description', - { - defaultMessage: - 'Used to restrict requests to certain URLs from being instrumented. This config accepts a comma-separated list of wildcard patterns of URL paths that should be ignored. When an incoming HTTP request is detected, its request path will be tested against each element in this list. For example, adding `/home/index` to this list would match and remove instrumentation from `http://localhost/home/index` as well as `http://whatever.com/home/index?value1=123`', - } - ), + description: i18n.translate('xpack.apm.agentConfig.transactionIgnoreUrl.description', { + defaultMessage: + 'Used to restrict requests to certain URLs from being instrumented. This config accepts a comma-separated list of wildcard patterns of URL paths that should be ignored. When an incoming HTTP request is detected, its request path will be tested against each element in this list. For example, adding `/home/index` to this list would match and remove instrumentation from `http://localhost/home/index` as well as `http://whatever.com/home/index?value1=123`', + }), includeAgents: ['java', 'nodejs', 'python', 'dotnet', 'ruby', 'go'], }, @@ -624,23 +515,17 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'transaction_ignore_user_agents', type: 'text', defaultValue: '', - label: i18n.translate( - 'xpack.apm.agentConfig.transactionIgnoreUserAgents.label', - { - defaultMessage: 'Transaction ignore user agents', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.transactionIgnoreUserAgents.description', - { - defaultMessage: - 'Used to restrict requests from certain User-Agents from being instrumented.\n' + - '\n' + - 'When an incoming HTTP request is detected,\n' + - 'the User-Agent from the request headers will be tested against each element in this list.\n' + - 'Example: `curl/*`, `*pingdom*`', - } - ), + label: i18n.translate('xpack.apm.agentConfig.transactionIgnoreUserAgents.label', { + defaultMessage: 'Transaction ignore user agents', + }), + description: i18n.translate('xpack.apm.agentConfig.transactionIgnoreUserAgents.description', { + defaultMessage: + 'Used to restrict requests from certain User-Agents from being instrumented.\n' + + '\n' + + 'When an incoming HTTP request is detected,\n' + + 'the User-Agent from the request headers will be tested against each element in this list.\n' + + 'Example: `curl/*`, `*pingdom*`', + }), includeAgents: ['java'], }, @@ -648,25 +533,19 @@ export const generalSettings: RawSettingDefinition[] = [ key: 'use_path_as_transaction_name', type: 'boolean', defaultValue: 'false', - label: i18n.translate( - 'xpack.apm.agentConfig.usePathAsTransactionName.label', - { - defaultMessage: 'Use path as transaction name', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.usePathAsTransactionName.description', - { - defaultMessage: - 'If set to `true`,\n' + - 'transaction names of unsupported or partially-supported frameworks will be in the form of `$method $path` instead of just `$method unknown route`.\n' + - '\n' + - 'WARNING: If your URLs contain path parameters like `/user/$userId`,\n' + - 'you should be very careful when enabling this flag,\n' + - 'as it can lead to an explosion of transaction groups.\n' + - 'Take a look at the `transaction_name_groups` option on how to mitigate this problem by grouping URLs together.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.usePathAsTransactionName.label', { + defaultMessage: 'Use path as transaction name', + }), + description: i18n.translate('xpack.apm.agentConfig.usePathAsTransactionName.description', { + defaultMessage: + 'If set to `true`,\n' + + 'transaction names of unsupported or partially-supported frameworks will be in the form of `$method $path` instead of just `$method unknown route`.\n' + + '\n' + + 'WARNING: If your URLs contain path parameters like `/user/$userId`,\n' + + 'you should be very careful when enabling this flag,\n' + + 'as it can lead to an explosion of transaction groups.\n' + + 'Take a look at the `transaction_name_groups` option on how to mitigate this problem by grouping URLs together.', + }), includeAgents: ['java'], }, @@ -677,18 +556,15 @@ export const generalSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.transactionNameGroups.label', { defaultMessage: 'Transaction name groups', }), - description: i18n.translate( - 'xpack.apm.agentConfig.transactionNameGroups.description', - { - defaultMessage: - 'With this option,\n' + - 'you can group transaction names that contain dynamic parts with a wildcard expression.\n' + - 'For example,\n' + - 'the pattern `GET /user/*/cart` would consolidate transactions,\n' + - 'such as `GET /users/42/cart` and `GET /users/73/cart` into a single transaction name `GET /users/*/cart`,\n' + - 'hence reducing the transaction name cardinality.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.transactionNameGroups.description', { + defaultMessage: + 'With this option,\n' + + 'you can group transaction names that contain dynamic parts with a wildcard expression.\n' + + 'For example,\n' + + 'the pattern `GET /user/*/cart` would consolidate transactions,\n' + + 'such as `GET /users/42/cart` and `GET /users/73/cart` into a single transaction name `GET /users/*/cart`,\n' + + 'hence reducing the transaction name cardinality.', + }), includeAgents: ['java'], }, ]; diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.test.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.test.ts index 7964332df8bf8..8f64a88a5dc0e 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.test.ts @@ -182,25 +182,16 @@ describe('filterByAgent', () => { }); it('android/java', () => { - expect(getSettingKeysForAgent('android/java')).toEqual([ - 'recording', - 'session_sample_rate', - ]); + expect(getSettingKeysForAgent('android/java')).toEqual(['recording', 'session_sample_rate']); }); it('iOS/swift', () => { - expect(getSettingKeysForAgent('iOS/swift')).toEqual([ - 'recording', - 'session_sample_rate', - ]); + expect(getSettingKeysForAgent('iOS/swift')).toEqual(['recording', 'session_sample_rate']); }); it('"All" services (no agent name)', () => { expect(getSettingKeysForAgent(undefined)).toEqual( - expect.arrayContaining([ - 'transaction_max_spans', - 'transaction_sample_rate', - ]) + expect.arrayContaining(['transaction_max_spans', 'transaction_sample_rate']) ); }); }); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.ts index dbe1da9988851..200ce169a05f1 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/index.ts @@ -132,8 +132,6 @@ export function validateSetting(setting: SettingDefinition, value: unknown) { } export const settingDefinitions: SettingDefinition[] = sortBy( - [...generalSettings, ...javaSettings, ...mobileSettings].map( - getSettingDefaults - ), + [...generalSettings, ...javaSettings, ...mobileSettings].map(getSettingDefaults), 'key' ); diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/java_settings.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/java_settings.ts index 45abfb43edb00..5d30e208d9202 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/java_settings.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/java_settings.ts @@ -16,18 +16,15 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.applicationPackages.label', { defaultMessage: 'Application packages', }), - description: i18n.translate( - 'xpack.apm.agentConfig.applicationPackages.description', - { - defaultMessage: - 'Used to determine whether a stack trace frame is an in-app frame or a library frame. ' + - 'This allows the APM app to collapse the stack frames of library code, and highlight the stack frames that originate from your application. ' + - 'Multiple root packages can be set as a comma-separated list; there’s no need to configure sub-packages. ' + - 'Because this setting helps determine which classes to scan on startup, setting this option can also improve startup time.\n' + - '\n' + - 'You must set this option in order to use the API annotations `@CaptureTransaction` and `@CaptureSpan`.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.applicationPackages.description', { + defaultMessage: + 'Used to determine whether a stack trace frame is an in-app frame or a library frame. ' + + 'This allows the APM app to collapse the stack frames of library code, and highlight the stack frames that originate from your application. ' + + 'Multiple root packages can be set as a comma-separated list; there’s no need to configure sub-packages. ' + + 'Because this setting helps determine which classes to scan on startup, setting this option can also improve startup time.\n' + + '\n' + + 'You must set this option in order to use the API annotations `@CaptureTransaction` and `@CaptureSpan`.', + }), includeAgents: ['java'], }, @@ -39,13 +36,10 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.enableLogCorrelation.label', { defaultMessage: 'Enable log correlation', }), - description: i18n.translate( - 'xpack.apm.agentConfig.enableLogCorrelation.description', - { - defaultMessage: - "A boolean specifying if the agent should integrate into SLF4J's MDC to enable trace-log correlation. If set to `true`, the agent will set the `trace.id` and `transaction.id` for the currently active spans and transactions to the MDC. Since Java agent version 1.16.0, the agent also adds `error.id` of captured error to the MDC just before the error message is logged. NOTE: While it's allowed to enable this setting at runtime, you can't disable it without a restart.", - } - ), + description: i18n.translate('xpack.apm.agentConfig.enableLogCorrelation.description', { + defaultMessage: + "A boolean specifying if the agent should integrate into SLF4J's MDC to enable trace-log correlation. If set to `true`, the agent will set the `trace.id` and `transaction.id` for the currently active spans and transactions to the MDC. Since Java agent version 1.16.0, the agent also adds `error.id` of captured error to the MDC just before the error message is logged. NOTE: While it's allowed to enable this setting at runtime, you can't disable it without a restart.", + }), includeAgents: ['java'], }, @@ -60,13 +54,10 @@ export const javaSettings: RawSettingDefinition[] = [ type: 'boolean', category: 'Circuit-Breaker', defaultValue: 'false', - description: i18n.translate( - 'xpack.apm.agentConfig.circuitBreakerEnabled.description', - { - defaultMessage: - 'A boolean specifying whether the circuit breaker should be enabled or not. When enabled, the agent periodically polls stress monitors to detect system/process/JVM stress state. If ANY of the monitors detects a stress indication, the agent will pause, as if the `recording` configuration option has been set to `false`, thus reducing resource consumption to a minimum. When paused, the agent continues polling the same monitors in order to detect whether the stress state has been relieved. If ALL monitors approve that the system/process/JVM is not under stress anymore, the agent will resume and become fully functional.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.circuitBreakerEnabled.description', { + defaultMessage: + 'A boolean specifying whether the circuit breaker should be enabled or not. When enabled, the agent periodically polls stress monitors to detect system/process/JVM stress state. If ANY of the monitors detects a stress indication, the agent will pause, as if the `recording` configuration option has been set to `false`, thus reducing resource consumption to a minimum. When paused, the agent continues polling the same monitors in order to detect whether the stress state has been relieved. If ALL monitors approve that the system/process/JVM is not under stress anymore, the agent will resume and become fully functional.', + }), includeAgents: ['java'], }, @@ -74,12 +65,9 @@ export const javaSettings: RawSettingDefinition[] = [ key: 'enable_experimental_instrumentations', type: 'boolean', defaultValue: 'false', - label: i18n.translate( - 'xpack.apm.agentConfig.enableExperimentalInstrumentations.label', - { - defaultMessage: 'Enable experimental instrumentations', - } - ), + label: i18n.translate('xpack.apm.agentConfig.enableExperimentalInstrumentations.label', { + defaultMessage: 'Enable experimental instrumentations', + }), description: i18n.translate( 'xpack.apm.agentConfig.enableExperimentalInstrumentations.description', { @@ -97,26 +85,20 @@ export const javaSettings: RawSettingDefinition[] = [ key: 'enable_instrumentations', type: 'text', defaultValue: '', - label: i18n.translate( - 'xpack.apm.agentConfig.enableInstrumentations.label', - { - defaultMessage: 'Disable instrumentations', - } - ), - description: i18n.translate( - 'xpack.apm.agentConfig.enableInstrumentations.description', - { - defaultMessage: - 'A list of instrumentations which should be selectively enabled. ' + - 'Valid options are listed in the ' + - '[Java APM Agent documentation](https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html#config-disable-instrumentations).\n' + - '\n' + - 'When set to non-empty value, only listed instrumentations will be enabled ' + - 'if they are not disabled through `disable_instrumentations`or `enable_experimental_instrumentations`.\n' + - 'When not set or empty (default), all instrumentations enabled by default will be enabled ' + - 'unless they are disabled through `disable_instrumentations` or `enable_experimental_instrumentations`.', - } - ), + label: i18n.translate('xpack.apm.agentConfig.enableInstrumentations.label', { + defaultMessage: 'Disable instrumentations', + }), + description: i18n.translate('xpack.apm.agentConfig.enableInstrumentations.description', { + defaultMessage: + 'A list of instrumentations which should be selectively enabled. ' + + 'Valid options are listed in the ' + + '[Java APM Agent documentation](https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html#config-disable-instrumentations).\n' + + '\n' + + 'When set to non-empty value, only listed instrumentations will be enabled ' + + 'if they are not disabled through `disable_instrumentations`or `enable_experimental_instrumentations`.\n' + + 'When not set or empty (default), all instrumentations enabled by default will be enabled ' + + 'unless they are disabled through `disable_instrumentations` or `enable_experimental_instrumentations`.', + }), includeAgents: ['java'], }, @@ -127,16 +109,13 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.logSending.label', { defaultMessage: 'Log sending (experimental)', }), - description: i18n.translate( - 'xpack.apm.agentConfig.logSending.description', - { - defaultMessage: - 'Experimental, requires latest version of the Java agent.\n' + - '\n' + - 'If set to `true`,\n' + - 'agent will send logs directly to APM server.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.logSending.description', { + defaultMessage: + 'Experimental, requires latest version of the Java agent.\n' + + '\n' + + 'If set to `true`,\n' + + 'agent will send logs directly to APM server.', + }), includeAgents: ['java'], }, @@ -148,28 +127,24 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.spanMinDuration.label', { defaultMessage: 'Span minimum duration', }), - description: i18n.translate( - 'xpack.apm.agentConfig.spanMinDuration.description', - { - defaultMessage: - 'Sets the minimum duration of spans. Spans that execute faster than this threshold are attempted to be discarded.\n' + - '\n' + - 'The attempt fails if they lead up to a span that can’t be discarded. Spans that propagate the trace context to ' + - 'downstream services, such as outgoing HTTP requests, can’t be discarded. Additionally, spans that lead to an error ' + - 'or that may be a parent of an async operation can’t be discarded.\n' + - '\n' + - 'However, external calls that don’t propagate context, such as calls to a database, can be discarded using this threshold.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.spanMinDuration.description', { + defaultMessage: + 'Sets the minimum duration of spans. Spans that execute faster than this threshold are attempted to be discarded.\n' + + '\n' + + 'The attempt fails if they lead up to a span that can’t be discarded. Spans that propagate the trace context to ' + + 'downstream services, such as outgoing HTTP requests, can’t be discarded. Additionally, spans that lead to an error ' + + 'or that may be a parent of an async operation can’t be discarded.\n' + + '\n' + + 'However, external calls that don’t propagate context, such as calls to a database, can be discarded using this threshold.', + }), includeAgents: ['java'], }, { key: 'stress_monitor_gc_stress_threshold', - label: i18n.translate( - 'xpack.apm.agentConfig.stressMonitorGcStressThreshold.label', - { defaultMessage: 'Stress monitor gc stress threshold' } - ), + label: i18n.translate('xpack.apm.agentConfig.stressMonitorGcStressThreshold.label', { + defaultMessage: 'Stress monitor gc stress threshold', + }), type: 'float', category: 'Circuit-Breaker', defaultValue: '0.95', @@ -184,10 +159,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'stress_monitor_gc_relief_threshold', - label: i18n.translate( - 'xpack.apm.agentConfig.stressMonitorGcReliefThreshold.label', - { defaultMessage: 'Stress monitor gc relief threshold' } - ), + label: i18n.translate('xpack.apm.agentConfig.stressMonitorGcReliefThreshold.label', { + defaultMessage: 'Stress monitor gc relief threshold', + }), type: 'float', category: 'Circuit-Breaker', @@ -203,10 +177,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'stress_monitor_cpu_duration_threshold', - label: i18n.translate( - 'xpack.apm.agentConfig.stressMonitorCpuDurationThreshold.label', - { defaultMessage: 'Stress monitor cpu duration threshold' } - ), + label: i18n.translate('xpack.apm.agentConfig.stressMonitorCpuDurationThreshold.label', { + defaultMessage: 'Stress monitor cpu duration threshold', + }), type: 'duration', category: 'Circuit-Breaker', defaultValue: '1m', @@ -222,10 +195,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'stress_monitor_system_cpu_stress_threshold', - label: i18n.translate( - 'xpack.apm.agentConfig.stressMonitorSystemCpuStressThreshold.label', - { defaultMessage: 'Stress monitor system cpu stress threshold' } - ), + label: i18n.translate('xpack.apm.agentConfig.stressMonitorSystemCpuStressThreshold.label', { + defaultMessage: 'Stress monitor system cpu stress threshold', + }), type: 'float', category: 'Circuit-Breaker', defaultValue: '0.95', @@ -240,10 +212,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'stress_monitor_system_cpu_relief_threshold', - label: i18n.translate( - 'xpack.apm.agentConfig.stressMonitorSystemCpuReliefThreshold.label', - { defaultMessage: 'Stress monitor system cpu relief threshold' } - ), + label: i18n.translate('xpack.apm.agentConfig.stressMonitorSystemCpuReliefThreshold.label', { + defaultMessage: 'Stress monitor system cpu relief threshold', + }), type: 'float', category: 'Circuit-Breaker', defaultValue: '0.8', @@ -263,28 +234,23 @@ export const javaSettings: RawSettingDefinition[] = [ { key: 'profiling_inferred_spans_enabled', - label: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansEnabled.label', - { defaultMessage: 'Profiling inferred spans enabled' } - ), + label: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansEnabled.label', { + defaultMessage: 'Profiling inferred spans enabled', + }), type: 'boolean', category: 'Profiling', defaultValue: 'false', - description: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansEnabled.description', - { - defaultMessage: - 'Set to `true` to make the agent create spans for method executions based on async-profiler, a sampling aka statistical profiler. Due to the nature of how sampling profilers work, the duration of the inferred spans are not exact, but only estimations. The `profiling_inferred_spans_sampling_interval` lets you fine tune the trade-off between accuracy and overhead. The inferred spans are created after a profiling session has ended. This means there is a delay between the regular and the inferred spans being visible in the UI. NOTE: This feature is not available on Windows.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansEnabled.description', { + defaultMessage: + 'Set to `true` to make the agent create spans for method executions based on async-profiler, a sampling aka statistical profiler. Due to the nature of how sampling profilers work, the duration of the inferred spans are not exact, but only estimations. The `profiling_inferred_spans_sampling_interval` lets you fine tune the trade-off between accuracy and overhead. The inferred spans are created after a profiling session has ended. This means there is a delay between the regular and the inferred spans being visible in the UI. NOTE: This feature is not available on Windows.', + }), includeAgents: ['java'], }, { key: 'profiling_inferred_spans_sampling_interval', - label: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansSamplingInterval.label', - { defaultMessage: 'Profiling inferred spans sampling interval' } - ), + label: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansSamplingInterval.label', { + defaultMessage: 'Profiling inferred spans sampling interval', + }), type: 'duration', category: 'Profiling', defaultValue: '50ms', @@ -301,10 +267,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'profiling_inferred_spans_min_duration', - label: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansMinDuration.label', - { defaultMessage: 'Profiling inferred spans min duration' } - ), + label: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansMinDuration.label', { + defaultMessage: 'Profiling inferred spans min duration', + }), type: 'duration', category: 'Profiling', defaultValue: '0ms', @@ -320,10 +285,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'profiling_inferred_spans_included_classes', - label: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansIncludedClasses.label', - { defaultMessage: 'Profiling inferred spans included classes' } - ), + label: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansIncludedClasses.label', { + defaultMessage: 'Profiling inferred spans included classes', + }), type: 'text', category: 'Profiling', defaultValue: '*', @@ -338,10 +302,9 @@ export const javaSettings: RawSettingDefinition[] = [ }, { key: 'profiling_inferred_spans_excluded_classes', - label: i18n.translate( - 'xpack.apm.agentConfig.profilingInferredSpansExcludedClasses.label', - { defaultMessage: 'Profiling inferred spans excluded classes' } - ), + label: i18n.translate('xpack.apm.agentConfig.profilingInferredSpansExcludedClasses.label', { + defaultMessage: 'Profiling inferred spans excluded classes', + }), type: 'text', category: 'Profiling', defaultValue: @@ -363,19 +326,16 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.captureJmxMetrics.label', { defaultMessage: 'Capture JMX metrics', }), - description: i18n.translate( - 'xpack.apm.agentConfig.captureJmxMetrics.description', - { - defaultMessage: - 'Report metrics from JMX to the APM Server\n' + - '\n' + - 'Can contain multiple comma separated JMX metric definitions:\n' + - '\n' + - '`object_name[] attribute[:metric_name=]`\n' + - '\n' + - 'See the Java agent documentation for more details.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.captureJmxMetrics.description', { + defaultMessage: + 'Report metrics from JMX to the APM Server\n' + + '\n' + + 'Can contain multiple comma separated JMX metric definitions:\n' + + '\n' + + '`object_name[] attribute[:metric_name=]`\n' + + '\n' + + 'See the Java agent documentation for more details.', + }), includeAgents: ['java'], }, @@ -386,14 +346,11 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.ignoreExceptions.label', { defaultMessage: 'Ignore exceptions', }), - description: i18n.translate( - 'xpack.apm.agentConfig.ignoreExceptions.description', - { - defaultMessage: - 'A list of exceptions that should be ignored and not reported as errors.\n' + - 'This allows to ignore exceptions thrown in regular control flow that are not actual errors.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.ignoreExceptions.description', { + defaultMessage: + 'A list of exceptions that should be ignored and not reported as errors.\n' + + 'This allows to ignore exceptions thrown in regular control flow that are not actual errors.', + }), includeAgents: ['java'], }, @@ -404,26 +361,23 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.traceMethods.label', { defaultMessage: 'Trace methods', }), - description: i18n.translate( - 'xpack.apm.agentConfig.traceMethods.description', - { - defaultMessage: - 'A list of methods for which to create a transaction or span.\n' + - '\n' + - 'If you want to monitor a large number of methods,\n' + - 'use `profiling_inferred_spans_enabled`.\n' + - '\n' + - 'This works by instrumenting each matching method to include code that creates a span for the method.\n' + - 'While creating a span is quite cheap in terms of performance,\n' + - 'instrumenting a whole code base or a method which is executed in a tight loop leads to significant overhead.\n' + - '\n' + - 'NOTE: Only use wildcards if necessary.\n' + - 'The more methods you match the more overhead will be caused by the agent.\n' + - 'Also note that there is a maximum amount of spans per transaction `transaction_max_spans`.\n' + - '\n' + - 'See the Java agent documentation for more details.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.traceMethods.description', { + defaultMessage: + 'A list of methods for which to create a transaction or span.\n' + + '\n' + + 'If you want to monitor a large number of methods,\n' + + 'use `profiling_inferred_spans_enabled`.\n' + + '\n' + + 'This works by instrumenting each matching method to include code that creates a span for the method.\n' + + 'While creating a span is quite cheap in terms of performance,\n' + + 'instrumenting a whole code base or a method which is executed in a tight loop leads to significant overhead.\n' + + '\n' + + 'NOTE: Only use wildcards if necessary.\n' + + 'The more methods you match the more overhead will be caused by the agent.\n' + + 'Also note that there is a maximum amount of spans per transaction `transaction_max_spans`.\n' + + '\n' + + 'See the Java agent documentation for more details.', + }), includeAgents: ['java'], }, @@ -434,16 +388,13 @@ export const javaSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.unnestExceptions.label', { defaultMessage: 'Unnest exceptions', }), - description: i18n.translate( - 'xpack.apm.agentConfig.unnestExceptions.description', - { - defaultMessage: - 'When reporting exceptions,\n' + - 'un-nests the exceptions matching the wildcard pattern.\n' + - "This can come in handy for Spring's `org.springframework.web.util.NestedServletException`,\n" + - 'for example.', - } - ), + description: i18n.translate('xpack.apm.agentConfig.unnestExceptions.description', { + defaultMessage: + 'When reporting exceptions,\n' + + 'un-nests the exceptions matching the wildcard pattern.\n' + + "This can come in handy for Spring's `org.springframework.web.util.NestedServletException`,\n" + + 'for example.', + }), includeAgents: ['java'], }, ]; diff --git a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/mobile_settings.ts b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/mobile_settings.ts index c334c3a72aaa3..b171614f7fb2a 100644 --- a/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/mobile_settings.ts +++ b/x-pack/plugins/observability_solution/apm/common/agent_configuration/setting_definitions/mobile_settings.ts @@ -17,13 +17,10 @@ export const mobileSettings: RawSettingDefinition[] = [ label: i18n.translate('xpack.apm.agentConfig.sessionSampleRate.label', { defaultMessage: 'Session sample rate', }), - description: i18n.translate( - 'xpack.apm.agentConfig.sessionSampleRate.description', - { - defaultMessage: - "By default, the agent will sample all signals generated by your application (e.g. spans, metrics, & logs). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. When reduced below 1.0, data will be sampled per session. This is so context in a given session isn't lost.", - } - ), + description: i18n.translate('xpack.apm.agentConfig.sessionSampleRate.description', { + defaultMessage: + "By default, the agent will sample all signals generated by your application (e.g. spans, metrics, & logs). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. When reduced below 1.0, data will be sampled per session. This is so context in a given session isn't lost.", + }), includeAgents: ['iOS/swift', 'android/java'], }, ]; diff --git a/x-pack/plugins/observability_solution/apm/common/anomaly_detection/get_preferred_service_anomaly_timeseries.ts b/x-pack/plugins/observability_solution/apm/common/anomaly_detection/get_preferred_service_anomaly_timeseries.ts index 04f1c72a3c334..0f1ff8c4f30a6 100644 --- a/x-pack/plugins/observability_solution/apm/common/anomaly_detection/get_preferred_service_anomaly_timeseries.ts +++ b/x-pack/plugins/observability_solution/apm/common/anomaly_detection/get_preferred_service_anomaly_timeseries.ts @@ -20,9 +20,7 @@ export function getPreferredServiceAnomalyTimeseries({ allAnomalyTimeseries: ServiceAnomalyTimeseries[]; fallbackToTransactions: boolean; }) { - const seriesForType = allAnomalyTimeseries.filter( - (serie) => serie.type === detectorType - ); + const seriesForType = allAnomalyTimeseries.filter((serie) => serie.type === detectorType); return seriesForType.find( (serie) => diff --git a/x-pack/plugins/observability_solution/apm/common/anomaly_detection/index.ts b/x-pack/plugins/observability_solution/apm/common/anomaly_detection/index.ts index 23912461412e2..68b6aa72fca58 100644 --- a/x-pack/plugins/observability_solution/apm/common/anomaly_detection/index.ts +++ b/x-pack/plugins/observability_solution/apm/common/anomaly_detection/index.ts @@ -32,12 +32,9 @@ export function getSeverityColor(score: number) { } export const ML_ERRORS = { - INVALID_LICENSE: i18n.translate( - 'xpack.apm.anomaly_detection.error.invalid_license', - { - defaultMessage: `To use anomaly detection, you must be subscribed to an Elastic Platinum license. With it, you'll be able to monitor your services with the aid of machine learning.`, - } - ), + INVALID_LICENSE: i18n.translate('xpack.apm.anomaly_detection.error.invalid_license', { + defaultMessage: `To use anomaly detection, you must be subscribed to an Elastic Platinum license. With it, you'll be able to monitor your services with the aid of machine learning.`, + }), MISSING_READ_PRIVILEGES: i18n.translate( 'xpack.apm.anomaly_detection.error.missing_read_privileges', { @@ -52,12 +49,9 @@ export const ML_ERRORS = { 'You must have "write" privileges to Machine Learning and APM in order to create Anomaly Detection jobs', } ), - ML_NOT_AVAILABLE: i18n.translate( - 'xpack.apm.anomaly_detection.error.not_available', - { - defaultMessage: 'Machine learning is not available', - } - ), + ML_NOT_AVAILABLE: i18n.translate('xpack.apm.anomaly_detection.error.not_available', { + defaultMessage: 'Machine learning is not available', + }), ML_NOT_AVAILABLE_IN_SPACE: i18n.translate( 'xpack.apm.anomaly_detection.error.not_available_in_space', { diff --git a/x-pack/plugins/observability_solution/apm/common/apm_api/parse_endpoint.ts b/x-pack/plugins/observability_solution/apm/common/apm_api/parse_endpoint.ts index fb7ef6d36ce25..bd8eac7387dd3 100644 --- a/x-pack/plugins/observability_solution/apm/common/apm_api/parse_endpoint.ts +++ b/x-pack/plugins/observability_solution/apm/common/apm_api/parse_endpoint.ts @@ -7,10 +7,7 @@ type Method = 'get' | 'post' | 'put' | 'delete'; -export function parseEndpoint( - endpoint: string, - pathParams: Record = {} -) { +export function parseEndpoint(endpoint: string, pathParams: Record = {}) { const [method, rawPathname] = endpoint.split(' '); // replace template variables with path params diff --git a/x-pack/plugins/observability_solution/apm/common/apm_feature_flags.ts b/x-pack/plugins/observability_solution/apm/common/apm_feature_flags.ts index 3b9da8cdebd92..8f860a9c6ce86 100644 --- a/x-pack/plugins/observability_solution/apm/common/apm_feature_flags.ts +++ b/x-pack/plugins/observability_solution/apm/common/apm_feature_flags.ts @@ -65,9 +65,9 @@ export type ApmFeatureFlags = { [TApmFeatureFlagName in keyof ApmFeatureFlagMap]: ValueOfApmFeatureFlag; }; -export type ValueOfApmFeatureFlag< - TApmFeatureFlagName extends ApmFeatureFlagName -> = t.OutputOf; +export type ValueOfApmFeatureFlag = t.OutputOf< + ApmFeatureFlagMap[TApmFeatureFlagName]['type'] +>; export function getApmFeatureFlags(): ApmFeatureFlags { return mapValues(apmFeatureFlagMap, (value, key) => value.default); diff --git a/x-pack/plugins/observability_solution/apm/common/apm_telemetry.test.ts b/x-pack/plugins/observability_solution/apm/common/apm_telemetry.test.ts index 6fd7606a3031e..2181e0df3375e 100644 --- a/x-pack/plugins/observability_solution/apm/common/apm_telemetry.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/apm_telemetry.test.ts @@ -5,10 +5,7 @@ * 2.0. */ -import { - getApmTelemetryMapping, - mergeApmTelemetryMapping, -} from './apm_telemetry'; +import { getApmTelemetryMapping, mergeApmTelemetryMapping } from './apm_telemetry'; // Add this snapshot serializer for this test. The default snapshot serializer // prints "Object" next to objects in the JSON output, but we want to be able to @@ -80,8 +77,8 @@ describe('APM telemetry helpers', () => { }; expect( - mergeApmTelemetryMapping(validTelemetryMapping)?.mappings.properties - .stack_stats.properties.kibana.properties.plugins.properties.apm + mergeApmTelemetryMapping(validTelemetryMapping)?.mappings.properties.stack_stats + .properties.kibana.properties.plugins.properties.apm ).toEqual(getApmTelemetryMapping()); }); }); diff --git a/x-pack/plugins/observability_solution/apm/common/apm_telemetry.ts b/x-pack/plugins/observability_solution/apm/common/apm_telemetry.ts index d3b318e62eab3..634ced4702740 100644 --- a/x-pack/plugins/observability_solution/apm/common/apm_telemetry.ts +++ b/x-pack/plugins/observability_solution/apm/common/apm_telemetry.ts @@ -21,10 +21,7 @@ function schemaToMapping(schemaLeaf: any): any { return Object.entries(schemaLeaf).reduce((acc, [key, value]) => { const propMapping = schemaToMapping(value); - acc[key] = - typeof propMapping.type === 'string' - ? propMapping - : { properties: propMapping }; + acc[key] = typeof propMapping.type === 'string' ? propMapping : { properties: propMapping }; return acc; }, {} as Record); @@ -43,9 +40,7 @@ export function getApmTelemetryMapping() { * Merge a telemetry mapping object (from https://github.com/elastic/telemetry/blob/master/config/templates/xpack-phone-home.json) * with the output from `getApmTelemetryMapping`. */ -export function mergeApmTelemetryMapping( - xpackPhoneHomeMapping: Record -) { +export function mergeApmTelemetryMapping(xpackPhoneHomeMapping: Record) { return produce(xpackPhoneHomeMapping, (draft: Record) => { draft.mappings.properties.stack_stats.properties.kibana.properties.plugins.properties.apm = getApmTelemetryMapping(); diff --git a/x-pack/plugins/observability_solution/apm/common/connections.ts b/x-pack/plugins/observability_solution/apm/common/connections.ts index 6d87e3517e8c3..10a10e96e5190 100644 --- a/x-pack/plugins/observability_solution/apm/common/connections.ts +++ b/x-pack/plugins/observability_solution/apm/common/connections.ts @@ -70,7 +70,5 @@ export interface ConnectionStatsItemWithComparisonData { } export function getNodeName(node: Node) { - return node.type === NodeType.service - ? node.serviceName - : node.dependencyName; + return node.type === NodeType.service ? node.serviceName : node.dependencyName; } diff --git a/x-pack/plugins/observability_solution/apm/common/correlations/constants.ts b/x-pack/plugins/observability_solution/apm/common/correlations/constants.ts index 115e50582823a..f42c5b1c4a81b 100644 --- a/x-pack/plugins/observability_solution/apm/common/correlations/constants.ts +++ b/x-pack/plugins/observability_solution/apm/common/correlations/constants.ts @@ -62,11 +62,7 @@ export const FIELDS_TO_ADD_AS_CANDIDATE = new Set([ 'process.args', 'http.response.status_code', ]); -export const FIELD_PREFIX_TO_ADD_AS_CANDIDATE = [ - 'cloud.', - 'labels.', - 'user_agent.', -]; +export const FIELD_PREFIX_TO_ADD_AS_CANDIDATE = ['cloud.', 'labels.', 'user_agent.']; /** * Other constants diff --git a/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.test.ts b/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.test.ts index 227173c317780..1dc3aece117f5 100644 --- a/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.test.ts @@ -14,8 +14,7 @@ describe('correlations', () => { { fieldName: 'the-field-1', fieldValue: 'the-value-1' }, { fieldName: 'the-field-2', fieldValue: 'the-value-2' }, ]; - const prioritziedFieldValuePairs = - getPrioritizedFieldValuePairs(fieldValuePairs); + const prioritziedFieldValuePairs = getPrioritizedFieldValuePairs(fieldValuePairs); expect(prioritziedFieldValuePairs.map((d) => d.fieldName)).toEqual([ 'the-field-1', 'the-field-2', @@ -27,8 +26,7 @@ describe('correlations', () => { { fieldName: 'service.version', fieldValue: 'the-value-1' }, { fieldName: 'the-field-2', fieldValue: 'the-value-2' }, ]; - const prioritziedFieldValuePairs = - getPrioritizedFieldValuePairs(fieldValuePairs); + const prioritziedFieldValuePairs = getPrioritizedFieldValuePairs(fieldValuePairs); expect(prioritziedFieldValuePairs.map((d) => d.fieldName)).toEqual([ 'service.version', 'the-field-2', @@ -40,8 +38,7 @@ describe('correlations', () => { { fieldName: 'the-field-1', fieldValue: 'the-value-1' }, { fieldName: 'service.version', fieldValue: 'the-value-2' }, ]; - const prioritziedFieldValuePairs = - getPrioritizedFieldValuePairs(fieldValuePairs); + const prioritziedFieldValuePairs = getPrioritizedFieldValuePairs(fieldValuePairs); expect(prioritziedFieldValuePairs.map((d) => d.fieldName)).toEqual([ 'service.version', 'the-field-1', @@ -54,8 +51,7 @@ describe('correlations', () => { { fieldName: 'service.version', fieldValue: 'the-value-2' }, { fieldName: 'cloud.the-field-3', fieldValue: 'the-value-3' }, ]; - const prioritziedFieldValuePairs = - getPrioritizedFieldValuePairs(fieldValuePairs); + const prioritziedFieldValuePairs = getPrioritizedFieldValuePairs(fieldValuePairs); expect(prioritziedFieldValuePairs.map((d) => d.fieldName)).toEqual([ 'service.version', 'cloud.the-field-3', diff --git a/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.ts b/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.ts index 4a0086ba02a6d..36cf68e7f0f2e 100644 --- a/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.ts +++ b/x-pack/plugins/observability_solution/apm/common/correlations/utils/get_prioritized_field_value_pairs.ts @@ -10,9 +10,7 @@ import { hasPrefixToInclude } from './has_prefix_to_include'; import type { FieldValuePair } from '../types'; -export const getPrioritizedFieldValuePairs = ( - fieldValuePairs: FieldValuePair[] -) => { +export const getPrioritizedFieldValuePairs = (fieldValuePairs: FieldValuePair[]) => { const prioritizedFields = [...FIELDS_TO_ADD_AS_CANDIDATE]; return fieldValuePairs.sort((a, b) => { diff --git a/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.test.ts b/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.test.ts index a951dc63caad9..e8b1a82450d5d 100644 --- a/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.test.ts @@ -18,9 +18,7 @@ describe('aggregation utils', () => { }); it('returns false if the prefix is included', async () => { FIELD_PREFIX_TO_ADD_AS_CANDIDATE.forEach((prefix) => { - expect( - hasPrefixToInclude(`unknown-prefix-.${prefix}the-field-name`) - ).toBe(false); + expect(hasPrefixToInclude(`unknown-prefix-.${prefix}the-field-name`)).toBe(false); expect(hasPrefixToInclude('the-field-name')).toBe(false); }); }); diff --git a/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.ts b/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.ts index baf4d62af00fa..524aa8a73790a 100644 --- a/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.ts +++ b/x-pack/plugins/observability_solution/apm/common/correlations/utils/has_prefix_to_include.ts @@ -8,7 +8,5 @@ import { FIELD_PREFIX_TO_ADD_AS_CANDIDATE } from '../constants'; export const hasPrefixToInclude = (fieldName: string) => { - return FIELD_PREFIX_TO_ADD_AS_CANDIDATE.some((prefix) => - fieldName.startsWith(prefix) - ); + return FIELD_PREFIX_TO_ADD_AS_CANDIDATE.some((prefix) => fieldName.startsWith(prefix)); }; diff --git a/x-pack/plugins/observability_solution/apm/common/critical_path/get_aggregated_critical_path_root_nodes.ts b/x-pack/plugins/observability_solution/apm/common/critical_path/get_aggregated_critical_path_root_nodes.ts index 5d00db3977b07..f6b6763fe5c1b 100644 --- a/x-pack/plugins/observability_solution/apm/common/critical_path/get_aggregated_critical_path_root_nodes.ts +++ b/x-pack/plugins/observability_solution/apm/common/critical_path/get_aggregated_critical_path_root_nodes.ts @@ -28,29 +28,24 @@ export function getAggregatedCriticalPathRootNodes(params: { let numNodes = 0; - function mergeNodesWithSameOperationId( - nodes: CriticalPathTreeNode[] - ): CriticalPathTreeNode[] { + function mergeNodesWithSameOperationId(nodes: CriticalPathTreeNode[]): CriticalPathTreeNode[] { const nodesByOperationId: Record = {}; - const mergedNodes = nodes.reduce( - (prev, node, index, array) => { - const nodeId = node.nodeId; - const operationId = criticalPath.operationIdByNodeId[nodeId]; - if (nodesByOperationId[operationId]) { - const prevNode = nodesByOperationId[operationId]; - prevNode.children.push(...node.children); - prevNode.countExclusive += node.countExclusive; - prevNode.countInclusive += node.countInclusive; - return prev; - } - - nodesByOperationId[operationId] = node; - - prev.push(node); + const mergedNodes = nodes.reduce((prev, node, index, array) => { + const nodeId = node.nodeId; + const operationId = criticalPath.operationIdByNodeId[nodeId]; + if (nodesByOperationId[operationId]) { + const prevNode = nodesByOperationId[operationId]; + prevNode.children.push(...node.children); + prevNode.countExclusive += node.countExclusive; + prevNode.countInclusive += node.countInclusive; return prev; - }, - [] - ); + } + + nodesByOperationId[operationId] = node; + + prev.push(node); + return prev; + }, []); numNodes += mergedNodes.length; diff --git a/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.test.ts b/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.test.ts index 8b78798d2bc55..61720dba3d472 100644 --- a/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.test.ts @@ -17,9 +17,7 @@ describe('getCriticalPath', () => { const entryTransaction = dedot(events[0]!, {}) as Transaction; const waterfall = getWaterfall({ traceItems: { - traceDocs: events.map( - (event) => dedot(event, {}) as Transaction | Span - ), + traceDocs: events.map((event) => dedot(event, {}) as Transaction | Span), errorDocs: [], exceedsMax: false, spanLinksCountById: {}, @@ -45,9 +43,7 @@ describe('getCriticalPath', () => { .transaction('/service-a') .timestamp(1) .duration(100) - .children( - service.span('foo', 'external', 'db').duration(100).timestamp(1) - ) + .children(service.span('foo', 'external', 'db').duration(100).timestamp(1)) .serialize() ); @@ -76,9 +72,7 @@ describe('getCriticalPath', () => { .serialize() ); - const longerSpan = waterfall.items.find( - (item) => (item.doc as Span).span?.name === 'bar' - ); + const longerSpan = waterfall.items.find((item) => (item.doc as Span).span?.name === 'bar'); expect(segments).toEqual([ { self: false, duration: 100000, item: waterfall.items[0], offset: 0 }, @@ -103,9 +97,7 @@ describe('getCriticalPath', () => { .transaction('/service-a') .timestamp(1) .duration(100) - .children( - service.span('foo', 'external', 'db').duration(50).timestamp(11) - ) + .children(service.span('foo', 'external', 'db').duration(50).timestamp(11)) .serialize() ); diff --git a/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.ts b/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.ts index ad4e166962ccb..f881362b39078 100644 --- a/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.ts +++ b/x-pack/plugins/observability_solution/apm/common/critical_path/get_critical_path.ts @@ -67,11 +67,7 @@ export function getCriticalPath(waterfall: IWaterfall): CriticalPath { // - The span/tx ends before the start of the initial scan period. // - The span ends _after_ the current scan time. - ( - normalizedChildStart >= scanTime || - normalizedChildEnd < start || - childEnd > scanTime - ) + (normalizedChildStart >= scanTime || normalizedChildEnd < start || childEnd > scanTime) ); if (!isOnCriticalPath) { @@ -124,8 +120,7 @@ export function getCriticalPath(waterfall: IWaterfall): CriticalPath { if (waterfall.entryWaterfallTransaction) { const start = - waterfall.entryWaterfallTransaction.skew + - waterfall.entryWaterfallTransaction.offset; + waterfall.entryWaterfallTransaction.skew + waterfall.entryWaterfallTransaction.offset; scan({ item: waterfall.entryWaterfallTransaction, start, diff --git a/x-pack/plugins/observability_solution/apm/common/custom_link/custom_link.test.ts b/x-pack/plugins/observability_solution/apm/common/custom_link/custom_link.test.ts index 1e2b3b608f74d..c9bebede12afc 100644 --- a/x-pack/plugins/observability_solution/apm/common/custom_link/custom_link.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/custom_link/custom_link.test.ts @@ -28,8 +28,7 @@ describe('Custom link', () => { }); it('handles complex template with multiple variables', () => { - const url = - 'https://example.com/{{name}}/details/{{age}}?param={{gender}}'; + const url = 'https://example.com/{{name}}/details/{{age}}?param={{gender}}'; const result = extractTemplateVariableNames(url); expect(result).toEqual(['name', 'age', 'gender']); }); @@ -99,9 +98,7 @@ describe('Custom link', () => { service: { name: 'foo & bar' }, } as Transaction; const result = getEncodedCustomLinkUrl(url, transaction); - expect(result).toBe( - 'https://kibana.com/app/apm/foo%20%26%20bar/overview' - ); + expect(result).toBe('https://kibana.com/app/apm/foo%20%26%20bar/overview'); }); }); }); diff --git a/x-pack/plugins/observability_solution/apm/common/custom_link/index.ts b/x-pack/plugins/observability_solution/apm/common/custom_link/index.ts index e377d7392b010..cc8d206f9b2b7 100644 --- a/x-pack/plugins/observability_solution/apm/common/custom_link/index.ts +++ b/x-pack/plugins/observability_solution/apm/common/custom_link/index.ts @@ -11,19 +11,15 @@ import { set } from '@kbn/safer-lodash-set'; import Mustache from 'mustache'; import { Transaction } from '../../typings/es_schemas/ui/transaction'; -export const INVALID_LICENSE = i18n.translate( - 'xpack.apm.settings.customLink.license.text', - { - defaultMessage: - "To create custom links, you must be subscribed to an Elastic Gold license or above. With it, you'll have the ability to create custom links to improve your workflow when analyzing your services.", - } -); +export const INVALID_LICENSE = i18n.translate('xpack.apm.settings.customLink.license.text', { + defaultMessage: + "To create custom links, you must be subscribed to an Elastic Gold license or above. With it, you'll have the ability to create custom links to improve your workflow when analyzing your services.", +}); export const NO_PERMISSION_LABEL = i18n.translate( 'xpack.apm.settings.customLink.noPermissionTooltipLabel', { - defaultMessage: - "Your user role doesn't have permissions to create custom links", + defaultMessage: "Your user role doesn't have permissions to create custom links", } ); @@ -35,10 +31,7 @@ export const extractTemplateVariableNames = (url: string): string[] => { return Array.from(uniqueVariableNames); }; -export function getEncodedCustomLinkUrl( - url: string, - transaction?: Transaction -) { +export function getEncodedCustomLinkUrl(url: string, transaction?: Transaction) { try { const templateVariables = extractTemplateVariableNames(url); const encodedTemplateVariables = {}; diff --git a/x-pack/plugins/observability_solution/apm/common/data_source.ts b/x-pack/plugins/observability_solution/apm/common/data_source.ts index 93d8261473692..217862e03e415 100644 --- a/x-pack/plugins/observability_solution/apm/common/data_source.ts +++ b/x-pack/plugins/observability_solution/apm/common/data_source.ts @@ -17,16 +17,13 @@ type AnyApmDocumentType = | ApmDocumentType.ErrorEvent | ApmDocumentType.SpanEvent; -export interface ApmDataSource< - TDocumentType extends AnyApmDocumentType = AnyApmDocumentType -> { +export interface ApmDataSource { rollupInterval: RollupInterval; documentType: TDocumentType; } -export type ApmDataSourceWithSummary< - T extends AnyApmDocumentType = AnyApmDocumentType -> = ApmDataSource & { - hasDurationSummaryField: boolean; - hasDocs: boolean; -}; +export type ApmDataSourceWithSummary = + ApmDataSource & { + hasDurationSummaryField: boolean; + hasDocs: boolean; + }; diff --git a/x-pack/plugins/observability_solution/apm/common/dependencies.ts b/x-pack/plugins/observability_solution/apm/common/dependencies.ts index 812bb33342ba5..174f24a404a2c 100644 --- a/x-pack/plugins/observability_solution/apm/common/dependencies.ts +++ b/x-pack/plugins/observability_solution/apm/common/dependencies.ts @@ -7,10 +7,7 @@ import { i18n } from '@kbn/i18n'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; -import { - PROCESSOR_EVENT, - SPAN_DESTINATION_SERVICE_RESOURCE, -} from './es_fields/apm'; +import { PROCESSOR_EVENT, SPAN_DESTINATION_SERVICE_RESOURCE } from './es_fields/apm'; import { environmentQuery } from './utils/environment_query'; export const unifiedSearchBarPlaceholder = i18n.translate( @@ -30,9 +27,7 @@ export const getSearchBarBoolFilter = ({ return [ { term: { [PROCESSOR_EVENT]: ProcessorEvent.metric } }, { exists: { field: SPAN_DESTINATION_SERVICE_RESOURCE } }, - ...(dependencyName - ? [{ term: { [SPAN_DESTINATION_SERVICE_RESOURCE]: dependencyName } }] - : []), + ...(dependencyName ? [{ term: { [SPAN_DESTINATION_SERVICE_RESOURCE]: dependencyName } }] : []), ...environmentQuery(environment), ]; }; diff --git a/x-pack/plugins/observability_solution/apm/common/environment_filter_values.ts b/x-pack/plugins/observability_solution/apm/common/environment_filter_values.ts index 24bc00658a7d4..9faf645c54151 100644 --- a/x-pack/plugins/observability_solution/apm/common/environment_filter_values.ts +++ b/x-pack/plugins/observability_solution/apm/common/environment_filter_values.ts @@ -13,12 +13,9 @@ import { Environment } from './environment_rt'; const ENVIRONMENT_ALL_VALUE = 'ENVIRONMENT_ALL' as const; const ENVIRONMENT_NOT_DEFINED_VALUE = 'ENVIRONMENT_NOT_DEFINED' as const; -export const allOptionText = i18n.translate( - 'xpack.apm.filter.environment.allLabel', - { - defaultMessage: 'All', - } -); +export const allOptionText = i18n.translate('xpack.apm.filter.environment.allLabel', { + defaultMessage: 'All', +}); export function getEnvironmentLabel(environment: string): string { if (!environment || environment === ENVIRONMENT_NOT_DEFINED_VALUE) { @@ -80,10 +77,8 @@ export function getNextEnvironmentUrlParam({ requestedEnvironment?: string; currentEnvironmentUrlParam: Environment; }) { - const normalizedRequestedEnvironment = - requestedEnvironment || ENVIRONMENT_NOT_DEFINED.value; - const normalizedQueryEnvironment = - currentEnvironmentUrlParam || ENVIRONMENT_ALL.value; + const normalizedRequestedEnvironment = requestedEnvironment || ENVIRONMENT_NOT_DEFINED.value; + const normalizedQueryEnvironment = currentEnvironmentUrlParam || ENVIRONMENT_ALL.value; if (normalizedRequestedEnvironment === normalizedQueryEnvironment) { return currentEnvironmentUrlParam || ENVIRONMENT_ALL.value; diff --git a/x-pack/plugins/observability_solution/apm/common/environment_rt.ts b/x-pack/plugins/observability_solution/apm/common/environment_rt.ts index dd07bb9f47318..530b6e7930134 100644 --- a/x-pack/plugins/observability_solution/apm/common/environment_rt.ts +++ b/x-pack/plugins/observability_solution/apm/common/environment_rt.ts @@ -6,10 +6,7 @@ */ import * as t from 'io-ts'; import { nonEmptyStringRt } from '@kbn/io-ts-utils'; -import { - ENVIRONMENT_ALL, - ENVIRONMENT_NOT_DEFINED, -} from './environment_filter_values'; +import { ENVIRONMENT_ALL, ENVIRONMENT_NOT_DEFINED } from './environment_filter_values'; export const environmentStringRt = t.union([ t.literal(ENVIRONMENT_NOT_DEFINED.value), diff --git a/x-pack/plugins/observability_solution/apm/common/es_fields/apm.ts b/x-pack/plugins/observability_solution/apm/common/es_fields/apm.ts index 05efeceb11f28..27a786df210e4 100644 --- a/x-pack/plugins/observability_solution/apm/common/es_fields/apm.ts +++ b/x-pack/plugins/observability_solution/apm/common/es_fields/apm.ts @@ -36,8 +36,7 @@ export const SERVICE_RUNTIME_VERSION = 'service.runtime.version'; export const SERVICE_NODE_NAME = 'service.node.name'; export const SERVICE_VERSION = 'service.version'; export const SERVICE_TARGET_TYPE = 'service.target.type'; -export const SERVICE_OVERFLOW_COUNT = - 'service_transaction.aggregation.overflow_count'; +export const SERVICE_OVERFLOW_COUNT = 'service_transaction.aggregation.overflow_count'; export const URL_FULL = 'url.full'; export const HTTP_REQUEST_METHOD = 'http.request.method'; @@ -61,12 +60,10 @@ export const TRANSACTION_SAMPLED = 'transaction.sampled'; export const TRANSACTION_PAGE_URL = 'transaction.page.url'; export const TRANSACTION_FAILURE_COUNT = 'transaction.failure_count'; export const TRANSACTION_SUCCESS_COUNT = 'transaction.success_count'; -export const TRANSACTION_OVERFLOW_COUNT = - 'transaction.aggregation.overflow_count'; +export const TRANSACTION_OVERFLOW_COUNT = 'transaction.aggregation.overflow_count'; // for transaction metrics export const TRANSACTION_ROOT = 'transaction.root'; -export const TRANSACTION_PROFILER_STACK_TRACE_IDS = - 'transaction.profiler_stack_trace_ids'; +export const TRANSACTION_PROFILER_STACK_TRACE_IDS = 'transaction.profiler_stack_trace_ids'; export const EVENT_OUTCOME = 'event.outcome'; @@ -79,8 +76,7 @@ export const SPAN_SELF_TIME_SUM = 'span.self_time.sum.us'; export const SPAN_ACTION = 'span.action'; export const SPAN_NAME = 'span.name'; export const SPAN_ID = 'span.id'; -export const SPAN_DESTINATION_SERVICE_RESOURCE = - 'span.destination.service.resource'; +export const SPAN_DESTINATION_SERVICE_RESOURCE = 'span.destination.service.resource'; export const SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT = 'span.destination.service.response_time.count'; @@ -93,8 +89,7 @@ export const SPAN_LINKS_SPAN_ID = 'span.links.span.id'; export const SPAN_COMPOSITE_COUNT = 'span.composite.count'; export const SPAN_COMPOSITE_SUM = 'span.composite.sum.us'; -export const SPAN_COMPOSITE_COMPRESSION_STRATEGY = - 'span.composite.compression_strategy'; +export const SPAN_COMPOSITE_COMPRESSION_STRATEGY = 'span.composite.compression_strategy'; export const SPAN_SYNC = 'span.sync'; @@ -119,17 +114,14 @@ export const METRIC_SYSTEM_FREE_MEMORY = 'system.memory.actual.free'; export const METRIC_SYSTEM_TOTAL_MEMORY = 'system.memory.total'; export const METRIC_SYSTEM_CPU_PERCENT = 'system.cpu.total.norm.pct'; export const METRIC_PROCESS_CPU_PERCENT = 'system.process.cpu.total.norm.pct'; -export const METRIC_CGROUP_MEMORY_LIMIT_BYTES = - 'system.process.cgroup.memory.mem.limit.bytes'; -export const METRIC_CGROUP_MEMORY_USAGE_BYTES = - 'system.process.cgroup.memory.mem.usage.bytes'; +export const METRIC_CGROUP_MEMORY_LIMIT_BYTES = 'system.process.cgroup.memory.mem.limit.bytes'; +export const METRIC_CGROUP_MEMORY_USAGE_BYTES = 'system.process.cgroup.memory.mem.usage.bytes'; export const METRIC_JAVA_HEAP_MEMORY_MAX = 'jvm.memory.heap.max'; export const METRIC_JAVA_HEAP_MEMORY_COMMITTED = 'jvm.memory.heap.committed'; export const METRIC_JAVA_HEAP_MEMORY_USED = 'jvm.memory.heap.used'; export const METRIC_JAVA_NON_HEAP_MEMORY_MAX = 'jvm.memory.non_heap.max'; -export const METRIC_JAVA_NON_HEAP_MEMORY_COMMITTED = - 'jvm.memory.non_heap.committed'; +export const METRIC_JAVA_NON_HEAP_MEMORY_COMMITTED = 'jvm.memory.non_heap.committed'; export const METRIC_JAVA_NON_HEAP_MEMORY_USED = 'jvm.memory.non_heap.used'; export const METRIC_JAVA_THREAD_COUNT = 'jvm.thread.count'; export const METRIC_JAVA_GC_COUNT = 'jvm.gc.count'; @@ -169,21 +161,14 @@ export const FAAS_BILLED_DURATION = 'faas.billed_duration'; // OpenTelemetry Metrics export const METRIC_OTEL_SYSTEM_CPU_UTILIZATION = 'system.cpu.utilization'; -export const METRIC_OTEL_SYSTEM_MEMORY_UTILIZATION = - 'system.memory.utilization'; - -export const METRIC_OTEL_JVM_PROCESS_CPU_PERCENT = - 'process.runtime.jvm.cpu.utilization'; -export const METRIC_OTEL_JVM_PROCESS_MEMORY_USAGE = - 'process.runtime.jvm.memory.usage'; -export const METRIC_OTEL_JVM_PROCESS_MEMORY_COMMITTED = - 'process.runtime.jvm.memory.committed'; -export const METRIC_OTEL_JVM_PROCESS_MEMORY_LIMIT = - 'process.runtime.jvm.memory.limit'; -export const METRIC_OTEL_JVM_PROCESS_THREADS_COUNT = - 'process.runtime.jvm.threads.count'; -export const METRIC_OTEL_JVM_SYSTEM_CPU_PERCENT = - 'process.runtime.jvm.system.cpu.utilization'; +export const METRIC_OTEL_SYSTEM_MEMORY_UTILIZATION = 'system.memory.utilization'; + +export const METRIC_OTEL_JVM_PROCESS_CPU_PERCENT = 'process.runtime.jvm.cpu.utilization'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_USAGE = 'process.runtime.jvm.memory.usage'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_COMMITTED = 'process.runtime.jvm.memory.committed'; +export const METRIC_OTEL_JVM_PROCESS_MEMORY_LIMIT = 'process.runtime.jvm.memory.limit'; +export const METRIC_OTEL_JVM_PROCESS_THREADS_COUNT = 'process.runtime.jvm.threads.count'; +export const METRIC_OTEL_JVM_SYSTEM_CPU_PERCENT = 'process.runtime.jvm.system.cpu.utilization'; export const METRIC_OTEL_JVM_GC_DURATION = 'process.runtime.jvm.gc.duration'; export const VALUE_OTEL_JVM_PROCESS_MEMORY_HEAP = 'heap'; export const VALUE_OTEL_JVM_PROCESS_MEMORY_NON_HEAP = 'non_heap'; diff --git a/x-pack/plugins/observability_solution/apm/common/es_fields/es_fields.test.ts b/x-pack/plugins/observability_solution/apm/common/es_fields/es_fields.test.ts index 416a7f6fc39e8..f33fddd430e8d 100644 --- a/x-pack/plugins/observability_solution/apm/common/es_fields/es_fields.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/es_fields/es_fields.test.ts @@ -194,9 +194,7 @@ describe('Error', () => { matchSnapshot(errorDoc); }); -function matchSnapshot( - obj: AllowUnknownProperties -) { +function matchSnapshot(obj: AllowUnknownProperties) { Object.entries(fieldnames).forEach(([key, longKey]) => { const value = get(obj, longKey); it(key, () => { diff --git a/x-pack/plugins/observability_solution/apm/common/fleet.ts b/x-pack/plugins/observability_solution/apm/common/fleet.ts index 5812f438de174..5f64255c7ad54 100644 --- a/x-pack/plugins/observability_solution/apm/common/fleet.ts +++ b/x-pack/plugins/observability_solution/apm/common/fleet.ts @@ -42,22 +42,17 @@ export const INPUT_VAR_NAME_TO_SCHEMA_PATH: Record = { anonymous_enabled: 'apm-server.auth.anonymous.enabled', anonymous_allow_agent: 'apm-server.auth.anonymous.allow_agent', anonymous_allow_service: 'apm-server.auth.anonymous.allow_service', - anonymous_rate_limit_ip_limit: - 'apm-server.auth.anonymous.rate_limit.ip_limit', - anonymous_rate_limit_event_limit: - 'apm-server.auth.anonymous.rate_limit.event_limit', + anonymous_rate_limit_ip_limit: 'apm-server.auth.anonymous.rate_limit.ip_limit', + anonymous_rate_limit_event_limit: 'apm-server.auth.anonymous.rate_limit.event_limit', tail_sampling_enabled: 'apm-server.sampling.tail.enabled', tail_sampling_interval: 'apm-server.sampling.tail.interval', tail_sampling_policies: 'apm-server.sampling.tail.policies', }; export const LEGACY_TO_CURRENT_SCHEMA_PATHS: Record = { - 'apm-server.rum.event_rate.limit': - 'apm-server.auth.anonymous.rate_limit.event_limit', - 'apm-server.rum.event_rate.lru_size': - 'apm-server.auth.anonymous.rate_limit.ip_limit', - 'apm-server.rum.allow_service_names': - 'apm-server.auth.anonymous.allow_service', + 'apm-server.rum.event_rate.limit': 'apm-server.auth.anonymous.rate_limit.event_limit', + 'apm-server.rum.event_rate.lru_size': 'apm-server.auth.anonymous.rate_limit.ip_limit', + 'apm-server.rum.allow_service_names': 'apm-server.auth.anonymous.allow_service', 'apm-server.secret_token': 'apm-server.auth.secret_token', 'apm-server.api_key.enabled': 'apm-server.auth.api_key.enabled', }; diff --git a/x-pack/plugins/observability_solution/apm/common/i18n.ts b/x-pack/plugins/observability_solution/apm/common/i18n.ts index 8bce2acdf4dca..b52bdd582bd10 100644 --- a/x-pack/plugins/observability_solution/apm/common/i18n.ts +++ b/x-pack/plugins/observability_solution/apm/common/i18n.ts @@ -7,9 +7,6 @@ import { i18n } from '@kbn/i18n'; -export const NOT_AVAILABLE_LABEL = i18n.translate( - 'xpack.apm.notAvailableLabel', - { - defaultMessage: 'N/A', - } -); +export const NOT_AVAILABLE_LABEL = i18n.translate('xpack.apm.notAvailableLabel', { + defaultMessage: 'N/A', +}); diff --git a/x-pack/plugins/observability_solution/apm/common/latency_aggregation_types.ts b/x-pack/plugins/observability_solution/apm/common/latency_aggregation_types.ts index 21177d9d1f722..d9466832e4ff2 100644 --- a/x-pack/plugins/observability_solution/apm/common/latency_aggregation_types.ts +++ b/x-pack/plugins/observability_solution/apm/common/latency_aggregation_types.ts @@ -22,6 +22,5 @@ export const latencyAggregationTypeRt = t.union([ export const getLatencyAggregationType = ( latencyAggregationType: string | null | undefined ): LatencyAggregationType => { - return (latencyAggregationType ?? - LatencyAggregationType.avg) as LatencyAggregationType; + return (latencyAggregationType ?? LatencyAggregationType.avg) as LatencyAggregationType; }; diff --git a/x-pack/plugins/observability_solution/apm/common/privilege_type.ts b/x-pack/plugins/observability_solution/apm/common/privilege_type.ts index 4cb7831b42c02..cde4de5565d9f 100644 --- a/x-pack/plugins/observability_solution/apm/common/privilege_type.ts +++ b/x-pack/plugins/observability_solution/apm/common/privilege_type.ts @@ -17,8 +17,5 @@ export enum ClusterPrivilegeType { } export const privilegesTypeRt = t.array( - t.union([ - t.literal(PrivilegeType.EVENT), - t.literal(PrivilegeType.AGENT_CONFIG), - ]) + t.union([t.literal(PrivilegeType.EVENT), t.literal(PrivilegeType.AGENT_CONFIG)]) ); diff --git a/x-pack/plugins/observability_solution/apm/common/rules/apm_rule_types.ts b/x-pack/plugins/observability_solution/apm/common/rules/apm_rule_types.ts index c2712fb972234..fe93b024bb2b8 100644 --- a/x-pack/plugins/observability_solution/apm/common/rules/apm_rule_types.ts +++ b/x-pack/plugins/observability_solution/apm/common/rules/apm_rule_types.ts @@ -7,11 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { ValuesType } from 'utility-types'; -import type { - AsDuration, - AsPercent, - TimeUnitChar, -} from '@kbn/observability-plugin/common'; +import type { AsDuration, AsPercent, TimeUnitChar } from '@kbn/observability-plugin/common'; import type { ActionGroup } from '@kbn/alerting-plugin/common'; import { formatDurationFromTimeUnitChar } from '@kbn/observability-plugin/common'; import { ML_ANOMALY_SEVERITY } from '@kbn/ml-anomaly-utils/anomaly_severity'; @@ -64,22 +60,13 @@ const getFieldNameLabel = (field: string): string => { } }; -export const getFieldValueLabel = ( - field: string, - fieldValue: string -): string => { - return field === SERVICE_ENVIRONMENT - ? getEnvironmentLabel(fieldValue) - : fieldValue; +export const getFieldValueLabel = (field: string, fieldValue: string): string => { + return field === SERVICE_ENVIRONMENT ? getEnvironmentLabel(fieldValue) : fieldValue; }; const formatGroupByFields = (groupByFields: Record): string => { const groupByFieldLabels = Object.keys(groupByFields).map( - (field) => - `${getFieldNameLabel(field)}: ${getFieldValueLabel( - field, - groupByFields[field] - )}` + (field) => `${getFieldNameLabel(field)}: ${getFieldValueLabel(field, groupByFields[field])}` ); return groupByFieldLabels.join(', '); }; @@ -102,10 +89,7 @@ export function formatErrorCountReason({ values: { threshold, measured, - interval: formatDurationFromTimeUnitChar( - windowSize, - windowUnit as TimeUnitChar - ), + interval: formatDurationFromTimeUnitChar(windowSize, windowUnit as TimeUnitChar), group: formatGroupByFields(groupByFields), }, }); @@ -128,10 +112,8 @@ export function formatTransactionDurationReason({ windowUnit: string; groupByFields: Record; }) { - let aggregationTypeFormatted = - aggregationType.charAt(0).toUpperCase() + aggregationType.slice(1); - if (aggregationTypeFormatted === 'Avg') - aggregationTypeFormatted = aggregationTypeFormatted + '.'; + let aggregationTypeFormatted = aggregationType.charAt(0).toUpperCase() + aggregationType.slice(1); + if (aggregationTypeFormatted === 'Avg') aggregationTypeFormatted = aggregationTypeFormatted + '.'; return i18n.translate('xpack.apm.alertTypes.transactionDuration.reason', { defaultMessage: `{aggregationType} latency is {measured} in the last {interval} for {group}. Alert when > {threshold}.`, @@ -139,10 +121,7 @@ export function formatTransactionDurationReason({ threshold: asDuration(threshold), measured: asDuration(measured), aggregationType: aggregationTypeFormatted, - interval: formatDurationFromTimeUnitChar( - windowSize, - windowUnit as TimeUnitChar - ), + interval: formatDurationFromTimeUnitChar(windowSize, windowUnit as TimeUnitChar), group: formatGroupByFields(groupByFields), }, }); @@ -168,10 +147,7 @@ export function formatTransactionErrorRateReason({ values: { threshold: asPercent(threshold, 100), measured: asPercent(measured, 100), - interval: formatDurationFromTimeUnitChar( - windowSize, - windowUnit as TimeUnitChar - ), + interval: formatDurationFromTimeUnitChar(windowSize, windowUnit as TimeUnitChar), group: formatGroupByFields(groupByFields), }, }); @@ -192,22 +168,16 @@ export function formatAnomalyReason({ windowUnit: string; detectorType: AnomalyDetectorType; }) { - return i18n.translate( - 'xpack.apm.alertTypes.transactionDurationAnomaly.reason', - { - defaultMessage: `{severityLevel} {detectorTypeLabel} anomaly with a score of {anomalyScore}, was detected in the last {interval} for {serviceName}.`, - values: { - serviceName, - severityLevel, - detectorTypeLabel: getApmMlDetectorLabel(detectorType), - anomalyScore, - interval: formatDurationFromTimeUnitChar( - windowSize, - windowUnit as TimeUnitChar - ), - }, - } - ); + return i18n.translate('xpack.apm.alertTypes.transactionDurationAnomaly.reason', { + defaultMessage: `{severityLevel} {detectorTypeLabel} anomaly with a score of {anomalyScore}, was detected in the last {interval} for {serviceName}.`, + values: { + serviceName, + severityLevel, + detectorTypeLabel: getApmMlDetectorLabel(detectorType), + anomalyScore, + interval: formatDurationFromTimeUnitChar(windowSize, windowUnit as TimeUnitChar), + }, + }); } export const RULE_TYPES_CONFIG: Record< @@ -294,9 +264,7 @@ export const ANOMALY_ALERT_SEVERITY_TYPES = [ }, ] as const; -export type AnomalyAlertSeverityType = ValuesType< - typeof ANOMALY_ALERT_SEVERITY_TYPES ->['type']; +export type AnomalyAlertSeverityType = ValuesType['type']; export function getApmMlDetectorLabel(type: AnomalyDetectorType) { switch (type) { @@ -305,19 +273,13 @@ export function getApmMlDetectorLabel(type: AnomalyDetectorType) { defaultMessage: 'latency', }); case AnomalyDetectorType.txThroughput: - return i18n.translate( - 'xpack.apm.alerts.anomalyDetector.throughputLabel', - { - defaultMessage: 'throughput', - } - ); + return i18n.translate('xpack.apm.alerts.anomalyDetector.throughputLabel', { + defaultMessage: 'throughput', + }); case AnomalyDetectorType.txFailureRate: - return i18n.translate( - 'xpack.apm.alerts.anomalyDetector.failedTransactionRateLabel', - { - defaultMessage: 'failed transaction rate', - } - ); + return i18n.translate('xpack.apm.alerts.anomalyDetector.failedTransactionRateLabel', { + defaultMessage: 'failed transaction rate', + }); } } diff --git a/x-pack/plugins/observability_solution/apm/common/rules/get_all_groupby_fields.ts b/x-pack/plugins/observability_solution/apm/common/rules/get_all_groupby_fields.ts index 055fb1984defe..c94ea1ba75887 100644 --- a/x-pack/plugins/observability_solution/apm/common/rules/get_all_groupby_fields.ts +++ b/x-pack/plugins/observability_solution/apm/common/rules/get_all_groupby_fields.ts @@ -7,11 +7,7 @@ import { union } from 'lodash'; import { ApmRuleType } from '@kbn/rule-data-utils'; -import { - SERVICE_ENVIRONMENT, - SERVICE_NAME, - TRANSACTION_TYPE, -} from '../es_fields/apm'; +import { SERVICE_ENVIRONMENT, SERVICE_NAME, TRANSACTION_TYPE } from '../es_fields/apm'; export const getAllGroupByFields = ( ruleType: string, @@ -22,11 +18,7 @@ export const getAllGroupByFields = ( switch (ruleType) { case ApmRuleType.TransactionDuration: case ApmRuleType.TransactionErrorRate: - predefinedGroupByFields = [ - SERVICE_NAME, - SERVICE_ENVIRONMENT, - TRANSACTION_TYPE, - ]; + predefinedGroupByFields = [SERVICE_NAME, SERVICE_ENVIRONMENT, TRANSACTION_TYPE]; break; case ApmRuleType.ErrorCount: predefinedGroupByFields = [SERVICE_NAME, SERVICE_ENVIRONMENT]; diff --git a/x-pack/plugins/observability_solution/apm/common/rules/schema.ts b/x-pack/plugins/observability_solution/apm/common/rules/schema.ts index ffe2e69d5262e..0e6b0c166a688 100644 --- a/x-pack/plugins/observability_solution/apm/common/rules/schema.ts +++ b/x-pack/plugins/observability_solution/apm/common/rules/schema.ts @@ -13,10 +13,7 @@ import { AggregationType } from './apm_rule_types'; export const searchConfigurationSchema = schema.object({ query: schema.object({ - query: schema.oneOf([ - schema.string(), - schema.recordOf(schema.string(), schema.any()), - ]), + query: schema.oneOf([schema.string(), schema.recordOf(schema.string(), schema.any())]), language: schema.string(), }), }); @@ -69,7 +66,7 @@ export const anomalyParamsSchema = schema.object({ schema.literal(ML_ANOMALY_SEVERITY.MINOR), schema.literal(ML_ANOMALY_SEVERITY.WARNING), ]), - anomalyDetectorTypes: schema.arrayOf(detectorsSchema, { minSize: 1 }), + anomalyDetectorTypes: schema.maybe(schema.arrayOf(detectorsSchema, { minSize: 1 })), }); export const transactionErrorRateParamsSchema = schema.object({ @@ -86,13 +83,9 @@ export const transactionErrorRateParamsSchema = schema.object({ }); type ErrorCountParamsType = TypeOf; -type TransactionDurationParamsType = TypeOf< - typeof transactionDurationParamsSchema ->; +type TransactionDurationParamsType = TypeOf; type AnomalyParamsType = TypeOf; -type TransactionErrorRateParamsType = TypeOf< - typeof transactionErrorRateParamsSchema ->; +type TransactionErrorRateParamsType = TypeOf; export type SearchConfigurationType = TypeOf; diff --git a/x-pack/plugins/observability_solution/apm/common/serverless.test.ts b/x-pack/plugins/observability_solution/apm/common/serverless.test.ts index 5473e9d735d86..e422dea4ac6fe 100644 --- a/x-pack/plugins/observability_solution/apm/common/serverless.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/serverless.test.ts @@ -13,14 +13,10 @@ describe('getServerlessFunctionNameFromId', () => { it('returns correct serverless function name', () => { expect( - getServerlessFunctionNameFromId( - 'arn:aws:lambda:us-west-2:123456789012:function:my-function' - ) + getServerlessFunctionNameFromId('arn:aws:lambda:us-west-2:123456789012:function:my-function') ).toEqual('my-function'); expect( - getServerlessFunctionNameFromId( - 'arn:aws:lambda:us-west-2:123456789012:function:my:function' - ) + getServerlessFunctionNameFromId('arn:aws:lambda:us-west-2:123456789012:function:my:function') ).toEqual('my:function'); }); }); diff --git a/x-pack/plugins/observability_solution/apm/common/serverless.ts b/x-pack/plugins/observability_solution/apm/common/serverless.ts index 42f2844e1c6ec..e6e91937f96fb 100644 --- a/x-pack/plugins/observability_solution/apm/common/serverless.ts +++ b/x-pack/plugins/observability_solution/apm/common/serverless.ts @@ -25,17 +25,11 @@ export function getServerlessTypeFromCloudData( cloudProvider?: string, cloudServiceName?: string ): ServerlessType | undefined { - if ( - cloudProvider?.toLowerCase() === 'aws' && - cloudServiceName?.toLowerCase() === 'lambda' - ) { + if (cloudProvider?.toLowerCase() === 'aws' && cloudServiceName?.toLowerCase() === 'lambda') { return ServerlessType.AWS_LAMBDA; } - if ( - cloudProvider?.toLowerCase() === 'azure' && - cloudServiceName?.toLowerCase() === 'functions' - ) { + if (cloudProvider?.toLowerCase() === 'azure' && cloudServiceName?.toLowerCase() === 'functions') { return ServerlessType.AZURE_FUNCTIONS; } } diff --git a/x-pack/plugins/observability_solution/apm/common/service_groups.test.ts b/x-pack/plugins/observability_solution/apm/common/service_groups.test.ts index 28c9120338ad5..0fbe784603ca2 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_groups.test.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_groups.test.ts @@ -10,11 +10,7 @@ import { validateServiceGroupKuery, SERVICE_GROUP_SUPPORTED_FIELDS, } from './service_groups'; -import { - TRANSACTION_TYPE, - TRANSACTION_DURATION, - SERVICE_FRAMEWORK_VERSION, -} from './es_fields/apm'; +import { TRANSACTION_TYPE, TRANSACTION_DURATION, SERVICE_FRAMEWORK_VERSION } from './es_fields/apm'; describe('service_groups common utils', () => { describe('isSupportedField', () => { @@ -24,11 +20,7 @@ describe('service_groups common utils', () => { }); }); it('should reject unsupported fields', () => { - const unsupportedFields = [ - TRANSACTION_TYPE, - TRANSACTION_DURATION, - SERVICE_FRAMEWORK_VERSION, - ]; + const unsupportedFields = [TRANSACTION_TYPE, TRANSACTION_DURATION, SERVICE_FRAMEWORK_VERSION]; unsupportedFields.map((field) => { expect(isSupportedField(field)).toBe(false); }); @@ -36,9 +28,7 @@ describe('service_groups common utils', () => { }); describe('validateServiceGroupKuery', () => { it('should validate supported KQL filter for a service group', () => { - const result = validateServiceGroupKuery( - `service.name: testbeans* or agent.name: "nodejs"` - ); + const result = validateServiceGroupKuery(`service.name: testbeans* or agent.name: "nodejs"`); expect(result).toHaveProperty('isValidFields', true); expect(result).toHaveProperty('isValidSyntax', true); expect(result).not.toHaveProperty('message'); @@ -55,9 +45,7 @@ describe('service_groups common utils', () => { ); }); it('should return parsing error when KQL is incomplete', () => { - const result = validateServiceGroupKuery( - `service.name: testbeans* or agent.name: "nod` - ); + const result = validateServiceGroupKuery(`service.name: testbeans* or agent.name: "nod`); expect(result).toHaveProperty('isValidFields', false); expect(result).toHaveProperty('isValidSyntax', false); expect(result).toHaveProperty('message'); diff --git a/x-pack/plugins/observability_solution/apm/common/service_groups.ts b/x-pack/plugins/observability_solution/apm/common/service_groups.ts index 382ef0f59a137..b93ecffc2ab5b 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_groups.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_groups.ts @@ -42,10 +42,7 @@ export const SERVICE_GROUP_SUPPORTED_FIELDS = [ ]; export function isSupportedField(fieldName: string) { - return ( - fieldName.startsWith(LABELS) || - SERVICE_GROUP_SUPPORTED_FIELDS.includes(fieldName) - ); + return fieldName.startsWith(LABELS) || SERVICE_GROUP_SUPPORTED_FIELDS.includes(fieldName); } export function validateServiceGroupKuery(kuery: string): { @@ -55,9 +52,7 @@ export function validateServiceGroupKuery(kuery: string): { } { try { const kueryFields = getKueryFields([fromKueryExpression(kuery)]); - const unsupportedKueryFields = kueryFields.filter( - (fieldName) => !isSupportedField(fieldName) - ); + const unsupportedKueryFields = kueryFields.filter((fieldName) => !isSupportedField(fieldName)); if (unsupportedKueryFields.length === 0) { return { isValidFields: true, isValidSyntax: true }; } diff --git a/x-pack/plugins/observability_solution/apm/common/service_health_status.ts b/x-pack/plugins/observability_solution/apm/common/service_health_status.ts index 77964d78c7450..7f5530aa7fa05 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_health_status.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_health_status.ts @@ -16,11 +16,7 @@ export enum ServiceHealthStatus { unknown = 'unknown', } -export function getServiceHealthStatus({ - severity, -}: { - severity: ML_ANOMALY_SEVERITY; -}) { +export function getServiceHealthStatus({ severity }: { severity: ML_ANOMALY_SEVERITY }) { switch (severity) { case ML_ANOMALY_SEVERITY.CRITICAL: case ML_ANOMALY_SEVERITY.MAJOR: @@ -38,10 +34,7 @@ export function getServiceHealthStatus({ } } -export function getServiceHealthStatusColor( - theme: EuiTheme, - status: ServiceHealthStatus -) { +export function getServiceHealthStatusColor(theme: EuiTheme, status: ServiceHealthStatus) { switch (status) { case ServiceHealthStatus.healthy: return theme.eui.euiColorVis0; @@ -54,10 +47,7 @@ export function getServiceHealthStatusColor( } } -export function getServiceHealthStatusBadgeColor( - theme: EuiTheme, - status: ServiceHealthStatus -) { +export function getServiceHealthStatusBadgeColor(theme: EuiTheme, status: ServiceHealthStatus) { switch (status) { case ServiceHealthStatus.healthy: return theme.eui.euiColorVis0_behindText; diff --git a/x-pack/plugins/observability_solution/apm/common/service_map.ts b/x-pack/plugins/observability_solution/apm/common/service_map.ts index fb2fa7fae6540..c4ac295206396 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_map.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_map.ts @@ -84,13 +84,10 @@ export interface NodeStats { }; } -export const invalidLicenseMessage = i18n.translate( - 'xpack.apm.serviceMap.invalidLicenseMessage', - { - defaultMessage: - "In order to access Service Maps, you must be subscribed to an Elastic Platinum license. With it, you'll have the ability to visualize your entire application stack along with your APM data.", - } -); +export const invalidLicenseMessage = i18n.translate('xpack.apm.serviceMap.invalidLicenseMessage', { + defaultMessage: + "In order to access Service Maps, you must be subscribed to an Elastic Platinum license. With it, you'll have the ability to visualize your entire application stack along with your APM data.", +}); const NONGROUPED_SPANS: Record = { aws: ['servicename'], @@ -106,8 +103,7 @@ export function isSpanGroupingSupported(type?: string, subtype?: string) { return true; } return !NONGROUPED_SPANS[type].some( - (nongroupedSubType) => - nongroupedSubType === 'all' || nongroupedSubType === subtype + (nongroupedSubType) => nongroupedSubType === 'all' || nongroupedSubType === subtype ); } diff --git a/x-pack/plugins/observability_solution/apm/common/service_nodes.ts b/x-pack/plugins/observability_solution/apm/common/service_nodes.ts index ad75bd025069d..e650f37e9ab74 100644 --- a/x-pack/plugins/observability_solution/apm/common/service_nodes.ts +++ b/x-pack/plugins/observability_solution/apm/common/service_nodes.ts @@ -9,12 +9,9 @@ import { i18n } from '@kbn/i18n'; export const SERVICE_NODE_NAME_MISSING = '_service_node_name_missing_'; -const UNIDENTIFIED_SERVICE_NODES_LABEL = i18n.translate( - 'xpack.apm.serviceNodeNameMissing', - { - defaultMessage: '(Empty)', - } -); +const UNIDENTIFIED_SERVICE_NODES_LABEL = i18n.translate('xpack.apm.serviceNodeNameMissing', { + defaultMessage: '(Empty)', +}); export function getServiceNodeName(serviceNodeName?: string) { return serviceNodeName === SERVICE_NODE_NAME_MISSING || !serviceNodeName diff --git a/x-pack/plugins/observability_solution/apm/common/time_range_metadata.ts b/x-pack/plugins/observability_solution/apm/common/time_range_metadata.ts index ff6d80ca1c745..f13ab5a89d6d1 100644 --- a/x-pack/plugins/observability_solution/apm/common/time_range_metadata.ts +++ b/x-pack/plugins/observability_solution/apm/common/time_range_metadata.ts @@ -9,7 +9,5 @@ import { ApmDataSource } from './data_source'; export interface TimeRangeMetadata { isUsingServiceDestinationMetrics: boolean; - sources: Array< - ApmDataSource & { hasDocs: boolean; hasDurationSummaryField: boolean } - >; + sources: Array; } diff --git a/x-pack/plugins/observability_solution/apm/common/tutorial/instructions/apm_agent_instructions.ts b/x-pack/plugins/observability_solution/apm/common/tutorial/instructions/apm_agent_instructions.ts index 56f8a179fb302..ff3d89a9f98ec 100644 --- a/x-pack/plugins/observability_solution/apm/common/tutorial/instructions/apm_agent_instructions.ts +++ b/x-pack/plugins/observability_solution/apm/common/tutorial/instructions/apm_agent_instructions.ts @@ -7,17 +7,13 @@ import { i18n } from '@kbn/i18n'; -export const createNodeAgentInstructions = ( - apmServerUrl = '', - secretToken = '' -) => [ +export const createNodeAgentInstructions = (apmServerUrl = '', secretToken = '') => [ { title: i18n.translate('xpack.apm.tutorial.nodeClient.install.title', { defaultMessage: 'Install the APM agent', }), textPre: i18n.translate('xpack.apm.tutorial.nodeClient.install.textPre', { - defaultMessage: - 'Install the APM agent for Node.js as a dependency to your application.', + defaultMessage: 'Install the APM agent for Node.js as a dependency to your application.', }), commands: ['npm install elastic-apm-node --save'], }, @@ -32,27 +28,20 @@ APM services are created programmatically based on the `serviceName`. \ This agent supports a variety of frameworks but can also be used with your custom stack.', }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.nodeClient.configure.textPost', - { - defaultMessage: - 'See [the documentation]({documentationLink}) for advanced usage, including how to use with \ + textPost: i18n.translate('xpack.apm.tutorial.nodeClient.configure.textPost', { + defaultMessage: + 'See [the documentation]({documentationLink}) for advanced usage, including how to use with \ [Babel/ES Modules]({babelEsModulesLink}).', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/agent/nodejs/current/index.html', - babelEsModulesLink: - '{config.docs.base_url}guide/en/apm/agent/nodejs/current/advanced-setup.html#es-modules', - }, - } - ), + values: { + documentationLink: '{config.docs.base_url}guide/en/apm/agent/nodejs/current/index.html', + babelEsModulesLink: + '{config.docs.base_url}guide/en/apm/agent/nodejs/current/advanced-setup.html#es-modules', + }, + }), }, ]; -export const createDjangoAgentInstructions = ( - apmServerUrl = '', - secretToken = '' -) => [ +export const createDjangoAgentInstructions = (apmServerUrl = '', secretToken = '') => [ { title: i18n.translate('xpack.apm.tutorial.djangoClient.install.title', { defaultMessage: 'Install the APM agent', @@ -66,33 +55,23 @@ export const createDjangoAgentInstructions = ( title: i18n.translate('xpack.apm.tutorial.djangoClient.configure.title', { defaultMessage: 'Configure the agent', }), - textPre: i18n.translate( - 'xpack.apm.tutorial.djangoClient.configure.textPre', - { - defaultMessage: - 'Agents are libraries that run inside of your application process. \ + textPre: i18n.translate('xpack.apm.tutorial.djangoClient.configure.textPre', { + defaultMessage: + 'Agents are libraries that run inside of your application process. \ APM services are created programmatically based on the `SERVICE_NAME`.', - } - ), + }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.djangoClient.configure.textPost', - { - defaultMessage: - 'See the [documentation]({documentationLink}) for advanced usage.', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/agent/python/current/django-support.html', - }, - } - ), + textPost: i18n.translate('xpack.apm.tutorial.djangoClient.configure.textPost', { + defaultMessage: 'See the [documentation]({documentationLink}) for advanced usage.', + values: { + documentationLink: + '{config.docs.base_url}guide/en/apm/agent/python/current/django-support.html', + }, + }), }, ]; -export const createFlaskAgentInstructions = ( - apmServerUrl = '', - secretToken = '' -) => [ +export const createFlaskAgentInstructions = (apmServerUrl = '', secretToken = '') => [ { title: i18n.translate('xpack.apm.tutorial.flaskClient.install.title', { defaultMessage: 'Install the APM agent', @@ -106,33 +85,23 @@ export const createFlaskAgentInstructions = ( title: i18n.translate('xpack.apm.tutorial.flaskClient.configure.title', { defaultMessage: 'Configure the agent', }), - textPre: i18n.translate( - 'xpack.apm.tutorial.flaskClient.configure.textPre', - { - defaultMessage: - 'Agents are libraries that run inside of your application process. \ + textPre: i18n.translate('xpack.apm.tutorial.flaskClient.configure.textPre', { + defaultMessage: + 'Agents are libraries that run inside of your application process. \ APM services are created programmatically based on the `SERVICE_NAME`.', - } - ), + }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.flaskClient.configure.textPost', - { - defaultMessage: - 'See the [documentation]({documentationLink}) for advanced usage.', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/agent/python/current/flask-support.html', - }, - } - ), + textPost: i18n.translate('xpack.apm.tutorial.flaskClient.configure.textPost', { + defaultMessage: 'See the [documentation]({documentationLink}) for advanced usage.', + values: { + documentationLink: + '{config.docs.base_url}guide/en/apm/agent/python/current/flask-support.html', + }, + }), }, ]; -export const createRailsAgentInstructions = ( - apmServerUrl = '', - secretToken = '' -) => [ +export const createRailsAgentInstructions = (apmServerUrl = '', secretToken = '') => [ { title: i18n.translate('xpack.apm.tutorial.railsClient.install.title', { defaultMessage: 'Install the APM agent', @@ -146,33 +115,23 @@ export const createRailsAgentInstructions = ( title: i18n.translate('xpack.apm.tutorial.railsClient.configure.title', { defaultMessage: 'Configure the agent', }), - textPre: i18n.translate( - 'xpack.apm.tutorial.railsClient.configure.textPre', - { - defaultMessage: - 'APM is automatically started when your app boots. Configure the agent, by creating the config file {configFile}', - values: { configFile: '`config/elastic_apm.yml`' }, - } - ), + textPre: i18n.translate('xpack.apm.tutorial.railsClient.configure.textPre', { + defaultMessage: + 'APM is automatically started when your app boots. Configure the agent, by creating the config file {configFile}', + values: { configFile: '`config/elastic_apm.yml`' }, + }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.railsClient.configure.textPost', - { - defaultMessage: - 'See the [documentation]({documentationLink}) for configuration options and advanced usage.\n\n', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/agent/ruby/current/index.html', - }, - } - ), + textPost: i18n.translate('xpack.apm.tutorial.railsClient.configure.textPost', { + defaultMessage: + 'See the [documentation]({documentationLink}) for configuration options and advanced usage.\n\n', + values: { + documentationLink: '{config.docs.base_url}guide/en/apm/agent/ruby/current/index.html', + }, + }), }, ]; -export const createRackAgentInstructions = ( - apmServerUrl = '', - secretToken = '' -) => [ +export const createRackAgentInstructions = (apmServerUrl = '', secretToken = '') => [ { title: i18n.translate('xpack.apm.tutorial.rackClient.install.title', { defaultMessage: 'Install the APM agent', @@ -222,78 +181,56 @@ export const createRackAgentInstructions = ( title: i18n.translate('xpack.apm.tutorial.rackClient.createConfig.title', { defaultMessage: 'Create config file', }), - textPre: i18n.translate( - 'xpack.apm.tutorial.rackClient.createConfig.textPre', - { - defaultMessage: 'Create a config file {configFile}:', - values: { configFile: '`config/elastic_apm.yml`' }, - } - ), + textPre: i18n.translate('xpack.apm.tutorial.rackClient.createConfig.textPre', { + defaultMessage: 'Create a config file {configFile}:', + values: { configFile: '`config/elastic_apm.yml`' }, + }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.rackClient.createConfig.textPost', - { - defaultMessage: - 'See the [documentation]({documentationLink}) for configuration options and advanced usage.\n\n', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/agent/ruby/current/index.html', - }, - } - ), + textPost: i18n.translate('xpack.apm.tutorial.rackClient.createConfig.textPost', { + defaultMessage: + 'See the [documentation]({documentationLink}) for configuration options and advanced usage.\n\n', + values: { + documentationLink: '{config.docs.base_url}guide/en/apm/agent/ruby/current/index.html', + }, + }), }, ]; export const createJsAgentInstructions = (apmServerUrl = '') => [ { - title: i18n.translate( - 'xpack.apm.tutorial.jsClient.enableRealUserMonitoring.title', - { - defaultMessage: 'Enable Real User Monitoring support in APM Server', - } - ), - textPre: i18n.translate( - 'xpack.apm.tutorial.jsClient.enableRealUserMonitoring.textPre', - { - defaultMessage: - 'APM Server disables RUM support by default. See the [documentation]({documentationLink}) \ + title: i18n.translate('xpack.apm.tutorial.jsClient.enableRealUserMonitoring.title', { + defaultMessage: 'Enable Real User Monitoring support in APM Server', + }), + textPre: i18n.translate('xpack.apm.tutorial.jsClient.enableRealUserMonitoring.textPre', { + defaultMessage: + 'APM Server disables RUM support by default. See the [documentation]({documentationLink}) \ for details on how to enable RUM support. When using the APM integration with Fleet, RUM support is automatically enabled.', - values: { - documentationLink: - '{config.docs.base_url}guide/en/apm/guide/{config.docs.version}/configuration-rum.html', - }, - } - ), + values: { + documentationLink: + '{config.docs.base_url}guide/en/apm/guide/{config.docs.version}/configuration-rum.html', + }, + }), }, { - title: i18n.translate( - 'xpack.apm.tutorial.jsClient.installDependency.title', - { - defaultMessage: 'Set up the Agent as a dependency', - } - ), - textPre: i18n.translate( - 'xpack.apm.tutorial.jsClient.installDependency.textPre', - { - defaultMessage: - 'You can install the Agent as a dependency to your application with \ + title: i18n.translate('xpack.apm.tutorial.jsClient.installDependency.title', { + defaultMessage: 'Set up the Agent as a dependency', + }), + textPre: i18n.translate('xpack.apm.tutorial.jsClient.installDependency.textPre', { + defaultMessage: + 'You can install the Agent as a dependency to your application with \ `npm install @elastic/apm-rum --save`.\n\n\ The Agent can then be initialized and configured in your application like this:', - } - ), + }), customComponentName: 'TutorialConfigAgent', - textPost: i18n.translate( - 'xpack.apm.tutorial.jsClient.installDependency.textPost', - { - defaultMessage: - 'Framework integrations, like React or Angular, have custom dependencies. \ + textPost: i18n.translate('xpack.apm.tutorial.jsClient.installDependency.textPost', { + defaultMessage: + 'Framework integrations, like React or Angular, have custom dependencies. \ See the [integration documentation]({docLink}) for more information.', - values: { - docLink: - '{config.docs.base_url}guide/en/apm/agent/rum-js/current/framework-integrations.html', - }, - } - ), + values: { + docLink: + '{config.docs.base_url}guide/en/apm/agent/rum-js/current/framework-integrations.html', + }, + }), }, { title: i18n.translate('xpack.apm.tutorial.jsClient.scriptTags.title', { @@ -306,20 +243,15 @@ Add a `
; }; - return FilterGroup; -} + return Component as unknown as typeof AlertFilterControls; +}; diff --git a/packages/kbn-alerts-ui-shared/src/alert_filter_controls/translations.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/translations.ts new file mode 100644 index 0000000000000..124d75792dff5 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/translations.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const PENDING_CHANGES_REMINDER = i18n.translate( + 'alertsUIShared.filtersGroup.pendingChanges', + { + defaultMessage: 'Save pending changes', + } +); + +export const EDIT_CONTROLS = i18n.translate( + 'alertsUIShared.filtersGroup.contextMenu.editControls', + { + defaultMessage: 'Edit Controls', + } +); + +export const ADD_CONTROLS = i18n.translate('alertsUIShared.filtersGroup.contextMenu.addControls', { + defaultMessage: 'Add Controls', +}); + +export const SAVE_CONTROLS = i18n.translate( + 'alertsUIShared.filtersGroup.contextMenu.saveControls', + { + defaultMessage: 'Save Controls', + } +); + +export const DISCARD_CHANGES = i18n.translate('alertsUIShared.filtersGroup.discardChanges', { + defaultMessage: 'Discard Changes', +}); + +export const FILTER_GROUP_MENU = i18n.translate('alertsUIShared.filterGroup.groupMenuTitle', { + defaultMessage: 'Filter group menu', +}); + +export const FILTER_GROUP_BANNER_TITLE = i18n.translate( + 'alertsUIShared.filterGroup.filtersChangedBanner', + { + defaultMessage: 'Filter Controls have changed', + } +); + +export const FILTER_GROUP_BANNER_MESSAGE = i18n.translate( + 'alertsUIShared.filterGroup.filtersChangedTitle', + { + defaultMessage: `New filter controls on this page are different from what you have previously saved. You can either save the changes or discard them. + Navigating away will automatically discard these changes`, + } +); + +export const CONTEXT_MENU_RESET_TOOLTIP = i18n.translate( + 'alertsUIShared.filterGroup.contextMenu.resetTooltip', + { + defaultMessage: 'Reset Controls to factory settings', + } +); + +export const CONTEXT_MENU_RESET = i18n.translate('alertsUIShared.filterGroup.contextMenu.reset', { + defaultMessage: 'Reset Controls', +}); + +export const SAVE_CHANGES = i18n.translate('alertsUIShared.filtersGroup.contextMenu.saveChanges', { + defaultMessage: 'Save Changes', +}); + +export const REVERT_CHANGES = i18n.translate( + 'alertsUIShared.filtersGroup.contextMenu.revertChanges', + { + defaultMessage: 'Revert Changes', + } +); + +export const ADD_CONTROLS_MAX_LIMIT = i18n.translate( + 'alertsUIShared.filtersGroup.contextMenu.addControls.maxLimit', + { + defaultMessage: 'Maximum of 4 controls can be added.', + } +); + +export const URL_PARAM_ARRAY_EXCEPTION_MSG = i18n.translate( + 'alertsUIShared.filtersGroup.urlParam.arrayError', + { + defaultMessage: 'Page filter URL Params must be an array', + } +); diff --git a/packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts new file mode 100644 index 0000000000000..75dcad2acb5c2 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts @@ -0,0 +1,73 @@ +/* + * Copyright 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 { ControlGroupInput, OptionsListEmbeddableInput } from '@kbn/controls-plugin/common'; +import type { + AddOptionsListControlProps, + ControlGroupContainer, +} from '@kbn/controls-plugin/public'; +import type { Filter } from '@kbn/es-query'; +import type { ControlGroupRenderer } from '@kbn/controls-plugin/public'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; +import { AlertConsumers } from '@kbn/rule-data-utils'; + +export type FilterUrlFormat = Record< + string, + Pick< + OptionsListEmbeddableInput, + 'selectedOptions' | 'title' | 'fieldName' | 'existsSelected' | 'exclude' + > +>; + +export interface FilterContextType { + allControls: FilterControlConfig[] | undefined; + addControl: (controls: FilterControlConfig) => void; +} + +export type FilterControlConfig = Omit & { + /* + * Determines the presence and order of a control + * */ + persist?: boolean; +}; + +export type FilterGroupHandler = ControlGroupContainer; + +export interface FilterGroupProps + extends Pick { + spaceId?: string; + dataViewId: string | null; + featureIds: AlertConsumers[]; + /** + * Filters changed callback + */ + onFiltersChange?: (newFilters: Filter[]) => void; + defaultControls: FilterControlConfig[]; + /** + * The controls configuration stored in the URL + * (takes precedence over the localStorage configuration) + */ + controlsUrlState?: FilterControlConfig[]; + /** + * Setter for the controls url state + */ + setControlsUrlState?: (controls: FilterControlConfig[]) => void; + /** + * Init callback + */ + onInit?: (controlGroupHandler: FilterGroupHandler | undefined) => void; + /** + * Maximum number of controls that can be added to the group + */ + maxControls?: number; + /** + * The control embeddable renderer + */ + ControlGroupRenderer: typeof ControlGroupRenderer; + Storage: typeof Storage; +} diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/utils.test.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.test.ts similarity index 90% rename from x-pack/plugins/security_solution/public/common/components/filter_group/utils.test.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.test.ts index f2f860710ac84..6d6c0b4d51f34 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/utils.test.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.test.ts @@ -1,11 +1,12 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ -import type { ControlGroupInput } from '@kbn/controls-plugin/common'; +import { ControlGroupInput, OptionsListEmbeddableInput } from '@kbn/controls-plugin/common'; import { getFilterItemObjListFromControlInput, mergeControls, @@ -13,10 +14,10 @@ import { getFilterControlsComparator, } from './utils'; import { initialInputData } from './mocks/data'; -import type { FilterItemObj } from './types'; +import type { FilterControlConfig } from './types'; import { isEqualWith } from 'lodash'; -const defaultControls: FilterItemObj[] = [ +const defaultControls: FilterControlConfig[] = [ { fieldName: 'first', hideActionBar: true, @@ -31,14 +32,14 @@ const defaultControls: FilterItemObj[] = [ }, ]; -const firstControlsSet: FilterItemObj[] = [ +const firstControlsSet: FilterControlConfig[] = [ { fieldName: 'first', selectedOptions: ['firstVal'], }, ]; -const secondControlsSet: FilterItemObj[] = [ +const secondControlsSet: FilterControlConfig[] = [ { fieldName: 'first', selectedOptions: ['secondVal1', 'secondVal2'], @@ -51,19 +52,19 @@ const secondControlsSet: FilterItemObj[] = [ }, ]; -const thirdControlsSet: FilterItemObj[] = [ +const thirdControlsSet: FilterControlConfig[] = [ { fieldName: 'new', selectedOptions: [], }, ]; -const emptyControlSet: FilterItemObj[] = []; +const emptyControlSet: FilterControlConfig[] = []; const defaultControlsObj = defaultControls.reduce((prev, current) => { prev[current.fieldName] = current; return prev; -}, {} as Record); +}, {} as Record); describe('utils', () => { describe('getFilterItemObjListFromControlOutput', () => { it('should return ordered filterItem where passed in order', () => { @@ -97,7 +98,7 @@ describe('utils', () => { newInputData as ControlGroupInput ); - let panelObj = newInputData.panels['1'].explicitInput; + let panelObj = newInputData.panels['1'].explicitInput as OptionsListEmbeddableInput; expect(filterItemObjList[0]).toMatchObject({ fieldName: panelObj.fieldName, selectedOptions: panelObj.selectedOptions, @@ -181,7 +182,7 @@ describe('utils', () => { describe('reorderControls', () => { it('should add persist controls in order if they are not available in the given controls', () => { - const newControlsSet: FilterItemObj[] = [ + const newControlsSet: FilterControlConfig[] = [ { fieldName: 'new', }, @@ -207,7 +208,7 @@ describe('utils', () => { expect(result).toMatchObject(expectedResult); }); it('should change controls order if they are available in the given controls', () => { - const newControlsSet: FilterItemObj[] = [ + const newControlsSet: FilterControlConfig[] = [ { fieldName: 'new', }, diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/utils.ts b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.ts similarity index 84% rename from x-pack/plugins/security_solution/public/common/components/filter_group/utils.ts rename to packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.ts index c005621831d5b..b74af227f8a69 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/utils.ts +++ b/packages/kbn-alerts-ui-shared/src/alert_filter_controls/utils.ts @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import type { @@ -12,7 +13,7 @@ import type { } from '@kbn/controls-plugin/common'; import { isEmpty, isEqual, pick } from 'lodash'; -import type { FilterItemObj } from './types'; +import type { FilterControlConfig } from './types'; export const getPanelsInOrderFromControlsInput = (controlInput: ControlGroupInput) => { const panels = controlInput.panels; @@ -46,8 +47,8 @@ interface MergableControlsArgs { * Final set of controls is merged with the defaulControls * */ - controlsWithPriority: FilterItemObj[][]; - defaultControlsObj: Record; + controlsWithPriority: FilterControlConfig[][]; + defaultControlsObj: Record; } /* @@ -77,11 +78,11 @@ interface ReorderControlsArgs { * Ordered Controls * * */ - controls: FilterItemObj[]; + controls: FilterControlConfig[]; /* * default controls in order * */ - defaultControls: FilterItemObj[]; + defaultControls: FilterControlConfig[]; } /** @@ -94,14 +95,14 @@ export const reorderControlsWithDefaultControls = (args: ReorderControlsArgs) => const controlsObject = controls.reduce((prev, current) => { prev[current.fieldName] = current; return prev; - }, {} as Record); + }, {} as Record); const defaultControlsObj = defaultControls.reduce((prev, current) => { prev[current.fieldName] = current; return prev; - }, {} as Record); + }, {} as Record); - const resultDefaultControls: FilterItemObj[] = defaultControls + const resultDefaultControls: FilterControlConfig[] = defaultControls .filter((defaultControl) => defaultControl.persist) .map((defaultControl) => { return { @@ -132,8 +133,8 @@ export const reorderControlsWithDefaultControls = (args: ReorderControlsArgs) => * * */ export const getFilterControlsComparator = - (...fieldsToCompare: Array) => - (filterItemObject1: FilterItemObj[], filterItemObject2: FilterItemObj[]) => { + (...fieldsToCompare: Array) => + (filterItemObject1: FilterControlConfig[], filterItemObject2: FilterControlConfig[]) => { if (filterItemObject1.length !== filterItemObject2.length) return false; const filterItemObjectWithSelectedKeys1 = filterItemObject1.map((v) => { return pick(v, fieldsToCompare); diff --git a/packages/kbn-alerts-ui-shared/src/alerts_search_bar/hooks/use_alert_data_view.ts b/packages/kbn-alerts-ui-shared/src/alerts_search_bar/hooks/use_alert_data_view.ts index 2af37e72619c4..47e1456158826 100644 --- a/packages/kbn-alerts-ui-shared/src/alerts_search_bar/hooks/use_alert_data_view.ts +++ b/packages/kbn-alerts-ui-shared/src/alerts_search_bar/hooks/use_alert_data_view.ts @@ -147,7 +147,7 @@ export function useAlertDataView(props: UseAlertDataViewProps): UseAlertDataView featureIds.length === 0 || hasSecurityAndO11yFeatureIds ? false : isOnlySecurity - ? isIndexNameInitialLoading || isIndexNameLoading + ? isIndexNameInitialLoading || isIndexNameLoading || dataViews.length === 0 : isIndexNameInitialLoading || isIndexNameLoading || isAlertFieldsInitialLoading || diff --git a/packages/kbn-alerts-ui-shared/tsconfig.json b/packages/kbn-alerts-ui-shared/tsconfig.json index 6c042ab98b5ea..0b3a0b3361326 100644 --- a/packages/kbn-alerts-ui-shared/tsconfig.json +++ b/packages/kbn-alerts-ui-shared/tsconfig.json @@ -29,7 +29,10 @@ "@kbn/unified-search-plugin", "@kbn/es-query", "@kbn/ui-theme", + "@kbn/controls-plugin", + "@kbn/embeddable-plugin", "@kbn/core-http-browser", "@kbn/core-notifications-browser", + "@kbn/kibana-utils-plugin", ] } diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index bdb2e9e866089..d521bf999bd28 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -912,6 +912,7 @@ "tags", "version" ], + "slo-settings": [], "space": [ "name" ], diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 3682aea98f0c5..f0bf6f2c260cc 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -2996,6 +2996,10 @@ } } }, + "slo-settings": { + "dynamic": false, + "properties": {} + }, "space": { "dynamic": false, "properties": { diff --git a/packages/kbn-config-schema/index.ts b/packages/kbn-config-schema/index.ts index 0aec0ae1f5a1e..dfb701f0a039c 100644 --- a/packages/kbn-config-schema/index.ts +++ b/packages/kbn-config-schema/index.ts @@ -48,6 +48,7 @@ import { URIOptions, URIType, StreamType, + UnionTypeOptions, } from './src/types'; export type { AnyType, ConditionalType, TypeOf, Props, SchemaStructureEntry, NullableProps }; @@ -154,43 +155,46 @@ function oneOf( Type, Type ], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type, Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; function oneOf( types: [Type, Type, Type], - options?: TypeOptions + options?: UnionTypeOptions ): Type; -function oneOf(types: [Type, Type], options?: TypeOptions): Type; -function oneOf(types: [Type], options?: TypeOptions): Type; -function oneOf>>(types: RTS, options?: TypeOptions): Type { +function oneOf(types: [Type, Type], options?: UnionTypeOptions): Type; +function oneOf(types: [Type], options?: UnionTypeOptions): Type; +function oneOf>>( + types: RTS, + options?: UnionTypeOptions +): Type { return new UnionType(types, options); } @@ -240,6 +244,7 @@ export const schema = { export type Schema = typeof schema; import { + META_FIELD_X_OAS_REF_ID, META_FIELD_X_OAS_OPTIONAL, META_FIELD_X_OAS_MAX_LENGTH, META_FIELD_X_OAS_MIN_LENGTH, @@ -247,6 +252,7 @@ import { } from './src/oas_meta_fields'; export const metaFields = Object.freeze({ + META_FIELD_X_OAS_REF_ID, META_FIELD_X_OAS_OPTIONAL, META_FIELD_X_OAS_MAX_LENGTH, META_FIELD_X_OAS_MIN_LENGTH, diff --git a/packages/kbn-config-schema/src/oas_meta_fields.ts b/packages/kbn-config-schema/src/oas_meta_fields.ts index e54751f36f099..44422793558d4 100644 --- a/packages/kbn-config-schema/src/oas_meta_fields.ts +++ b/packages/kbn-config-schema/src/oas_meta_fields.ts @@ -15,3 +15,4 @@ export const META_FIELD_X_OAS_MIN_LENGTH = 'x-oas-min-length' as const; export const META_FIELD_X_OAS_MAX_LENGTH = 'x-oas-max-length' as const; export const META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES = 'x-oas-get-additional-properties' as const; +export const META_FIELD_X_OAS_REF_ID = 'x-oas-ref-id' as const; diff --git a/packages/kbn-config-schema/src/types/index.ts b/packages/kbn-config-schema/src/types/index.ts index 23b114fd824df..e3d8db0b2302d 100644 --- a/packages/kbn-config-schema/src/types/index.ts +++ b/packages/kbn-config-schema/src/types/index.ts @@ -33,6 +33,7 @@ export { RecordOfType } from './record_type'; export { StreamType } from './stream_type'; export type { StringOptions } from './string_type'; export { StringType } from './string_type'; +export type { UnionTypeOptions } from './union_type'; export { UnionType } from './union_type'; export type { URIOptions } from './uri_type'; export { URIType } from './uri_type'; diff --git a/packages/kbn-config-schema/src/types/type.test.ts b/packages/kbn-config-schema/src/types/type.test.ts index 9cb61b88aa030..4d6636a55b9ca 100644 --- a/packages/kbn-config-schema/src/types/type.test.ts +++ b/packages/kbn-config-schema/src/types/type.test.ts @@ -9,6 +9,7 @@ import { get } from 'lodash'; import { internals } from '../internals'; import { Type, TypeOptions } from './type'; +import { META_FIELD_X_OAS_REF_ID } from '../oas_meta_fields'; class MyType extends Type { constructor(opts: TypeOptions = {}) { @@ -16,8 +17,9 @@ class MyType extends Type { } } -test('describe', () => { - const type = new MyType({ description: 'my description' }); +test('meta', () => { + const type = new MyType({ meta: { description: 'my description', id: 'foo' } }); const meta = type.getSchema().describe(); expect(get(meta, 'flags.description')).toBe('my description'); + expect(get(meta, `metas[0].${META_FIELD_X_OAS_REF_ID}`)).toBe('foo'); }); diff --git a/packages/kbn-config-schema/src/types/type.ts b/packages/kbn-config-schema/src/types/type.ts index 145650d0e3d82..1e312cc7adc7e 100644 --- a/packages/kbn-config-schema/src/types/type.ts +++ b/packages/kbn-config-schema/src/types/type.ts @@ -7,14 +7,27 @@ */ import type { AnySchema, CustomValidator, ErrorReport } from 'joi'; +import { META_FIELD_X_OAS_REF_ID } from '../oas_meta_fields'; import { SchemaTypeError, ValidationError } from '../errors'; import { Reference } from '../references'; +/** Meta fields used when introspecting runtime validation */ +export interface TypeMeta { + /** + * A human-friendly description of this type to be used in documentation. + */ + description?: string; + /** + * A string that uniquely identifies this schema. Used when generating OAS + * to create refs instead of inline schemas. + */ + id?: string; +} + export interface TypeOptions { defaultValue?: T | Reference | (() => T); validate?: (value: T) => string | void; - /** A human-friendly description of this type to be used in documentation */ - description?: string; + meta?: TypeMeta; } export interface SchemaStructureEntry { @@ -88,8 +101,13 @@ export abstract class Type { schema = schema.custom(convertValidationFunction(options.validate)); } - if (options.description) { - schema = schema.description(options.description); + if (options.meta) { + if (options.meta.description) { + schema = schema.description(options.meta.description); + } + if (options.meta.id) { + schema = schema.meta({ [META_FIELD_X_OAS_REF_ID]: options.meta.id }); + } } // Attach generic error handler only if it hasn't been attached yet since @@ -119,7 +137,8 @@ export abstract class Type { } /** - * @internal + * @note intended for internal use, if you need to use this please contact + * the core team to discuss your use case. */ public getSchema() { return this.internalSchema; diff --git a/packages/kbn-config-schema/src/types/union_type.ts b/packages/kbn-config-schema/src/types/union_type.ts index f73689a178ebd..d3f569034f317 100644 --- a/packages/kbn-config-schema/src/types/union_type.ts +++ b/packages/kbn-config-schema/src/types/union_type.ts @@ -9,13 +9,17 @@ import typeDetect from 'type-detect'; import { SchemaTypeError, SchemaTypesError } from '../errors'; import { internals } from '../internals'; -import { Type, TypeOptions, ExtendsDeepOptions } from './type'; +import { Type, type TypeOptions, type TypeMeta, ExtendsDeepOptions } from './type'; + +export type UnionTypeOptions = TypeOptions & { + meta?: Omit; +}; export class UnionType>, T> extends Type { private readonly unionTypes: RTS; - private readonly typeOptions?: TypeOptions; + private readonly typeOptions?: UnionTypeOptions; - constructor(types: RTS, options?: TypeOptions) { + constructor(types: RTS, options?: UnionTypeOptions) { const schema = internals.alternatives(types.map((type) => type.getSchema())).match('any'); super(schema, options); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index 86777f0513c72..2e1f116736588 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -623,8 +623,8 @@ describe('autocomplete', () => { testSuggestions( 'from a | stats a=min()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('stats', 'number', { + ...getFieldNamesByType(['number', 'date']), + ...getFunctionSignaturesByReturnType('stats', ['number', 'date'], { evalMath: true, }), ], @@ -645,8 +645,8 @@ describe('autocomplete', () => { testSuggestions( 'from a | stats a=min(b), b=max()', [ - ...getFieldNamesByType('number'), - ...getFunctionSignaturesByReturnType('stats', 'number', { + ...getFieldNamesByType(['number', 'date']), + ...getFunctionSignaturesByReturnType('stats', ['number', 'date'], { evalMath: true, }), ], @@ -1072,7 +1072,7 @@ describe('autocomplete', () => { // Test suggestions for each possible param, within each signature variation, for each function for (const fn of evalFunctionsDefinitions) { // skip this fn for the moment as it's quite hard to test - if (fn.name !== 'auto_bucket') { + if (fn.name !== 'bucket') { for (const signature of fn.signatures) { signature.params.forEach((param, i) => { if (i < signature.params.length) { @@ -1132,6 +1132,8 @@ describe('autocomplete', () => { } } + testSuggestions('from a | eval var0 = bucket(@timestamp,', []); + describe('date math', () => { const dateSuggestions = timeLiterals.map(({ name }) => name); // If a literal number is detected then suggest also date period keywords diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index ce9b2d2e0acf2..eb40fcec7c54b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -544,7 +544,7 @@ async function getExpressionSuggestionsByType( prevArg && (prevArg.type === 'function' || (!Array.isArray(nodeArg) && prevArg.type !== nodeArg.type)) ) { - if (!isLiteralItem(nodeArg) || !prevArg.literalOnly) { + if (!isLiteralItem(nodeArg) || !prevArg.constantOnly) { argDef = prevArg; } } @@ -737,7 +737,7 @@ async function getExpressionSuggestionsByType( // If the type is specified try to dig deeper in the definition to suggest the best candidate if (['string', 'number', 'boolean'].includes(argDef.type) && !argDef.values) { // it can be just literal values (i.e. "string") - if (argDef.literalOnly) { + if (argDef.constantOnly) { // ... | ... suggestions.push(...getCompatibleLiterals(command.name, [argDef.type], [argDef.name])); } else { @@ -1073,15 +1073,6 @@ async function getFunctionArgsSuggestions( if (!shouldGetNextArgument && argIndex) { argIndex -= 1; } - const types = fnDefinition.signatures.flatMap((signature) => { - if (signature.params.length > argIndex) { - return signature.params[argIndex].type; - } - if (signature.minParams) { - return signature.params[signature.params.length - 1].type; - } - return []; - }); const literalOptions = fnDefinition.signatures.reduce((acc, signature) => { const literalOptionsForThisParameter = signature.params[argIndex]?.literalOptions; @@ -1097,13 +1088,6 @@ async function getFunctionArgsSuggestions( // the first signature is used as reference const refSignature = fnDefinition.signatures[0]; - const hasMoreMandatoryArgs = - refSignature.params.filter(({ optional }, index) => !optional && index > argIndex).length > - argIndex || - ('minParams' in refSignature && refSignature.minParams - ? refSignature.minParams - 1 > argIndex - : false); - const suggestions = []; const noArgDefined = !arg; const isUnknownColumn = @@ -1137,11 +1121,23 @@ async function getFunctionArgsSuggestions( ); } + const supportedFieldTypes = fnDefinition.signatures + .flatMap((signature) => { + if (signature.params.length > argIndex) { + return signature.params[argIndex].constantOnly ? '' : signature.params[argIndex].type; + } + if (signature.minParams) { + return signature.params[signature.params.length - 1].type; + } + return []; + }) + .filter(nonNullable); + // ... | EVAL fn( ) // ... | EVAL fn( field, ) suggestions.push( ...(await getFieldsOrFunctionsSuggestions( - types, + supportedFieldTypes, command.name, option?.name, getFieldsByType, @@ -1159,6 +1155,13 @@ async function getFunctionArgsSuggestions( ); } + const hasMoreMandatoryArgs = + refSignature.params.filter(({ optional }, index) => !optional && index > argIndex).length > + argIndex || + ('minParams' in refSignature && refSignature.minParams + ? refSignature.minParams - 1 > argIndex + : false); + // for eval and row commands try also to complete numeric literals with time intervals where possible if (arg) { if (command.name !== 'stats') { @@ -1179,6 +1182,7 @@ async function getFunctionArgsSuggestions( ); } } + if (hasMoreMandatoryArgs) { // suggest a comma if there's another argument for the function suggestions.push(commaCompleteItem); diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index da5310070177d..6ee79c64b3f01 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -16,7 +16,7 @@ function createNumericAggDefinition({ }: { name: string; description: string; - args?: Array<{ name: string; type: string; value: string; literalOnly?: boolean }>; + args?: Array<{ name: string; type: string; value: string; constantOnly?: boolean }>; }): FunctionDefinition { const extraParamsExample = args.length ? `, ${args.map(({ value }) => value).join(',')}` : ''; return { @@ -28,11 +28,11 @@ function createNumericAggDefinition({ { params: [ { name: 'column', type: 'number', noNestingFunctions: true }, - ...args.map(({ name: paramName, type, literalOnly }) => ({ + ...args.map(({ name: paramName, type, constantOnly }) => ({ name: paramName, type, noNestingFunctions: true, - literalOnly, + constantOnly, })), ], returnType: 'number', @@ -52,18 +52,6 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ defaultMessage: 'Returns the average of the values in a field', }), }, - { - name: 'max', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.maxDoc', { - defaultMessage: 'Returns the maximum value in a field.', - }), - }, - { - name: 'min', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.minDoc', { - defaultMessage: 'Returns the minimum value in a field.', - }), - }, { name: 'sum', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sumDoc', { @@ -94,10 +82,52 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ defaultMessage: 'Returns the n percentile of a field.', } ), - args: [{ name: 'percentile', type: 'number', value: '90', literalOnly: true }], + args: [{ name: 'percentile', type: 'number', value: '90', constantOnly: true }], }, ] .map(createNumericAggDefinition) + .concat([ + { + name: 'max', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.maxDoc', { + defaultMessage: 'Returns the maximum value in a field.', + }), + type: 'agg', + supportedCommands: ['stats'], + signatures: [ + { + params: [{ name: 'column', type: 'number', noNestingFunctions: true }], + returnType: 'number', + examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], + }, + { + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'number', + examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], + }, + ], + }, + { + name: 'min', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.minDoc', { + defaultMessage: 'Returns the minimum value in a field.', + }), + type: 'agg', + supportedCommands: ['stats'], + signatures: [ + { + params: [{ name: 'column', type: 'number', noNestingFunctions: true }], + returnType: 'number', + examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], + }, + { + params: [{ name: 'column', type: 'date', noNestingFunctions: true }], + returnType: 'number', + examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], + }, + ], + }, + ]) .concat([ { name: 'count', diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts index 14e80ff5cfdf4..84e85c4d6e797 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts @@ -252,7 +252,7 @@ export const commandDefinitions: CommandDefinition[] = [ examples: ['… | limit 100', '… | limit 0'], signature: { multipleParams: false, - params: [{ name: 'size', type: 'number', literalOnly: true }], + params: [{ name: 'size', type: 'number', constantOnly: true }], }, options: [], modes: [], @@ -369,7 +369,7 @@ export const commandDefinitions: CommandDefinition[] = [ multipleParams: false, params: [ { name: 'column', type: 'column', innerType: 'string' }, - { name: 'pattern', type: 'string', literalOnly: true }, + { name: 'pattern', type: 'string', constantOnly: true }, ], }, }, @@ -386,7 +386,7 @@ export const commandDefinitions: CommandDefinition[] = [ multipleParams: false, params: [ { name: 'column', type: 'column', innerType: 'string' }, - { name: 'pattern', type: 'string', literalOnly: true }, + { name: 'pattern', type: 'string', constantOnly: true }, ], }, }, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index c0c798fdee1aa..5bb91b378aa1c 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -574,7 +574,7 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ ], }, { - name: 'auto_bucket', + name: 'bucket', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc', { defaultMessage: `Automatically bucket dates based on a given range and bucket target.`, }), @@ -582,24 +582,60 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ { params: [ { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number' }, - { name: 'startDate', type: 'string', literalOnly: true }, - { name: 'endDate', type: 'string', literalOnly: true }, + { name: 'buckets', type: 'number', constantOnly: true }, + { name: 'startDate', type: 'string', constantOnly: true }, + { name: 'endDate', type: 'string', constantOnly: true }, ], returnType: 'date', examples: [ - 'from index | eval hd = auto_bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', ], }, { params: [ { name: 'field', type: 'date' }, - { name: 'buckets', type: 'number' }, - { name: 'startValue', type: 'number', literalOnly: true }, - { name: 'endValue', type: 'number', literalOnly: true }, + { name: 'buckets', type: 'number', constantOnly: true }, + { name: 'startDate', type: 'date', constantOnly: true }, + { name: 'endDate', type: 'date', constantOnly: true }, + ], + returnType: 'date', + examples: [ + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + ], + }, + { + params: [ + { name: 'field', type: 'date' }, + { name: 'buckets', type: 'number', constantOnly: true }, + { name: 'startDate', type: 'string', constantOnly: true }, + { name: 'endDate', type: 'date', constantOnly: true }, + ], + returnType: 'date', + examples: [ + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + ], + }, + { + params: [ + { name: 'field', type: 'date' }, + { name: 'buckets', type: 'number', constantOnly: true }, + { name: 'startDate', type: 'date', constantOnly: true }, + { name: 'endDate', type: 'string', constantOnly: true }, + ], + returnType: 'date', + examples: [ + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + ], + }, + { + params: [ + { name: 'field', type: 'number' }, + { name: 'buckets', type: 'number', constantOnly: true }, + { name: 'startValue', type: 'number', constantOnly: true }, + { name: 'endValue', type: 'number', constantOnly: true }, ], returnType: 'number', - examples: ['from index | eval bs = auto_bucket(salary, 20, 25324, 74999)'], + examples: ['from index | eval bs = bucket(salary, 20, 25324, 74999)'], }, ], }, diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index 6d3488aacc003..85c00dd718c62 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -24,10 +24,10 @@ export interface FunctionDefinition { noNestingFunctions?: boolean; supportsWildcard?: boolean; /** - * if set this indicates that the value must be a literal - * but can be any literal of the correct type + * If set, this parameter does not accept a field. It only accepts a constant, + * though a function can be used to create the value. (e.g. now() for dates or concat() for strings) */ - literalOnly?: boolean; + constantOnly?: boolean; /** * if provided this means that the value must be one * of the options in the array iff the value is a literal. @@ -62,7 +62,7 @@ export interface CommandBaseDefinition { innerType?: string; values?: string[]; valueDescriptions?: string[]; - literalOnly?: boolean; + constantOnly?: boolean; wildcards?: boolean; }>; }; diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 1d439aa3a0b9e..cf5ed3304b41b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -233,7 +233,10 @@ export function isArrayType(type: string) { return ARRAY_REGEXP.test(type); } -export function extractSingleType(type: string) { +/** + * Given an array type for example `string[]` it will return `string` + */ +export function extractSingularType(type: string) { return type.replace(ARRAY_REGEXP, ''); } diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 27e7f7be895b5..8cad05403d8fd 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -812,22 +812,52 @@ "warning": [] }, { - "query": "row var = auto_bucket(now(), 5, \"a\", \"a\")", + "query": "row var = bucket(now(), 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row auto_bucket(now(), 5, \"a\", \"a\")", + "query": "row bucket(now(), 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = auto_bucket(now(), 5, 5, 5)", + "query": "row var = bucket(now(), 5, now(), now())", "error": [], "warning": [] }, { - "query": "row auto_bucket(now(), 5, 5, 5)", + "query": "row bucket(now(), 5, now(), now())", + "error": [], + "warning": [] + }, + { + "query": "row var = bucket(now(), 5, \"a\", now())", + "error": [], + "warning": [] + }, + { + "query": "row bucket(now(), 5, \"a\", now())", + "error": [], + "warning": [] + }, + { + "query": "row var = bucket(now(), 5, now(), \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row bucket(now(), 5, now(), \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = bucket(5, 5, 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row bucket(5, 5, 5, 5)", "error": [], "warning": [] }, @@ -6158,86 +6188,114 @@ "warning": [] }, { - "query": "from a_index | where max(numberField)", + "query": "from a_index | where sum(numberField)", "error": [ - "WHERE does not support function max" + "WHERE does not support function sum" ], "warning": [] }, { - "query": "from a_index | where max(numberField) > 0", + "query": "from a_index | where sum(numberField) > 0", "error": [ - "WHERE does not support function max" + "WHERE does not support function sum" ], "warning": [] }, { - "query": "from a_index | where min(numberField)", + "query": "from a_index | where median(numberField)", "error": [ - "WHERE does not support function min" + "WHERE does not support function median" ], "warning": [] }, { - "query": "from a_index | where min(numberField) > 0", + "query": "from a_index | where median(numberField) > 0", "error": [ - "WHERE does not support function min" + "WHERE does not support function median" ], "warning": [] }, { - "query": "from a_index | where sum(numberField)", + "query": "from a_index | where median_absolute_deviation(numberField)", "error": [ - "WHERE does not support function sum" + "WHERE does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | where sum(numberField) > 0", + "query": "from a_index | where median_absolute_deviation(numberField) > 0", "error": [ - "WHERE does not support function sum" + "WHERE does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | where median(numberField)", + "query": "from a_index | where percentile(numberField, 5)", "error": [ - "WHERE does not support function median" + "WHERE does not support function percentile" ], "warning": [] }, { - "query": "from a_index | where median(numberField) > 0", + "query": "from a_index | where percentile(numberField, 5) > 0", "error": [ - "WHERE does not support function median" + "WHERE does not support function percentile" ], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField)", + "query": "from a_index | where max(numberField)", "error": [ - "WHERE does not support function median_absolute_deviation" + "WHERE does not support function max" ], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField) > 0", + "query": "from a_index | where max(numberField) > 0", "error": [ - "WHERE does not support function median_absolute_deviation" + "WHERE does not support function max" ], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5)", + "query": "from a_index | where max(dateField)", "error": [ - "WHERE does not support function percentile" + "WHERE does not support function max" ], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5) > 0", + "query": "from a_index | where max(dateField) > 0", "error": [ - "WHERE does not support function percentile" + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where min(numberField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(numberField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField) > 0", + "error": [ + "WHERE does not support function min" ], "warning": [] }, @@ -6330,6 +6388,18 @@ ], "warning": [] }, + { + "query": "from a_index | where bucket(numberField, 5, 5, 5) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where bucket(stringField, 5, 5, 5) > 0", + "error": [ + "Argument of [bucket] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, { "query": "from a_index | where ceil(numberField) > 0", "error": [], @@ -6426,7 +6496,7 @@ "warning": [] }, { - "query": "from a_index | where log(numberField) > 0", + "query": "from a_index | where log(numberField, numberField) > 0", "error": [], "warning": [] }, @@ -6576,7 +6646,7 @@ "warning": [] }, { - "query": "from a_index | where round(numberField) > 0", + "query": "from a_index | where round(numberField, numberField) > 0", "error": [], "warning": [] }, @@ -7692,170 +7762,226 @@ "warning": [] }, { - "query": "from a_index | eval var = max(numberField)", + "query": "from a_index | eval var = sum(numberField)", "error": [ - "EVAL does not support function max" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | eval var = max(numberField) > 0", + "query": "from a_index | eval var = sum(numberField) > 0", "error": [ - "EVAL does not support function max" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | eval max(numberField)", + "query": "from a_index | eval sum(numberField)", "error": [ - "EVAL does not support function max" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | eval max(numberField) > 0", + "query": "from a_index | eval sum(numberField) > 0", "error": [ - "EVAL does not support function max" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | eval var = min(numberField)", + "query": "from a_index | eval var = median(numberField)", "error": [ - "EVAL does not support function min" + "EVAL does not support function median" ], "warning": [] }, { - "query": "from a_index | eval var = min(numberField) > 0", + "query": "from a_index | eval var = median(numberField) > 0", "error": [ - "EVAL does not support function min" + "EVAL does not support function median" ], "warning": [] }, { - "query": "from a_index | eval min(numberField)", + "query": "from a_index | eval median(numberField)", "error": [ - "EVAL does not support function min" + "EVAL does not support function median" ], "warning": [] }, { - "query": "from a_index | eval min(numberField) > 0", + "query": "from a_index | eval median(numberField) > 0", "error": [ - "EVAL does not support function min" + "EVAL does not support function median" ], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField)", + "query": "from a_index | eval var = median_absolute_deviation(numberField)", "error": [ - "EVAL does not support function sum" + "EVAL does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField) > 0", + "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", "error": [ - "EVAL does not support function sum" + "EVAL does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField)", + "query": "from a_index | eval median_absolute_deviation(numberField)", "error": [ - "EVAL does not support function sum" + "EVAL does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField) > 0", + "query": "from a_index | eval median_absolute_deviation(numberField) > 0", "error": [ - "EVAL does not support function sum" + "EVAL does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | eval var = median(numberField)", + "query": "from a_index | eval var = percentile(numberField, 5)", "error": [ - "EVAL does not support function median" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval var = median(numberField) > 0", + "query": "from a_index | eval var = percentile(numberField, 5) > 0", "error": [ - "EVAL does not support function median" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval median(numberField)", + "query": "from a_index | eval percentile(numberField, 5)", "error": [ - "EVAL does not support function median" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval median(numberField) > 0", + "query": "from a_index | eval percentile(numberField, 5) > 0", "error": [ - "EVAL does not support function median" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = max(numberField)", "error": [ - "EVAL does not support function median_absolute_deviation" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", + "query": "from a_index | eval var = max(numberField) > 0", "error": [ - "EVAL does not support function median_absolute_deviation" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField)", + "query": "from a_index | eval max(numberField)", "error": [ - "EVAL does not support function median_absolute_deviation" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField) > 0", + "query": "from a_index | eval max(numberField) > 0", "error": [ - "EVAL does not support function median_absolute_deviation" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5)", + "query": "from a_index | eval var = max(dateField)", "error": [ - "EVAL does not support function percentile" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5) > 0", + "query": "from a_index | eval var = max(dateField) > 0", "error": [ - "EVAL does not support function percentile" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5)", + "query": "from a_index | eval max(dateField)", "error": [ - "EVAL does not support function percentile" + "EVAL does not support function max" ], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5) > 0", + "query": "from a_index | eval max(dateField) > 0", "error": [ - "EVAL does not support function percentile" + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(numberField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(numberField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField) > 0", + "error": [ + "EVAL does not support function min" ], "warning": [] }, @@ -8174,58 +8300,117 @@ "warning": [] }, { - "query": "from a_index | eval var = auto_bucket(dateField, numberField, \"a\", \"a\")", + "query": "from a_index | eval var = bucket(dateField, 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval auto_bucket(dateField, numberField, \"a\", \"a\")", + "query": "from a_index | eval bucket(dateField, 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval auto_bucket(dateField, numberField, stringField, stringField)", + "query": "from a_index | eval bucket(dateField, numberField, stringField, stringField)", "error": [ - "Argument of [auto_bucket] must be a constant, received [stringField]", - "Argument of [auto_bucket] must be a constant, received [stringField]" + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [stringField]", + "Argument of [bucket] must be a constant, received [stringField]" ], "warning": [] }, { - "query": "from a_index | eval var = auto_bucket(dateField, numberField, 5, 5)", + "query": "from a_index | eval var = bucket(dateField, 5, now(), now())", "error": [], "warning": [] }, { - "query": "from a_index | eval auto_bucket(dateField, numberField, 5, 5)", + "query": "from a_index | eval bucket(dateField, 5, now(), now())", "error": [], "warning": [] }, { - "query": "from a_index | eval auto_bucket(dateField, numberField, numberField, numberField)", + "query": "from a_index | eval bucket(dateField, numberField, dateField, dateField)", "error": [ - "Argument of [auto_bucket] must be a constant, received [numberField]", - "Argument of [auto_bucket] must be a constant, received [numberField]" + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [dateField]" ], "warning": [] }, { - "query": "from a_index | eval var = case(booleanField, stringField)", + "query": "from a_index | eval var = bucket(dateField, 5, \"a\", now())", "error": [], "warning": [] }, { - "query": "from a_index | eval case(booleanField, stringField)", + "query": "from a_index | eval bucket(dateField, 5, \"a\", now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(numberField)", - "error": [], + "query": "from a_index | eval bucket(dateField, numberField, stringField, dateField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [stringField]", + "Argument of [bucket] must be a constant, received [dateField]" + ], "warning": [] }, { - "query": "from a_index | eval ceil(numberField)", + "query": "from a_index | eval var = bucket(dateField, 5, now(), \"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval bucket(dateField, 5, now(), \"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval bucket(dateField, numberField, dateField, stringField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [stringField]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = bucket(numberField, 5, 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval bucket(numberField, 5, 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval bucket(numberField, numberField, numberField, numberField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [numberField]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = case(booleanField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval case(booleanField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = ceil(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval ceil(numberField)", "error": [], "warning": [] }, @@ -12856,6 +13041,44 @@ ], "warning": [] }, + { + "query": "from index | eval bucket(dateField, abs(numberField), \"\", \"\")", + "error": [ + "Argument of [bucket] must be a constant, received [abs(numberField)]" + ], + "warning": [] + }, + { + "query": "from index | eval bucket(dateField, abs(length(numberField)), \"\", \"\")", + "error": [ + "Argument of [bucket] must be a constant, received [abs(length(numberField))]" + ], + "warning": [] + }, + { + "query": "from index | eval bucket(dateField, pi(), \"\", \"\")", + "error": [], + "warning": [] + }, + { + "query": "from index | eval bucket(dateField, 1 + 30 / 10, \"\", \"\")", + "error": [], + "warning": [] + }, + { + "query": "from index | eval bucket(dateField, 1 + 30 / 10, concat(\"\", \"\"), \"\")", + "error": [], + "warning": [] + }, + { + "query": "from index | eval bucket(dateField, numberField, stringField, stringField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [stringField]", + "Argument of [bucket] must be a constant, received [stringField]" + ], + "warning": [] + }, { "query": "from a_index | stats ", "error": [ @@ -13574,770 +13797,886 @@ "warning": [] }, { - "query": "from a_index | stats var = max(numberField)", + "query": "from a_index | stats var = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "from a_index | stats sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField))", + "query": "from a_index | stats var = round(sum(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField))", + "query": "from a_index | stats round(sum(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField)) + max(numberField)", + "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField / 2)", + "query": "from a_index | stats sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField / 2)", + "query": "from a_index | stats var0 = sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "query": "from a_index | stats avg(numberField), sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "from a_index | stats sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField)", + "query": "from a_index | stats var0 = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField)", + "query": "from a_index | stats avg(numberField), sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField)", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField) by round(numberField / 2)", + "query": "from a_index | stats sum(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(avg(numberField))", + "query": "from a_index | stats var = sum(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats max(avg(numberField))", + "query": "from a_index | stats sum(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats max(stringField)", + "query": "from a_index | stats sum(stringField)", "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" + "Argument of [sum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = max(*)", + "query": "from a_index | stats var = sum(*)", "error": [ - "Using wildcards (*) in max is not allowed" + "Using wildcards (*) in sum is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = min(numberField)", + "query": "from a_index | stats var = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | stats median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField))", + "query": "from a_index | stats var = round(median(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField))", + "query": "from a_index | stats round(median(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField)) + min(numberField)", + "query": "from a_index | stats round(median(numberField)) + median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField / 2)", + "query": "from a_index | stats median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField / 2)", + "query": "from a_index | stats var0 = median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "query": "from a_index | stats avg(numberField), median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | stats median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField)", + "query": "from a_index | stats var0 = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField)", + "query": "from a_index | stats avg(numberField), median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "query": "from a_index | stats avg(numberField), var0 = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "query": "from a_index | stats median(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var = min(avg(numberField))", + "query": "from a_index | stats var = median(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats min(avg(numberField))", + "query": "from a_index | stats median(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats min(stringField)", + "query": "from a_index | stats median(stringField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "Argument of [median] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "from a_index | stats var = median(*)", "error": [ - "Using wildcards (*) in min is not allowed" + "Using wildcards (*) in median is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = sum(numberField)", + "query": "from a_index | stats var = median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", + "query": "from a_index | stats median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField))", + "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField))", + "query": "from a_index | stats round(median_absolute_deviation(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", + "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField / 2)", + "query": "from a_index | stats median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField / 2)", + "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField / 2)", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", + "query": "from a_index | stats median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField)", + "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField)", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField) by round(numberField / 2)", + "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(avg(numberField))", + "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats sum(avg(numberField))", + "query": "from a_index | stats median_absolute_deviation(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats sum(stringField)", + "query": "from a_index | stats median_absolute_deviation(stringField)", "error": [ - "Argument of [sum] must be [number], found value [stringField] type [string]" + "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = sum(*)", + "query": "from a_index | stats var = median_absolute_deviation(*)", "error": [ - "Using wildcards (*) in sum is not allowed" + "Using wildcards (*) in median_absolute_deviation is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = median(numberField)", + "query": "from a_index | stats var = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | stats percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField))", + "query": "from a_index | stats var = round(percentile(numberField, 5))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField))", + "query": "from a_index | stats round(percentile(numberField, 5))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", + "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField)) + median(numberField)", + "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField / 2)", - "error": [], + "query": "from a_index | stats percentile(numberField, numberField)", + "error": [ + "Argument of [percentile] must be a constant, received [numberField]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField / 2)", + "query": "from a_index | stats percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField / 2)", + "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", + "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField)", + "query": "from a_index | stats percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField)", + "query": "from a_index | stats var0 = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField)", + "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField) by round(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(avg(numberField))", + "query": "from a_index | stats var = percentile(avg(numberField), 5)", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats median(stringField)", + "query": "from a_index | stats percentile(avg(numberField), 5)", "error": [ - "Argument of [median] must be [number], found value [stringField] type [string]" + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats var = median(*)", + "query": "from a_index | stats percentile(stringField, 5)", "error": [ - "Using wildcards (*) in median is not allowed" + "Argument of [percentile] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "query": "from a_index | stats var = max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", + "query": "from a_index | stats max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", + "query": "from a_index | stats var = round(max(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField))", + "query": "from a_index | stats round(max(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | stats round(max(numberField)) + max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField / 2)", + "query": "from a_index | stats max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | stats var0 = max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", + "query": "from a_index | stats avg(numberField), max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", + "query": "from a_index | stats max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", + "query": "from a_index | stats var0 = max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "query": "from a_index | stats avg(numberField), max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "query": "from a_index | stats avg(numberField), var0 = max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "query": "from a_index | stats max(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", + "query": "from a_index | stats var = max(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(avg(numberField))", + "query": "from a_index | stats max(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(stringField)", + "query": "from a_index | stats max(stringField)", "error": [ - "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" + "Argument of [max] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(*)", + "query": "from a_index | stats var = max(*)", "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" + "Using wildcards (*) in max is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = percentile(numberField, 5)", + "query": "from a_index | stats var = max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | stats max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5))", + "query": "from a_index | stats var = round(max(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5))", + "query": "from a_index | stats round(max(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | stats round(max(dateField)) + max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, numberField)", + "query": "from a_index | stats var = max(avg(numberField))", "error": [ - "Argument of [percentile] must be a constant, received [numberField]" + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats percentile(numberField / 2, 5)", + "query": "from a_index | stats max(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(stringField)", + "error": [ + "Argument of [max] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(*)", + "error": [ + "Using wildcards (*) in max is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "query": "from a_index | stats min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "query": "from a_index | stats var = round(min(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", + "query": "from a_index | stats round(min(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5)", + "query": "from a_index | stats round(min(numberField)) + min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "query": "from a_index | stats min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "query": "from a_index | stats var0 = min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "query": "from a_index | stats avg(numberField), min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", + "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", + "query": "from a_index | stats min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", + "query": "from a_index | stats var0 = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | stats avg(numberField), var0 = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(avg(numberField), 5)", + "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats percentile(avg(numberField), 5)", + "query": "from a_index | stats min(avg(numberField))", "error": [ "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from a_index | stats percentile(stringField, 5)", + "query": "from a_index | stats min(stringField)", "error": [ - "Argument of [percentile] must be [number], found value [stringField] type [string]" + "Argument of [min] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(dateField)) + min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(stringField)", + "error": [ + "Argument of [min] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" ], "warning": [] }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts index a60d705d0d0d3..9abb3ea3dc2aa 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts @@ -6,8 +6,10 @@ * Side Public License, v 1. */ -import type { ESQLAst } from '@kbn/esql-ast'; -import type { ESQLPolicy } from './types'; +import type { ESQLAst, ESQLAstItem, ESQLMessage, ESQLSingleAstItem } from '@kbn/esql-ast'; +import { getAllArrayTypes, getAllArrayValues } from '../shared/helpers'; +import { getMessageFromId } from './errors'; +import type { ESQLPolicy, ReferenceMaps } from './types'; export function buildQueryForFieldsFromSource(queryString: string, ast: ESQLAst) { const firstCommand = ast[0]; @@ -35,3 +37,40 @@ export function buildQueryForFieldsForStringSources(queryString: string, ast: ES } return customQuery; } + +/** + * We only want to report one message when any number of the elements in an array argument is of the wrong type + */ +export function collapseWrongArgumentTypeMessages( + messages: ESQLMessage[], + arg: ESQLAstItem[], + funcName: string, + argType: string, + parentCommand: string, + references: ReferenceMaps +) { + if (!messages.some(({ code }) => code === 'wrongArgumentType')) { + return messages; + } + + // Replace the individual "wrong argument type" messages with a single one for the whole array + messages = messages.filter(({ code }) => code !== 'wrongArgumentType'); + + messages.push( + getMessageFromId({ + messageId: 'wrongArgumentType', + values: { + name: funcName, + argType, + value: `(${getAllArrayValues(arg).join(', ')})`, + givenType: `(${getAllArrayTypes(arg, parentCommand, references).join(', ')})`, + }, + locations: { + min: (arg[0] as ESQLSingleAstItem).location.min, + max: (arg[arg.length - 1] as ESQLSingleAstItem).location.max, + }, + }) + ); + + return messages; +} diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index d36f78fdcb5b5..42748a62be92f 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -173,8 +173,9 @@ function getFieldMapping( const literalValues = { string: `"a"`, number: '5', + date: 'now()', }; - return params.map(({ name: _name, type, literalOnly, literalOptions, ...rest }) => { + return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type; if (fieldTypes.includes(typeString)) { if (useLiterals && literalOptions) { @@ -186,7 +187,7 @@ function getFieldMapping( } const fieldName = - literalOnly && typeString in literalValues + constantOnly && typeString in literalValues ? literalValues[typeString as keyof typeof literalValues]! : getFieldName(typeString, { useNestedFunction, @@ -227,10 +228,15 @@ function generateIncorrectlyTypedParameters( number: '5', }; const wrongFieldMapping = currentParams.map( - ({ name: _name, literalOnly, literalOptions, type, ...rest }, i) => { + ({ name: _name, constantOnly, literalOptions, type, ...rest }, i) => { // this thing is complex enough, let's not make it harder for constants - if (literalOnly) { - return { name: literalValues[type as keyof typeof literalValues], type, ...rest }; + if (constantOnly) { + return { + name: literalValues[type as keyof typeof literalValues], + type, + wrong: false, + ...rest, + }; } const canBeFieldButNotString = Boolean( fieldTypes.filter((t) => t !== 'string').includes(type) && @@ -247,7 +253,7 @@ function generateIncorrectlyTypedParameters( : canBeFieldButNotNumber ? values.numberField : values.booleanField; - return { name: nameValue, type, ...rest }; + return { name: nameValue, type, wrong: true, ...rest }; } ); @@ -257,8 +263,28 @@ function generateIncorrectlyTypedParameters( [values.booleanField]: 'boolean', }; - const expectedErrors = signatures[0].params - .filter(({ literalOnly }) => !literalOnly) + // Try to predict which signature will be used to generate the errors + // in the validation engine. The validator currently uses the signature + // which generates the fewest errors. + // + // Approximate this by finding the signature that best matches the INCORRECT field mapping + // + // This is not future-proof... + const misMatchesBySignature = signatures.map(({ params: fnParams }) => { + const typeMatches = fnParams.map(({ type }, i) => { + if (wrongFieldMapping[i].wrong) { + const typeFromIncorrectMapping = generatedFieldTypes[wrongFieldMapping[i].name]; + return type === typeFromIncorrectMapping; + } + return type === wrongFieldMapping[i].type; + }); + return typeMatches.filter((t) => !t).length; + })!; + const signatureToUse = + signatures[misMatchesBySignature.indexOf(Math.min(...misMatchesBySignature))]!; + + const expectedErrors = signatureToUse.params + .filter(({ constantOnly }) => !constantOnly) .map(({ type }, i) => { const fieldName = wrongFieldMapping[i].name; if ( @@ -586,11 +612,11 @@ describe('validation logic', () => { } // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // auto_bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the + // bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the // the right error message if ( params.every(({ type }) => type !== 'any') && - !['auto_bucket', 'to_version', 'mv_sort'].includes(name) + !['bucket', 'to_version', 'mv_sort'].includes(name) ) { // now test nested functions const fieldMappingWithNestedFunctions = getFieldMapping(params, { @@ -1200,16 +1226,12 @@ describe('validation logic', () => { }); for (const { name, signatures, ...rest } of numericOrStringFunctions) { const supportedSignatures = signatures.filter(({ returnType }) => + // TODO — not sure why the tests have this limitation... seems like any type + // that can be part of a boolean expression should be allowed in a where clause ['number', 'string'].includes(returnType) ); for (const { params, returnType, ...restSign } of supportedSignatures) { - const correctMapping = params - .filter(({ optional }) => !optional) - .map(({ type }) => - ['number', 'string'].includes(Array.isArray(type) ? type.join(', ') : type) - ? { name: `${type}Field`, type } - : { name: `numberField`, type } - ); + const correctMapping = getFieldMapping(params); testErrorsAndWarnings( `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ // hijacking a bit this function to produce a function call @@ -1426,15 +1448,15 @@ describe('validation logic', () => { }`, [] ); - if (params.some(({ literalOnly }) => literalOnly)) { + if (params.some(({ constantOnly }) => constantOnly)) { const fieldReplacedType = params - .filter(({ literalOnly }) => literalOnly) + .filter(({ constantOnly }) => constantOnly) .map(({ type }) => type); // create the mapping without the literal flag // this will make the signature wrong on purpose where in place on constants // the arg will be a column of the same type const fieldMappingWithoutLiterals = getFieldMapping( - params.map(({ literalOnly, ...rest }) => rest) + params.map(({ constantOnly, ...rest }) => rest) ); testErrorsAndWarnings( `from a_index | eval ${ @@ -1469,11 +1491,11 @@ describe('validation logic', () => { } // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // auto_bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the + // bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the // the right error message if ( params.every(({ type }) => type !== 'any') && - !['auto_bucket', 'to_version', 'mv_sort'].includes(name) + !['bucket', 'to_version', 'mv_sort'].includes(name) ) { // now test nested functions const fieldMappingWithNestedFunctions = getFieldMapping(params, { @@ -1767,6 +1789,30 @@ describe('validation logic', () => { } } }); + + describe('constant-only parameters', () => { + testErrorsAndWarnings('from index | eval bucket(dateField, abs(numberField), "", "")', [ + 'Argument of [bucket] must be a constant, received [abs(numberField)]', + ]); + testErrorsAndWarnings( + 'from index | eval bucket(dateField, abs(length(numberField)), "", "")', + ['Argument of [bucket] must be a constant, received [abs(length(numberField))]'] + ); + testErrorsAndWarnings('from index | eval bucket(dateField, pi(), "", "")', []); + testErrorsAndWarnings('from index | eval bucket(dateField, 1 + 30 / 10, "", "")', []); + testErrorsAndWarnings( + 'from index | eval bucket(dateField, 1 + 30 / 10, concat("", ""), "")', + [] + ); + testErrorsAndWarnings( + 'from index | eval bucket(dateField, numberField, stringField, stringField)', + [ + 'Argument of [bucket] must be a constant, received [numberField]', + 'Argument of [bucket] must be a constant, received [stringField]', + 'Argument of [bucket] must be a constant, received [stringField]', + ] + ); + }); }); describe('stats', () => { @@ -1977,15 +2023,15 @@ describe('validation logic', () => { ); } - if (params.some(({ literalOnly }) => literalOnly)) { + if (params.some(({ constantOnly }) => constantOnly)) { const fieldReplacedType = params - .filter(({ literalOnly }) => literalOnly) + .filter(({ constantOnly }) => constantOnly) .map(({ type }) => type); // create the mapping without the literal flag // this will make the signature wrong on purpose where in place on constants // the arg will be a column of the same type const fieldMappingWithoutLiterals = getFieldMapping( - params.map(({ literalOnly, ...rest }) => rest) + params.map(({ constantOnly, ...rest }) => rest) ); testErrorsAndWarnings( `from a_index | stats ${ @@ -2107,11 +2153,11 @@ describe('validation logic', () => { } // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // auto_bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the + // bucket and to_version functions are a bit harder to test exactly a combination of argument and predict the // the right error message if ( params.every(({ type }) => type !== 'any') && - !['auto_bucket', 'to_version', 'mv_sort'].includes(name) + !['bucket', 'to_version', 'mv_sort'].includes(name) ) { // now test nested functions const fieldMappingWithNestedAggsFunctions = getFieldMapping(params, { @@ -2119,7 +2165,7 @@ describe('validation logic', () => { useLiterals: false, }); const nestedAggsExpectedErrors = params - .filter(({ literalOnly }) => !literalOnly) + .filter(({ constantOnly }) => !constantOnly) .map( (_) => `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]` diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index 3d508dc93389f..af456e90d3f72 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -28,9 +28,7 @@ import { } from '../definitions/types'; import { areFieldAndVariableTypesCompatible, - extractSingleType, - getAllArrayTypes, - getAllArrayValues, + extractSingularType, getColumnHit, getCommandDefinition, getFunctionDefinition, @@ -73,6 +71,7 @@ import { retrieveMetadataFields, retrieveFieldsFromStringSources, } from './resources'; +import { collapseWrongArgumentTypeMessages } from './helpers'; function validateFunctionLiteralArg( astFunction: ESQLFunction, @@ -204,7 +203,7 @@ function validateFunctionColumnArg( if (actualArg.name) { const { hit: columnCheck, nameHit } = columnExists(actualArg, references); if (!columnCheck) { - if (argDef.literalOnly) { + if (argDef.constantOnly) { messages.push( getMessageFromId({ messageId: 'expectedConstant', @@ -227,7 +226,7 @@ function validateFunctionColumnArg( ); } } else { - if (argDef.literalOnly) { + if (argDef.constantOnly) { messages.push( getMessageFromId({ messageId: 'expectedConstant', @@ -297,6 +296,7 @@ function validateFunction( parentCommand: string, parentOption: string | undefined, references: ReferenceMaps, + forceConstantOnly: boolean = false, isNested?: boolean ): ESQLMessage[] { const messages: ESQLMessage[] = []; @@ -395,21 +395,58 @@ function validateFunction( } } // now perform the same check on all functions args - for (const arg of astFunction.args) { + for (let i = 0; i < astFunction.args.length; i++) { + const arg = astFunction.args[i]; + + const allMatchingArgDefinitionsAreConstantOnly = matchingSignatures.every((signature) => { + return signature.params[i]?.constantOnly; + }); const wrappedArray = Array.isArray(arg) ? arg : [arg]; for (const subArg of wrappedArray) { if (isFunctionItem(subArg)) { - messages.push( - ...validateFunction( - subArg, - parentCommand, - parentOption, - references, - // use the nesting flag for now just for stats - // TODO: revisit this part later on to make it more generic - parentCommand === 'stats' ? isNested || !isAssignment(astFunction) : false - ) + const messagesFromArg = validateFunction( + subArg, + parentCommand, + parentOption, + references, + /** + * The constantOnly constraint needs to be enforced for arguments that + * are functions as well, regardless of whether the definition for the + * sub function's arguments includes the constantOnly flag. + * + * Example: + * bucket(@timestamp, abs(bytes), "", "") + * + * In the above example, the abs function is not defined with the + * constantOnly flag, but the second parameter in bucket _is_ defined + * with the constantOnly flag. + * + * Because of this, the abs function's arguments inherit the constraint + * and each should be validated as if each were constantOnly. + */ + allMatchingArgDefinitionsAreConstantOnly || forceConstantOnly, + // use the nesting flag for now just for stats + // TODO: revisit this part later on to make it more generic + parentCommand === 'stats' ? isNested || !isAssignment(astFunction) : false ); + + if (messagesFromArg.some(({ code }) => code === 'expectedConstant')) { + const consolidatedMessage = getMessageFromId({ + messageId: 'expectedConstant', + values: { + fn: astFunction.name, + given: subArg.text, + }, + locations: subArg.location, + }); + + messages.push( + consolidatedMessage, + ...messagesFromArg.filter(({ code }) => code !== 'expectedConstant') + ); + } else { + messages.push(...messagesFromArg); + } } } } @@ -432,56 +469,44 @@ function validateFunction( // few lines above return; } - // if the arg is an array of values, check each element - if (Array.isArray(outerArg) && isArrayType(argDef.type)) { - const extractedType = extractSingleType(argDef.type); - const everyArgInListMessages = outerArg - .map((arg) => { - return [ - validateFunctionLiteralArg, - validateNestedFunctionArg, - validateFunctionColumnArg, - ].flatMap((validateFn) => { - return validateFn( - astFunction, - arg, - { ...argDef, type: extractedType }, - references, - parentCommand - ); - }); - }) - .filter((ms) => ms.length); - if (everyArgInListMessages.length) { - failingSignature.push( - getMessageFromId({ - messageId: 'wrongArgumentType', - values: { - name: astFunction.name, - argType: argDef.type, - value: `(${getAllArrayValues(outerArg).join(', ')})`, - givenType: `(${getAllArrayTypes(outerArg, parentCommand, references).join(', ')})`, - }, - locations: { - min: (outerArg[0] as ESQLSingleAstItem).location.min, - max: (outerArg[outerArg.length - 1] as ESQLSingleAstItem).location.max, - }, - }) - ); - } - return; - } - const wrappedArg = Array.isArray(outerArg) ? outerArg : [outerArg]; - for (const actualArg of wrappedArg) { - const argValidationMessages = [ + + // check every element of the argument (may be an array of elements, or may be a single element) + const hasMultipleElements = Array.isArray(outerArg); + const argElements = hasMultipleElements ? outerArg : [outerArg]; + const singularType = extractSingularType(argDef.type); + const messagesFromAllArgElements = argElements.flatMap((arg) => { + return [ validateFunctionLiteralArg, validateNestedFunctionArg, validateFunctionColumnArg, ].flatMap((validateFn) => { - return validateFn(astFunction, actualArg, argDef, references, parentCommand); + return validateFn( + astFunction, + arg, + { + ...argDef, + type: singularType, + constantOnly: forceConstantOnly || argDef.constantOnly, + }, + references, + parentCommand + ); }); - failingSignature.push(...argValidationMessages); - } + }); + + const shouldCollapseMessages = isArrayType(argDef.type) && hasMultipleElements; + failingSignature.push( + ...(shouldCollapseMessages + ? collapseWrongArgumentTypeMessages( + messagesFromAllArgElements, + outerArg, + astFunction.name, + argDef.type, + parentCommand, + references + ) + : messagesFromAllArgElements) + ); }); if (failingSignature.length) { failingSignatures.push(failingSignature); diff --git a/packages/kbn-monaco/index.ts b/packages/kbn-monaco/index.ts index 9139ec40f706d..3ba4a5afb3aea 100644 --- a/packages/kbn-monaco/index.ts +++ b/packages/kbn-monaco/index.ts @@ -37,4 +37,8 @@ export { CONSOLE_OUTPUT_LANG_ID, CONSOLE_THEME_ID, CONSOLE_OUTPUT_THEME_ID, + getParsedRequestsProvider, + ConsoleParsedRequestsProvider, } from './src/console'; + +export type { ParsedRequest } from './src/console'; diff --git a/packages/kbn-monaco/src/console/console_errors_provider.ts b/packages/kbn-monaco/src/console/console_errors_provider.ts new file mode 100644 index 0000000000000..c92161f309969 --- /dev/null +++ b/packages/kbn-monaco/src/console/console_errors_provider.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ConsoleWorkerProxyService } from './console_worker_proxy'; +import { CONSOLE_LANG_ID } from './constants'; +import { monaco } from '../monaco_imports'; + +/* + * This setup function runs when the Console language is registered into the Monaco editor. + * It adds a listener that is attached to the editor input when the Monaco editor is used + * with the Console language. + * The Console parser that runs in a web worker analyzes the editor input when it changes and + * if any errors are found, they are added as "error markers" to the Monaco editor. + */ +export const setupConsoleErrorsProvider = (workerProxyService: ConsoleWorkerProxyService) => { + const updateErrorMarkers = async (model: monaco.editor.IModel): Promise => { + if (model.isDisposed()) { + return; + } + const parserResult = await workerProxyService.getParserResult(model.uri); + + if (!parserResult) { + return; + } + const { errors } = parserResult; + monaco.editor.setModelMarkers( + model, + CONSOLE_LANG_ID, + errors.map(({ offset, text }) => { + const { column, lineNumber } = model.getPositionAt(offset); + return { + startLineNumber: lineNumber, + startColumn: column, + endLineNumber: lineNumber, + endColumn: column, + message: text, + severity: monaco.MarkerSeverity.Error, + }; + }) + ); + }; + const onModelAdd = (model: monaco.editor.IModel) => { + if (model.getLanguageId() !== CONSOLE_LANG_ID) { + return; + } + + const { dispose } = model.onDidChangeContent(async () => { + await updateErrorMarkers(model); + }); + + model.onWillDispose(() => { + dispose(); + }); + + updateErrorMarkers(model); + }; + monaco.editor.onDidCreateModel(onModelAdd); +}; diff --git a/packages/kbn-monaco/src/console/console_parsed_requests_provider.ts b/packages/kbn-monaco/src/console/console_parsed_requests_provider.ts new file mode 100644 index 0000000000000..da0689b3ab863 --- /dev/null +++ b/packages/kbn-monaco/src/console/console_parsed_requests_provider.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ConsoleWorkerProxyService } from './console_worker_proxy'; +import { ParsedRequest } from './types'; +import { monaco } from '../monaco_imports'; + +/* + * This class is a helper interface that is used in the Console plugin. + * The provider access the Console parser that runs in a web worker and analyzes the editor input + * when it changes. + * The parsed result contains the requests and errors which are used in the Console plugin. + */ +export class ConsoleParsedRequestsProvider { + constructor( + private workerProxyService: ConsoleWorkerProxyService, + private model: monaco.editor.ITextModel | null + ) {} + public async getRequests(): Promise { + if (!this.model) { + return []; + } + const parserResult = await this.workerProxyService.getParserResult(this.model.uri); + return parserResult?.requests ?? []; + } +} diff --git a/packages/kbn-monaco/src/console/console_worker_proxy.ts b/packages/kbn-monaco/src/console/console_worker_proxy.ts new file mode 100644 index 0000000000000..3438f2f98f6f2 --- /dev/null +++ b/packages/kbn-monaco/src/console/console_worker_proxy.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { monaco } from '../monaco_imports'; +import { CONSOLE_LANG_ID } from './constants'; +import { ConsoleParserResult, ConsoleWorkerDefinition } from './types'; + +/* + * This class contains logic to create a web worker where the code for the Console parser can + * execute without blocking the main thread. The parser only runs when the Monaco editor + * is used with the Console language. The parser can only be accessed via this proxy service class. + */ +export class ConsoleWorkerProxyService { + private worker: monaco.editor.MonacoWebWorker | undefined; + + public async getParserResult(modelUri: monaco.Uri): Promise { + if (!this.worker) { + throw new Error('Worker Proxy Service has not been setup!'); + } + await this.worker.withSyncedResources([modelUri]); + const parser = await this.worker.getProxy(); + return parser.getParserResult(modelUri.toString()); + } + + public setup() { + this.worker = monaco.editor.createWebWorker({ label: CONSOLE_LANG_ID, moduleId: '' }); + } + + public stop() { + if (this.worker) this.worker.dispose(); + } +} diff --git a/packages/kbn-monaco/src/console/index.ts b/packages/kbn-monaco/src/console/index.ts index 991d9afce240b..00f6cb68de64a 100644 --- a/packages/kbn-monaco/src/console/index.ts +++ b/packages/kbn-monaco/src/console/index.ts @@ -40,3 +40,7 @@ export const ConsoleOutputLang: LangModuleType = { lexerRules: consoleOutputLexerRules, languageConfiguration: consoleOutputLanguageConfiguration, }; + +export type { ParsedRequest } from './types'; +export { getParsedRequestsProvider } from './language'; +export { ConsoleParsedRequestsProvider } from './console_parsed_requests_provider'; diff --git a/packages/kbn-monaco/src/console/language.ts b/packages/kbn-monaco/src/console/language.ts index 64a9dee1996b7..ba597ea2f7078 100644 --- a/packages/kbn-monaco/src/console/language.ts +++ b/packages/kbn-monaco/src/console/language.ts @@ -6,14 +6,19 @@ * Side Public License, v 1. */ -import { ConsoleWorker } from './worker'; -import { WorkerProxyService } from '../ace_migration/worker_proxy'; +import { setupConsoleErrorsProvider } from './console_errors_provider'; +import { ConsoleWorkerProxyService } from './console_worker_proxy'; import { monaco } from '../monaco_imports'; import { CONSOLE_LANG_ID } from './constants'; -import { setupWorker } from '../ace_migration/setup_worker'; +import { ConsoleParsedRequestsProvider } from './console_parsed_requests_provider'; + +const workerProxyService = new ConsoleWorkerProxyService(); + +export const getParsedRequestsProvider = (model: monaco.editor.ITextModel | null) => { + return new ConsoleParsedRequestsProvider(workerProxyService, model); +}; -const OWNER = 'CONSOLE_GRAMMAR_CHECKER'; -const wps = new WorkerProxyService(); monaco.languages.onLanguage(CONSOLE_LANG_ID, async () => { - setupWorker(CONSOLE_LANG_ID, OWNER, wps); + workerProxyService.setup(); + setupConsoleErrorsProvider(workerProxyService); }); diff --git a/packages/kbn-monaco/src/console/parser.js b/packages/kbn-monaco/src/console/parser.js index 20884180b4260..5de69ffce0acc 100644 --- a/packages/kbn-monaco/src/console/parser.js +++ b/packages/kbn-monaco/src/console/parser.js @@ -12,7 +12,6 @@ export const createParser = () => { let at, // The index of the current character ch, // The current character - annos, // annotations escapee = { '"': '"', '\\': '\\', @@ -24,8 +23,44 @@ export const createParser = () => { t: '\t', }, text, - annotate = function (type, text) { - annos.push({ type: type, text: text, at: at }); + errors, + addError = function (text) { + errors.push({ text: text, offset: at }); + }, + requests, + requestStartOffset, + requestEndOffset, + getLastRequest = function() { + return requests.length > 0 ? requests.pop() : {}; + }, + addRequestStart = function() { + requestStartOffset = at - 1; + requests.push({ startOffset: requestStartOffset }); + }, + addRequestMethod = function(method) { + const lastRequest = getLastRequest(); + lastRequest.method = method; + requests.push(lastRequest); + requestEndOffset = at - 1; + }, + addRequestUrl = function(url) { + const lastRequest = getLastRequest(); + lastRequest.url = url; + requests.push(lastRequest); + requestEndOffset = at - 1; + }, + addRequestData = function(data) { + const lastRequest = getLastRequest(); + const dataArray = lastRequest.data || []; + dataArray.push(data); + lastRequest.data = dataArray; + requests.push(lastRequest); + requestEndOffset = at - 1; + }, + addRequestEnd = function() { + const lastRequest = getLastRequest(); + lastRequest.endOffset = requestEndOffset; + requests.push(lastRequest); }, error = function (m) { throw { @@ -373,14 +408,18 @@ export const createParser = () => { }, request = function () { white(); - method(); + addRequestStart(); + const parsedMethod = method(); + addRequestMethod(parsedMethod); strictWhite(); - url(); + const parsedUrl = url(); + addRequestUrl(parsedUrl ); strictWhite(); // advance to one new line newLine(); strictWhite(); if (ch == '{') { - object(); + const parsedObject = object(); + addRequestData(parsedObject); } // multi doc request strictWhite(); // advance to one new line @@ -388,11 +427,13 @@ export const createParser = () => { strictWhite(); while (ch == '{') { // another object - object(); + const parsedObject = object(); + addRequestData(parsedObject); strictWhite(); newLine(); strictWhite(); } + addRequestEnd(); }, comment = function () { while (ch == '#') { @@ -417,7 +458,7 @@ export const createParser = () => { request(); white(); } catch (e) { - annotate('error', e.message); + addError(e.message); // snap const substring = text.substr(at); const nextMatch = substring.search(/^POST|HEAD|GET|PUT|DELETE|PATCH/m); @@ -432,15 +473,16 @@ export const createParser = () => { text = source; at = 0; - annos = []; + errors = []; + requests = []; next(); multi_request(); white(); if (ch) { - annotate('error', 'Syntax error'); + addError('Syntax error'); } - result = { annotations: annos }; + result = { errors, requests }; return typeof reviver === 'function' ? (function walk(holder, key) { diff --git a/packages/kbn-monaco/src/console/parser.test.ts b/packages/kbn-monaco/src/console/parser.test.ts new file mode 100644 index 0000000000000..417fdd12e2c18 --- /dev/null +++ b/packages/kbn-monaco/src/console/parser.test.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { createParser } from './parser'; +import { ConsoleParserResult } from './types'; + +const parser = createParser(); +describe('console parser', () => { + it('returns errors if input is not correct', () => { + const input = 'Incorrect input'; + const parserResult = parser(input) as ConsoleParserResult; + // the parser logs 2 errors: for the unexpected method and a general syntax error + expect(parserResult.errors.length).toBe(2); + // the parser logs a beginning of the request that it's trying to parse + expect(parserResult.requests.length).toBe(1); + }); + + it('returns parsedRequests if the input is correct', () => { + const input = 'GET _search'; + const { requests, errors } = parser(input) as ConsoleParserResult; + expect(requests.length).toBe(1); + expect(errors.length).toBe(0); + const { method, url, startOffset, endOffset } = requests[0]; + expect(method).toBe('GET'); + expect(url).toBe('_search'); + // the start offset of the request is the beginning of the string + expect(startOffset).toBe(0); + // the end offset of the request is the end of the string + expect(endOffset).toBe(11); + }); + + it('parses several requests', () => { + const input = 'GET _search\nPOST _test_index'; + const { requests } = parser(input) as ConsoleParserResult; + expect(requests.length).toBe(2); + }); + + it('parses a request with a request body', () => { + const input = + 'GET _search\n' + '{\n' + ' "query": {\n' + ' "match_all": {}\n' + ' }\n' + '}'; + const { requests } = parser(input) as ConsoleParserResult; + expect(requests.length).toBe(1); + const { method, url, data } = requests[0]; + expect(method).toBe('GET'); + expect(url).toBe('_search'); + expect(data).toEqual([ + { + query: { + match_all: {}, + }, + }, + ]); + }); +}); diff --git a/packages/kbn-monaco/src/console/types.ts b/packages/kbn-monaco/src/console/types.ts new file mode 100644 index 0000000000000..000bff3526d0c --- /dev/null +++ b/packages/kbn-monaco/src/console/types.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface ErrorAnnotation { + offset: number; + text: string; +} + +export interface ParsedRequest { + startOffset: number; + endOffset: number; + method: string; + url: string; + data?: Array>; +} +export interface ConsoleParserResult { + errors: ErrorAnnotation[]; + requests: ParsedRequest[]; +} + +export interface ConsoleWorkerDefinition { + getParserResult: (modelUri: string) => ConsoleParserResult | undefined; +} +export type ConsoleParser = (source: string) => ConsoleParserResult | undefined; diff --git a/packages/kbn-monaco/src/console/worker/console_worker.ts b/packages/kbn-monaco/src/console/worker/console_worker.ts index 0e62994ad86f0..85e846e7b826f 100644 --- a/packages/kbn-monaco/src/console/worker/console_worker.ts +++ b/packages/kbn-monaco/src/console/worker/console_worker.ts @@ -8,20 +8,23 @@ /* eslint-disable-next-line @kbn/eslint/module_migration */ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; -import { Parser, ParseResult } from '../../ace_migration/types'; +import { ConsoleParserResult, ConsoleWorkerDefinition, ConsoleParser } from '../types'; import { createParser } from '../parser'; -export class ConsoleWorker { +export class ConsoleWorker implements ConsoleWorkerDefinition { + private parser: ConsoleParser | undefined; + private parserResult: ConsoleParserResult | undefined; + constructor(private ctx: monaco.worker.IWorkerContext) {} - private parser: Parser | undefined; - async parse(modelUri: string): Promise { + getParserResult(modelUri: string): ConsoleParserResult | undefined { if (!this.parser) { this.parser = createParser(); } const model = this.ctx.getMirrorModels().find((m) => m.uri.toString() === modelUri); if (model) { - return this.parser(model.getValue()); + this.parserResult = this.parser(model.getValue()); } + return this.parserResult; } } diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index f672f98288b2f..f1b24fb01b556 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -115,7 +115,7 @@ pageLoadAssetSize: presentationUtil: 58834 profiling: 36694 remoteClusters: 51327 - reporting: 57003 + reporting: 58600 rollup: 97204 runtimeFields: 41752 savedObjects: 108518 @@ -131,14 +131,14 @@ pageLoadAssetSize: searchPlayground: 19325 searchprofiler: 67080 security: 81771 - securitySolution: 82780 + securitySolution: 98429 securitySolutionEss: 16573 securitySolutionServerless: 62488 serverless: 16573 serverlessObservability: 68747 serverlessSearch: 72995 sessionView: 77750 - share: 71239 + share: 88160 slo: 37039 snapshotRestore: 79032 spaces: 57868 diff --git a/packages/kbn-profiling-utils/common/es_functions.ts b/packages/kbn-profiling-utils/common/es_functions.ts new file mode 100644 index 0000000000000..25b281142f7fd --- /dev/null +++ b/packages/kbn-profiling-utils/common/es_functions.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface Frame { + frame_type: number; + inline: boolean; + address_or_line: number; + function_name: string; + file_name: string; + line_number: number; + executable_file_name: string; +} + +interface TopNFunction { + id: string; + rank: number; + frame: Frame; + sub_groups: Record; + self_count: number; + total_count: number; + self_annual_co2_tons: number; + total_annual_co2_tons: number; + self_annual_costs_usd: number; + total_annual_costs_usd: number; +} + +export interface ESTopNFunctions { + self_count: number; + total_count: number; + self_annual_co2_tons: number; + self_annual_cost_usd: number; + topn: TopNFunction[]; +} + +export type AggregationField = 'service.name' | 'transaction.name'; diff --git a/packages/kbn-profiling-utils/common/functions.ts b/packages/kbn-profiling-utils/common/functions.ts index 7fcf8df2025ee..0aa7cde3ca023 100644 --- a/packages/kbn-profiling-utils/common/functions.ts +++ b/packages/kbn-profiling-utils/common/functions.ts @@ -49,6 +49,7 @@ type TopNFunction = Pick< > & { Id: string; Rank: number; + subGroups: Record; }; export interface TopNFunctions { @@ -207,6 +208,7 @@ export function createTopNFunctions({ selfAnnualCostUSD: frameAndCount.selfAnnualCostUSD, totalAnnualCO2kgs: frameAndCount.totalAnnualCO2kgs, totalAnnualCostUSD: frameAndCount.totalAnnualCostUSD, + subGroups: {}, }; }); diff --git a/packages/kbn-profiling-utils/index.ts b/packages/kbn-profiling-utils/index.ts index a2c582009c785..4978c65937388 100644 --- a/packages/kbn-profiling-utils/index.ts +++ b/packages/kbn-profiling-utils/index.ts @@ -53,3 +53,4 @@ export type { } from './common/profiling'; export type { ProfilingStatus } from './common/profiling_status'; export type { TopNFunctions } from './common/functions'; +export type { AggregationField, ESTopNFunctions } from './common/es_functions'; diff --git a/packages/kbn-reporting/get_csv_panel_actions/index.ts b/packages/kbn-reporting/get_csv_panel_actions/index.ts new file mode 100644 index 0000000000000..c15c604dc859e --- /dev/null +++ b/packages/kbn-reporting/get_csv_panel_actions/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { ReportingCsvPanelAction } from './panel_actions/get_csv_panel_action'; diff --git a/packages/kbn-reporting/get_csv_panel_actions/jest.config.js b/packages/kbn-reporting/get_csv_panel_actions/jest.config.js new file mode 100644 index 0000000000000..3322e94a6aa4d --- /dev/null +++ b/packages/kbn-reporting/get_csv_panel_actions/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/packages/kbn-reporting/get_csv_panel_actions'], +}; diff --git a/packages/kbn-reporting/get_csv_panel_actions/kibana.jsonc b/packages/kbn-reporting/get_csv_panel_actions/kibana.jsonc new file mode 100644 index 0000000000000..a37c3dbc2d61b --- /dev/null +++ b/packages/kbn-reporting/get_csv_panel_actions/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-browser", + "id": "@kbn/reporting-csv-share-panel", + "owner": "@elastic/appex-sharedux" +} diff --git a/packages/kbn-reporting/get_csv_panel_actions/package.json b/packages/kbn-reporting/get_csv_panel_actions/package.json new file mode 100644 index 0000000000000..3842e94ea7551 --- /dev/null +++ b/packages/kbn-reporting/get_csv_panel_actions/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/reporting-csv-share-panel", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.test.ts b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts similarity index 98% rename from packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.test.ts rename to packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts index c009bb4be965d..b057d81cfc877 100644 --- a/packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.test.ts +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts @@ -16,8 +16,8 @@ import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { LicenseCheckState } from '@kbn/licensing-plugin/public'; import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; -import { ReportingAPIClient } from '../..'; -import type { ClientConfigType } from '../../types'; +import { ReportingAPIClient } from '@kbn/reporting-public'; +import type { ClientConfigType } from '@kbn/reporting-public/types'; import { ActionContext, type PanelActionDependencies, diff --git a/packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx similarity index 97% rename from packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.tsx rename to packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx index 96ed679a1e18e..cd34d64a8429a 100644 --- a/packages/kbn-reporting/public/share/panel_actions/get_csv_panel_action.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx @@ -28,9 +28,9 @@ import type { UiActionsActionDefinition as ActionDefinition } from '@kbn/ui-acti import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { CSV_REPORTING_ACTION, JobAppParamsCSV } from '@kbn/reporting-export-types-csv-common'; -import type { ClientConfigType } from '../../types'; -import { checkLicense } from '../../license_check'; -import type { ReportingAPIClient } from '../../reporting_api_client'; +import type { ClientConfigType } from '@kbn/reporting-public/types'; +import { checkLicense } from '@kbn/reporting-public/license_check'; +import type { ReportingAPIClient } from '@kbn/reporting-public/reporting_api_client'; import { getI18nStrings } from './strings'; function isSavedSearchEmbeddable( diff --git a/packages/kbn-reporting/public/share/panel_actions/strings.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/strings.tsx similarity index 97% rename from packages/kbn-reporting/public/share/panel_actions/strings.tsx rename to packages/kbn-reporting/get_csv_panel_actions/panel_actions/strings.tsx index 729d0265d4206..d06ff717dbe1f 100644 --- a/packages/kbn-reporting/public/share/panel_actions/strings.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/strings.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { ReportingAPIClient } from '../../reporting_api_client'; +import type { ReportingAPIClient } from '@kbn/reporting-public/reporting_api_client'; interface I18nStrings { displayName: string; diff --git a/packages/kbn-reporting/get_csv_panel_actions/tsconfig.json b/packages/kbn-reporting/get_csv_panel_actions/tsconfig.json new file mode 100644 index 0000000000000..39839a3e9768d --- /dev/null +++ b/packages/kbn-reporting/get_csv_panel_actions/tsconfig.json @@ -0,0 +1,31 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", "**/*.tsx" + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/data-plugin", + "@kbn/i18n", + "@kbn/reporting-export-types-csv-common", + "@kbn/licensing-plugin", + "@kbn/i18n-react", + "@kbn/discover-utils", + "@kbn/saved-search-plugin", + "@kbn/discover-plugin", + "@kbn/embeddable-plugin", + "@kbn/ui-actions-plugin", + "@kbn/react-kibana-mount", + "@kbn/reporting-public", + ] +} diff --git a/packages/kbn-reporting/public/share/index.ts b/packages/kbn-reporting/public/share/index.ts index 2a1c9adc2a7f8..7c7b6819afc07 100644 --- a/packages/kbn-reporting/public/share/index.ts +++ b/packages/kbn-reporting/public/share/index.ts @@ -7,7 +7,9 @@ */ export { getSharedComponents } from './shared'; +export { reportingExportModalProvider } from './share_context_menu/register_pdf_png_modal_reporting'; export { reportingScreenshotShareProvider } from './share_context_menu/register_pdf_png_reporting'; export { reportingCsvShareProvider } from './share_context_menu/register_csv_reporting'; -export { ReportingCsvPanelAction } from './panel_actions/get_csv_panel_action'; +export { reportingCsvShareProvider as reportingCsvShareModalProvider } from './share_context_menu/register_csv_modal_reporting'; export type { ReportingPublicComponents } from './shared/get_shared_components'; +export type { JobParamsProviderOptions } from './share_context_menu'; diff --git a/packages/kbn-reporting/public/share/share_context_menu/index.ts b/packages/kbn-reporting/public/share/share_context_menu/index.ts index 22503eae119cb..1259aee0008ad 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/index.ts +++ b/packages/kbn-reporting/public/share/share_context_menu/index.ts @@ -8,6 +8,7 @@ import type { ApplicationStart, + I18nStart, IUiSettingsClient, ThemeServiceSetup, ToastsSetup, @@ -16,6 +17,16 @@ import { ILicense } from '@kbn/licensing-plugin/public'; import type { LayoutParams } from '@kbn/screenshotting-plugin/common'; import type { ReportingAPIClient } from '../../reporting_api_client'; +export interface ExportModalShareOpts { + apiClient: ReportingAPIClient; + uiSettings: IUiSettingsClient; + usesUiCapabilities: boolean; + license: ILicense; + application: ApplicationStart; + theme: ThemeServiceSetup; + i18n: I18nStart; +} + export interface ExportPanelShareOpts { apiClient: ReportingAPIClient; toasts: ToastsSetup; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx new file mode 100644 index 0000000000000..7525c714de7b2 --- /dev/null +++ b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx @@ -0,0 +1,188 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { toMountPoint } from '@kbn/react-kibana-mount'; + +import { CSV_JOB_TYPE, CSV_JOB_TYPE_V2 } from '@kbn/reporting-export-types-csv-common'; + +import type { SearchSourceFields } from '@kbn/data-plugin/common'; +import { ShareContext, ShareMenuItem } from '@kbn/share-plugin/public'; +import { FormattedMessage, InjectedIntl } from '@kbn/i18n-react'; +import type { ExportModalShareOpts } from '.'; +import { checkLicense } from '../..'; + +export const reportingCsvShareProvider = ({ + apiClient, + application, + license, + usesUiCapabilities, + i18n: i18nStart, + theme, +}: ExportModalShareOpts) => { + const getShareMenuItems = ({ objectType, sharingData, toasts }: ShareContext) => { + if ('search' !== objectType) { + return []; + } + + // only csv v2 supports esql (isTextBased) reports + // TODO: whole csv reporting should move to v2 https://github.com/elastic/kibana/issues/151190 + const reportType = sharingData.isTextBased ? CSV_JOB_TYPE_V2 : CSV_JOB_TYPE; + + const getSearchSource = sharingData.getSearchSource as ({ + addGlobalTimeFilter, + absoluteTime, + }: { + addGlobalTimeFilter?: boolean; + absoluteTime?: boolean; + }) => SearchSourceFields; + + const jobParams = { + title: sharingData.title as string, + objectType, + }; + + const getJobParams = (forShareUrl?: boolean) => { + if (reportType === CSV_JOB_TYPE_V2) { + // csv v2 uses locator params + return { + ...jobParams, + locatorParams: sharingData.locatorParams as [Record], + }; + } + + // csv v1 uses search source and columns + return { + ...jobParams, + columns: sharingData.columns as string[] | undefined, + searchSource: getSearchSource({ + addGlobalTimeFilter: true, + absoluteTime: !forShareUrl, + }), + }; + }; + + const shareActions: ShareMenuItem[] = []; + + const licenseCheck = checkLicense(license.check('reporting', 'basic')); + const licenseToolTipContent = licenseCheck.message; + const licenseHasCsvReporting = licenseCheck.showLinks; + const licenseDisabled = !licenseCheck.enableLinks; + + let capabilityHasCsvReporting = false; + if (usesUiCapabilities) { + capabilityHasCsvReporting = application.capabilities.discover?.generateCsv === true; + } else { + capabilityHasCsvReporting = true; // deprecated + } + + const generateReportingJobCSV = ({ intl }: { intl: InjectedIntl }) => { + const decoratedJobParams = apiClient.getDecoratedJobParams(getJobParams()); + return apiClient + .createReportingJob(reportType, decoratedJobParams) + .then(() => { + toasts.addSuccess({ + title: intl.formatMessage( + { + id: 'reporting.share.modalContent.successfullyQueuedReportNotificationTitle', + defaultMessage: 'Queued report for {objectType}', + }, + { objectType } + ), + text: toMountPoint( + + + + ), + }} + />, + { theme, i18n: i18nStart } + ), + 'data-test-subj': 'queueReportSuccess', + }); + }) + .catch((error) => { + toasts.addError(error, { + title: intl.formatMessage({ + id: 'reporting.share.modalContent.notification.reportingErrorTitle', + defaultMessage: 'Unable to create report', + }), + toastMessage: error.body?.message, + }); + }); + }; + + if (licenseHasCsvReporting && capabilityHasCsvReporting) { + const panelTitle = i18n.translate( + 'reporting.share.contextMenu.export.csvReportsButtonLabel', + { + defaultMessage: 'Export', + } + ); + + const reportingUrl = new URL(window.location.origin); + + const relativePath = apiClient.getReportingPublicJobPath( + reportType, + apiClient.getDecoratedJobParams(getJobParams()) + ); + + const absoluteUrl = new URL(relativePath, window.location.href).toString(); + + shareActions.push({ + shareMenuItem: { + name: panelTitle, + toolTipContent: licenseToolTipContent, + disabled: licenseDisabled, + ['data-test-subj']: 'Export', + }, + helpText: ( + + ), + reportType, + label: 'CSV', + copyURLButton: { + id: 'reporting.share.modalContent.csv.copyUrlButtonLabel', + dataTestSubj: 'shareReportingCopyURL', + label: 'Post URL', + }, + generateReportButton: ( + + ), + generateReport: generateReportingJobCSV, + generateCopyUrl: reportingUrl, + absoluteUrl, + renderCopyURLButton: true, + }); + } + + return shareActions; + }; + + return { + id: 'csvReportsModal', + getShareMenuItems, + }; +}; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_csv_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_csv_reporting.tsx index 2de8abe723a86..58c380a2201e4 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_csv_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_csv_reporting.tsx @@ -12,7 +12,7 @@ import React from 'react'; import { CSV_JOB_TYPE, CSV_JOB_TYPE_V2 } from '@kbn/reporting-export-types-csv-common'; import type { SearchSourceFields } from '@kbn/data-plugin/common'; -import { ShareContext, ShareMenuProvider } from '@kbn/share-plugin/public'; +import { ShareContext, ShareMenuItem, ShareMenuProvider } from '@kbn/share-plugin/public'; import type { ExportPanelShareOpts } from '.'; import { checkLicense } from '../..'; import { ReportingPanelContent } from './reporting_panel_content_lazy'; @@ -68,7 +68,7 @@ export const reportingCsvShareProvider = ({ }; }; - const shareActions = []; + const shareActions: ShareMenuItem[] = []; const licenseCheck = checkLicense(license.check('reporting', 'basic')); const licenseToolTipContent = licenseCheck.message; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx new file mode 100644 index 0000000000000..1761b8df45878 --- /dev/null +++ b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx @@ -0,0 +1,461 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { ShareContext, ShareMenuItem, ShareMenuProvider } from '@kbn/share-plugin/public'; +import { FormattedMessage, InjectedIntl } from '@kbn/i18n-react'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import { checkLicense } from '../../license_check'; +import { + ExportModalShareOpts, + ExportPanelShareOpts, + JobParamsProviderOptions, + ReportingSharingData, +} from '.'; +import { ScreenCapturePanelContent } from './screen_capture_panel_content_lazy'; + +const getJobParams = (opts: JobParamsProviderOptions, type: 'pngV2' | 'printablePdfV2') => () => { + const { + objectType, + sharingData: { title, layout, locatorParams }, + } = opts; + + const baseParams = { + objectType, + layout, + title, + }; + + if (type === 'printablePdfV2') { + // multi locator for PDF V2 + return { ...baseParams, locatorParams: [locatorParams] }; + } + // single locator for PNG V2 + return { ...baseParams, locatorParams }; +}; + +/** + * This is used by Canvas + */ +export const reportingScreenshotShareProvider = ({ + apiClient, + toasts, + uiSettings, + license, + application, + usesUiCapabilities, + theme, +}: ExportPanelShareOpts): ShareMenuProvider => { + const getShareMenuItems = ({ + objectType, + objectId, + isDirty, + onClose, + shareableUrl, + shareableUrlForSavedObject, + ...shareOpts + }: ShareContext) => { + const { enableLinks, showLinks, message } = checkLicense(license.check('reporting', 'gold')); + const licenseToolTipContent = message; + const licenseHasScreenshotReporting = showLinks; + const licenseDisabled = !enableLinks; + + let capabilityHasDashboardScreenshotReporting = false; + let capabilityHasVisualizeScreenshotReporting = false; + if (usesUiCapabilities) { + capabilityHasDashboardScreenshotReporting = + application.capabilities.dashboard?.generateScreenshot === true; + capabilityHasVisualizeScreenshotReporting = + application.capabilities.visualize?.generateScreenshot === true; + } else { + // deprecated + capabilityHasDashboardScreenshotReporting = true; + capabilityHasVisualizeScreenshotReporting = true; + } + + if (!licenseHasScreenshotReporting) { + return []; + } + const isSupportedType = ['dashboard', 'visualization', 'lens'].includes(objectType); + + if (!isSupportedType) { + return []; + } + + if (objectType === 'dashboard' && !capabilityHasDashboardScreenshotReporting) { + return []; + } + + if ( + isSupportedType && + !capabilityHasVisualizeScreenshotReporting && + !capabilityHasDashboardScreenshotReporting + ) { + return []; + } + + const { sharingData } = shareOpts as unknown as { sharingData: ReportingSharingData }; + const shareActions: ShareMenuItem[] = []; + + const pngPanelTitle = i18n.translate('reporting.share.contextMenu.pngReportsButtonLabel', { + defaultMessage: 'PNG Reports', + }); + + const jobProviderOptions: JobParamsProviderOptions = { + shareableUrl: isDirty ? shareableUrl : shareableUrlForSavedObject ?? shareableUrl, + objectType, + sharingData, + }; + const isJobV2Params = ({ + sharingData: _sharingData, + }: { + sharingData: Record; + }) => _sharingData.locatorParams != null; + + const isV2Job = isJobV2Params(jobProviderOptions); + const requiresSavedState = !isV2Job; + + const panelPng = { + shareMenuItem: { + name: pngPanelTitle, + icon: 'document', + toolTipContent: licenseToolTipContent, + disabled: licenseDisabled || sharingData.reportingDisabled, + ['data-test-subj']: 'PNGReports', + sortOrder: 10, + }, + panel: { + id: 'reportingPngPanel', + title: pngPanelTitle, + content: ( + + ), + }, + }; + + const pdfPanelTitle = i18n.translate('reporting.share.contextMenu.pdfReportsButtonLabel', { + defaultMessage: 'PDF Reports', + }); + + const panelPdf = { + shareMenuItem: { + name: pdfPanelTitle, + icon: 'document', + toolTipContent: licenseToolTipContent, + disabled: licenseDisabled || sharingData.reportingDisabled, + ['data-test-subj']: 'PDFReports', + sortOrder: 10, + }, + panel: { + id: 'reportingPdfPanel', + title: pdfPanelTitle, + content: ( + + ), + }, + }; + + shareActions.push(panelPng); + shareActions.push(panelPdf); + return shareActions; + }; + + return { + id: 'screenCaptureReports', + getShareMenuItems, + }; +}; + +export const reportingExportModalProvider = ({ + apiClient, + license, + application, + usesUiCapabilities, + theme, + i18n: i18nStart, +}: ExportModalShareOpts): ShareMenuProvider => { + const getShareMenuItems = ({ + objectType, + objectId, + isDirty, + onClose, + shareableUrl, + shareableUrlForSavedObject, + toasts, + ...shareOpts + }: ShareContext) => { + const { enableLinks, showLinks, message } = checkLicense(license.check('reporting', 'gold')); + const licenseToolTipContent = message; + const licenseHasScreenshotReporting = showLinks; + const licenseDisabled = !enableLinks; + + let capabilityHasDashboardScreenshotReporting = false; + let capabilityHasVisualizeScreenshotReporting = false; + if (usesUiCapabilities) { + capabilityHasDashboardScreenshotReporting = + application.capabilities.dashboard?.generateScreenshot === true; + capabilityHasVisualizeScreenshotReporting = + application.capabilities.visualize?.generateScreenshot === true; + } else { + // deprecated + capabilityHasDashboardScreenshotReporting = true; + capabilityHasVisualizeScreenshotReporting = true; + } + + if (!licenseHasScreenshotReporting) { + return []; + } + // for lens png pdf and csv are combined into one modal + const isSupportedType = ['dashboard', 'visualization', 'lens'].includes(objectType); + + if (!isSupportedType) { + return []; + } + + if (objectType === 'dashboard' && !capabilityHasDashboardScreenshotReporting) { + return []; + } + + if ( + isSupportedType && + !capabilityHasVisualizeScreenshotReporting && + !capabilityHasDashboardScreenshotReporting + ) { + return []; + } + + const { sharingData } = shareOpts as unknown as { sharingData: ReportingSharingData }; + const shareActions: ShareMenuItem[] = []; + + const jobProviderOptions: JobParamsProviderOptions = { + shareableUrl: isDirty ? shareableUrl : shareableUrlForSavedObject ?? shareableUrl, + objectType, + sharingData, + }; + + const requiresSavedState = sharingData.locatorParams === null; + + const relativePathPDF = apiClient.getReportingPublicJobPath( + 'printablePdfV2', + apiClient.getDecoratedJobParams(getJobParams(jobProviderOptions, 'printablePdfV2')()) + ); + + const relativePathPNG = apiClient.getReportingPublicJobPath( + 'pngV2', + apiClient.getDecoratedJobParams(getJobParams(jobProviderOptions, 'pngV2')()) + ); + + const generateReportPDF = ({ + intl, + optimizedForPrinting = false, + }: { + intl: InjectedIntl; + optimizedForPrinting?: boolean; + }) => { + const el = document.querySelector('[data-shared-items-container]'); + const { height, width } = el ? el.getBoundingClientRect() : { height: 768, width: 1024 }; + const dimensions = { height, width }; + + const decoratedJobParams = apiClient.getDecoratedJobParams({ + ...getJobParams(jobProviderOptions, 'printablePdfV2')(), + layout: { id: optimizedForPrinting ? 'print' : 'preserve_layout', dimensions }, + objectType, + title: sharingData.title, + }); + + return apiClient + .createReportingJob('printablePdfV2', decoratedJobParams) + .then(() => { + toasts.addSuccess({ + title: intl.formatMessage( + { + id: 'reporting.share.modalContent.successfullyQueuedReportNotificationTitle', + defaultMessage: 'Queued report for {objectType}', + }, + { objectType } + ), + text: toMountPoint( + + + + ), + }} + />, + { theme, i18n: i18nStart } + ), + 'data-test-subj': 'queueReportSuccess', + }); + }) + .catch((error: any) => { + toasts.addError(error, { + title: intl.formatMessage({ + id: 'reporting.share.modalContent.notification.reportingErrorTitle', + defaultMessage: 'Unable to create report', + }), + toastMessage: error.body?.message, + }); + }); + }; + + const generateReportPNG = ({ intl }: { intl: InjectedIntl }) => { + const el = document.querySelector('[data-shared-items-container]'); + const { height, width } = el ? el.getBoundingClientRect() : { height: 768, width: 1024 }; + const dimensions = { height, width }; + + const decoratedJobParams = apiClient.getDecoratedJobParams({ + ...getJobParams(jobProviderOptions, 'pngV2')(), + layout: { id: 'preserve_layout', dimensions }, + objectType, + title: sharingData.title, + }); + return apiClient + .createReportingJob('pngV2', decoratedJobParams) + .then(() => { + toasts.addSuccess({ + title: intl.formatMessage( + { + id: 'reporting.share.modalContent.successfullyQueuedReportNotificationTitle', + defaultMessage: 'Queued report for {objectType}', + }, + { objectType } + ), + text: toMountPoint( + + + + ), + }} + />, + { theme, i18n: i18nStart } + ), + 'data-test-subj': 'queueReportSuccess', + }); + }) + .catch((error: any) => { + toasts.addError(error, { + title: intl.formatMessage({ + id: 'reporting.share.modalContent.notification.reportingErrorTitle', + defaultMessage: 'Unable to create report', + }), + toastMessage: error.body?.message, + }); + }); + }; + + shareActions.push({ + shareMenuItem: { + name: i18n.translate('reporting.shareContextMenu.ExportsButtonLabel', { + defaultMessage: 'PDF', + }), + toolTipContent: licenseToolTipContent, + disabled: licenseDisabled || sharingData.reportingDisabled, + ['data-test-subj']: 'imageExports', + }, + label: 'PDF' as const, + generateReport: generateReportPDF, + reportType: 'printablePdfV2', + requiresSavedState, + helpText: ( + + ), + generateReportButton: ( + + ), + layoutOption: objectType === 'dashboard' ? ('print' as const) : undefined, + theme, + renderLayoutOptionSwitch: objectType === 'dashboard', + renderCopyURLButton: true, + absoluteUrl: new URL(relativePathPDF, window.location.href).toString(), + }); + + shareActions.push({ + shareMenuItem: { + name: i18n.translate('reporting.shareContextMenu.ExportsButtonLabelPNG', { + defaultMessage: 'PNG export', + }), + toolTipContent: licenseToolTipContent, + disabled: licenseDisabled || sharingData.reportingDisabled, + ['data-test-subj']: 'imageExports', + }, + label: 'PNG' as const, + generateReport: generateReportPNG, + reportType: 'pngV2', + requiresSavedState, + helpText: ( + + ), + generateReportButton: ( + + ), + layoutOption: objectType === 'dashboard' ? ('print' as const) : undefined, + renderCopyURLButton: true, + absoluteUrl: new URL(relativePathPNG, window.location.href).toString(), + }); + + return shareActions; + }; + + return { + id: 'modalImageReports', + getShareMenuItems, + }; +}; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_reporting.tsx index cd75ab11e764c..6446efb787f66 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_reporting.tsx @@ -7,7 +7,7 @@ */ import { i18n } from '@kbn/i18n'; -import { ShareContext, ShareMenuProvider } from '@kbn/share-plugin/public'; +import { ShareContext, ShareMenuItem, ShareMenuProvider } from '@kbn/share-plugin/public'; import React from 'react'; import { ExportPanelShareOpts, JobParamsProviderOptions, ReportingSharingData } from '.'; import { ReportingAPIClient, checkLicense } from '../..'; @@ -113,7 +113,7 @@ export const reportingScreenshotShareProvider = ({ } const { sharingData } = shareOpts as unknown as { sharingData: ReportingSharingData }; - const shareActions = []; + const shareActions: ShareMenuItem[] = []; const pngPanelTitle = i18n.translate('reporting.share.contextMenu.pngReportsButtonLabel', { defaultMessage: 'PNG Reports', diff --git a/packages/kbn-reporting/public/share/shared/get_shared_components.tsx b/packages/kbn-reporting/public/share/shared/get_shared_components.tsx index 0fc0f2ad10ab3..e9a4499071d97 100644 --- a/packages/kbn-reporting/public/share/shared/get_shared_components.tsx +++ b/packages/kbn-reporting/public/share/shared/get_shared_components.tsx @@ -7,21 +7,19 @@ */ import { CoreSetup } from '@kbn/core/public'; -import React from 'react'; - -import { PDF_REPORT_TYPE, PDF_REPORT_TYPE_V2 } from '@kbn/reporting-export-types-pdf-common'; +import { PDF_REPORT_TYPE_V2 } from '@kbn/reporting-export-types-pdf-common'; import { PNG_REPORT_TYPE_V2 } from '@kbn/reporting-export-types-png-common'; - -import { ReportingAPIClient } from '../../reporting_api_client'; +import React from 'react'; +import { ReportingAPIClient } from '../..'; import { ReportingPanelProps } from '../share_context_menu/reporting_panel_content'; import { ScreenCapturePanelContent } from '../share_context_menu/screen_capture_panel_content_lazy'; - /** * Properties for displaying a share menu with Reporting features. */ export interface ApplicationProps { /** * A function that Reporting calls to get the sharing data from the application. + * Needed for CSV exports and Canvas PDF reports. */ getJobParams: ReportingPanelProps['getJobParams']; @@ -41,25 +39,12 @@ export interface ApplicationProps { onClose: () => void; } -/** - * React components used to display share menus with Reporting features in an application. - */ export interface ReportingPublicComponents { - /** - * An element to display a form to export the page as PDF - * @deprecated - */ - ReportingPanelPDF(props: ApplicationProps): JSX.Element; - - /** - * An element to display a form to export the page as PDF - */ - ReportingPanelPDFV2(props: ApplicationProps): JSX.Element; - - /** - * An element to display a form to export the page as PNG - */ - ReportingPanelPNGV2(props: ApplicationProps): JSX.Element; + /** Needed for Canvas PDF reports */ + ReportingPanelPDFV2(props: ApplicationProps): JSX.Element | null; + ReportingPanelPNGV2(props: ApplicationProps): JSX.Element | undefined; + ReportingModalPDF(props: ApplicationProps): JSX.Element | undefined; + ReportingModalPNG(props: ApplicationProps): JSX.Element | undefined; } /** @@ -72,44 +57,79 @@ export function getSharedComponents( apiClient: ReportingAPIClient ): ReportingPublicComponents { return { - ReportingPanelPDF(props: ApplicationProps) { - return ( - - ); - }, ReportingPanelPDFV2(props: ApplicationProps) { - return ( - - ); + const getJobParams = props.getJobParams as ReportingPanelProps['getJobParams']; + if (props.layoutOption === 'canvas') { + return ( + + ); + } else { + return null; + } }, ReportingPanelPNGV2(props: ApplicationProps) { - return ( - - ); + const getJobParams = props.getJobParams as ReportingPanelProps['getJobParams']; + if (props.layoutOption === 'canvas') { + return ( + + ); + } + }, + ReportingModalPDF(props: ApplicationProps) { + const getJobParams = props.getJobParams as ReportingPanelProps['getJobParams']; + if (props.layoutOption === 'canvas') { + return ( + + ); + } + }, + ReportingModalPNG(props: ApplicationProps) { + const getJobParams = props.getJobParams as ReportingPanelProps['getJobParams']; + if (props.layoutOption === 'canvas') { + return ( + + ); + } }, }; } diff --git a/packages/kbn-reporting/public/tsconfig.json b/packages/kbn-reporting/public/tsconfig.json index 83f8f2f9d5d5e..7b36e7eeeb616 100644 --- a/packages/kbn-reporting/public/tsconfig.json +++ b/packages/kbn-reporting/public/tsconfig.json @@ -30,11 +30,6 @@ "@kbn/screenshotting-plugin", "@kbn/i18n-react", "@kbn/test-jest-helpers", - "@kbn/discover-utils", - "@kbn/saved-search-plugin", - "@kbn/discover-plugin", - "@kbn/embeddable-plugin", - "@kbn/ui-actions-plugin", "@kbn/react-kibana-mount", ] } diff --git a/packages/kbn-router-to-openapispec/README.md b/packages/kbn-router-to-openapispec/README.md new file mode 100644 index 0000000000000..243a12ee1f27c --- /dev/null +++ b/packages/kbn-router-to-openapispec/README.md @@ -0,0 +1,3 @@ +# @kbn/router-to-openapispec + +Generate OAS from router definitions. \ No newline at end of file diff --git a/packages/kbn-router-to-openapispec/index.ts b/packages/kbn-router-to-openapispec/index.ts new file mode 100644 index 0000000000000..47b1ea6920bb1 --- /dev/null +++ b/packages/kbn-router-to-openapispec/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { generateOpenApiDocument } from './src/generate_oas'; diff --git a/packages/kbn-router-to-openapispec/jest.config.js b/packages/kbn-router-to-openapispec/jest.config.js new file mode 100644 index 0000000000000..9427b99e9dfcd --- /dev/null +++ b/packages/kbn-router-to-openapispec/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-router-to-openapispec'], +}; diff --git a/packages/kbn-router-to-openapispec/kibana.jsonc b/packages/kbn-router-to-openapispec/kibana.jsonc new file mode 100644 index 0000000000000..909e9076bb285 --- /dev/null +++ b/packages/kbn-router-to-openapispec/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/router-to-openapispec", + "owner": "@elastic/kibana-core" +} diff --git a/packages/kbn-router-to-openapispec/package.json b/packages/kbn-router-to-openapispec/package.json new file mode 100644 index 0000000000000..98972fe8e2c83 --- /dev/null +++ b/packages/kbn-router-to-openapispec/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/router-to-openapispec", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap new file mode 100644 index 0000000000000..1ef62beffd8ac --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap @@ -0,0 +1,348 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`generateOpenApiDocument @kbn/config-schema generates references in the expected format 1`] = ` +Object { + "components": Object { + "schemas": Object { + "my.name": Object { + "minLength": 1, + "type": "string", + }, + }, + }, + "externalDocs": undefined, + "info": Object { + "description": undefined, + "title": "test", + "version": "99.99.99", + }, + "openapi": "3.0.0", + "paths": Object { + "/foo/{id}": Object { + "get": Object { + "operationId": "/foo/{id}#0", + "parameters": Array [ + Object { + "in": "header", + "name": "elastic-api-version", + "schema": Object { + "default": "2023-10-31", + "enum": Array [ + "2023-10-31", + ], + "type": "string", + }, + }, + Object { + "description": undefined, + "in": "path", + "name": "id", + "required": true, + "schema": Object { + "minLength": 1, + "type": "string", + }, + }, + ], + "requestBody": Object { + "content": Object { + "application/json; Elastic-Api-Version=2023-10-31": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "name": Object { + "$ref": "#/components/schemas/my.name", + }, + "other": Object { + "type": "string", + }, + }, + "required": Array [ + "name", + "other", + ], + "type": "object", + }, + }, + }, + }, + "responses": Object { + "200": Object { + "content": Object { + "application/json; Elastic-Api-Version=2023-10-31": Object { + "schema": Object { + "maxLength": 10, + "minLength": 1, + "type": "string", + }, + }, + }, + "description": "No description", + }, + }, + }, + }, + }, + "security": Array [ + Object { + "basicAuth": Array [], + }, + Object { + "apiKeyAuth": Array [], + }, + ], + "servers": Array [ + Object { + "url": "https://test.oas", + }, + ], + "tags": undefined, +} +`; + +exports[`generateOpenApiDocument @kbn/config-schema generates the expected OpenAPI document 1`] = ` +Object { + "components": Object { + "schemas": Object {}, + }, + "externalDocs": undefined, + "info": Object { + "description": undefined, + "title": "test", + "version": "99.99.99", + }, + "openapi": "3.0.0", + "paths": Object { + "/bar": Object { + "get": Object { + "operationId": "/bar#0", + "parameters": Array [ + Object { + "in": "header", + "name": "elastic-api-version", + "schema": Object { + "default": "oas-test-version-2", + "enum": Array [ + "oas-test-version-1", + "oas-test-version-2", + ], + "type": "string", + }, + }, + ], + "requestBody": Object { + "content": Object { + "application/json; Elastic-Api-Version=oas-test-version-1": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "foo": Object { + "type": "string", + }, + }, + "required": Array [ + "foo", + ], + "type": "object", + }, + }, + "application/json; Elastic-Api-Version=oas-test-version-2": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "foo": Object { + "type": "string", + }, + }, + "required": Array [ + "foo", + ], + "type": "object", + }, + }, + }, + }, + "responses": Object { + "200": Object { + "content": Object { + "application/json; Elastic-Api-Version=oas-test-version-1": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "fooResponse": Object { + "type": "string", + }, + }, + "required": Array [ + "fooResponse", + ], + "type": "object", + }, + }, + "application/json; Elastic-Api-Version=oas-test-version-2": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "fooResponse": Object { + "type": "string", + }, + }, + "required": Array [ + "fooResponse", + ], + "type": "object", + }, + }, + }, + "description": "No description", + }, + }, + }, + }, + "/foo/{id}": Object { + "get": Object { + "operationId": "/foo/{id}#0", + "parameters": Array [ + Object { + "in": "header", + "name": "elastic-api-version", + "schema": Object { + "default": "2023-10-31", + "enum": Array [ + "2023-10-31", + ], + "type": "string", + }, + }, + Object { + "description": undefined, + "in": "path", + "name": "id", + "required": true, + "schema": Object { + "maxLength": 36, + "type": "string", + }, + }, + Object { + "description": undefined, + "in": "query", + "name": "page", + "required": false, + "schema": Object { + "default": 1, + "maximum": 999, + "minimum": 1, + "type": "number", + }, + }, + ], + "requestBody": Object { + "content": Object { + "application/json; Elastic-Api-Version=2023-10-31": Object { + "schema": Object { + "additionalProperties": false, + "properties": Object { + "booleanDefault": Object { + "default": true, + "description": "defaults to to true", + "type": "boolean", + }, + "ipType": Object { + "format": "ipv4", + "type": "string", + }, + "literalType": Object { + "enum": Array [ + "literallythis", + ], + "type": "string", + }, + "map": Object { + "additionalProperties": Object { + "type": "string", + }, + "type": "object", + }, + "maybeNumber": Object { + "maximum": 1000, + "minimum": 1, + "type": "number", + }, + "record": Object { + "additionalProperties": Object { + "type": "string", + }, + "type": "object", + }, + "string": Object { + "maxLength": 10, + "minLength": 1, + "type": "string", + }, + "union": Object { + "anyOf": Array [ + Object { + "description": "Union string", + "maxLength": 1, + "type": "string", + }, + Object { + "description": "Union number", + "minimum": 0, + "type": "number", + }, + ], + }, + "uri": Object { + "default": "prototest://something", + "format": "uri", + "type": "string", + }, + }, + "required": Array [ + "string", + "ipType", + "literalType", + "map", + "record", + "union", + ], + "type": "object", + }, + }, + }, + }, + "responses": Object { + "200": Object { + "content": Object { + "application/json; Elastic-Api-Version=2023-10-31": Object { + "schema": Object { + "maxLength": 10, + "minLength": 1, + "type": "string", + }, + }, + }, + "description": "No description", + }, + }, + }, + }, + }, + "security": Array [ + Object { + "basicAuth": Array [], + }, + Object { + "apiKeyAuth": Array [], + }, + ], + "servers": Array [ + Object { + "url": "https://test.oas", + }, + ], + "tags": undefined, +} +`; diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.test.ts b/packages/kbn-router-to-openapispec/src/generate_oas.test.ts new file mode 100644 index 0000000000000..fccf60f9a9fcb --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/generate_oas.test.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 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 { generateOpenApiDocument } from './generate_oas'; +import { schema } from '@kbn/config-schema'; +import { createTestRouters, createRouter } from './generate_oas.test.util'; + +describe('generateOpenApiDocument', () => { + describe('@kbn/config-schema', () => { + it('generates the expected OpenAPI document', () => { + const [routers, versionedRouters] = createTestRouters(); + expect( + generateOpenApiDocument( + { + routers, + versionedRouters, + }, + { + title: 'test', + baseUrl: 'https://test.oas', + version: '99.99.99', + } + ) + ).toMatchSnapshot(); + }); + + it('generates references in the expected format', () => { + const sharedIdSchema = schema.string({ minLength: 1, meta: { id: 'my.id' } }); + const sharedNameSchema = schema.string({ minLength: 1, meta: { id: 'my.name' } }); + const otherSchema = schema.object({ name: sharedNameSchema, other: schema.string() }); + expect( + generateOpenApiDocument( + { + routers: [ + createRouter({ + routes: [ + { + isVersioned: false, + path: '/foo/{id}', + method: 'get', + validationSchemas: { + request: { + params: schema.object({ id: sharedIdSchema }), + body: otherSchema, + }, + response: { + 200: { + body: schema.string({ maxLength: 10, minLength: 1 }), + }, + }, + }, + options: { tags: ['foo'] }, + handler: jest.fn(), + }, + ], + }), + ], + versionedRouters: [], + }, + { + title: 'test', + baseUrl: 'https://test.oas', + version: '99.99.99', + } + ) + ).toMatchSnapshot(); + }); + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts b/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts new file mode 100644 index 0000000000000..e435065f0089f --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts @@ -0,0 +1,128 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import type { CoreVersionedRouter, Router } from '@kbn/core-http-router-server-internal'; + +/** Intended to cover a wide set of schema configurations */ +export const testSchema = schema.object({ + string: schema.string({ maxLength: 10, minLength: 1 }), + maybeNumber: schema.maybe(schema.number({ max: 1000, min: 1 })), + booleanDefault: schema.boolean({ + defaultValue: true, + meta: { + description: 'defaults to to true', + }, + }), + ipType: schema.ip({ versions: ['ipv4'] }), + literalType: schema.literal('literallythis'), + neverType: schema.never(), + map: schema.mapOf(schema.string(), schema.string()), + record: schema.recordOf(schema.string(), schema.string()), + union: schema.oneOf([ + schema.string({ maxLength: 1, meta: { description: 'Union string' } }), + schema.number({ min: 0, meta: { description: 'Union number' } }), + ]), + uri: schema.uri({ + scheme: ['prototest'], + defaultValue: () => 'prototest://something', + }), +}); + +type RouterMeta = ReturnType[number]; +type VersionedRouterMeta = ReturnType[number]; + +export const createRouter = (args: { routes: RouterMeta[] }) => { + return { + getRoutes: () => args.routes, + } as unknown as Router; +}; +export const createVersionedRouter = (args: { routes: VersionedRouterMeta[] }) => { + return { + getRoutes: () => args.routes, + } as unknown as CoreVersionedRouter; +}; + +const getRouterDefaults = () => ({ + isVersioned: false, + path: '/foo/{id}', + method: 'get', + validationSchemas: { + request: { + params: schema.object({ id: schema.string({ maxLength: 36 }) }), + query: schema.object({ page: schema.number({ max: 999, min: 1, defaultValue: 1 }) }), + body: testSchema, + }, + response: { + 200: { + body: schema.string({ maxLength: 10, minLength: 1 }), + }, + }, + }, + options: { tags: ['foo'] }, + handler: jest.fn(), +}); + +const getVersionedRouterDefaults = () => ({ + method: 'get', + path: '/bar', + options: { + access: 'public', + }, + handlers: [ + { + fn: jest.fn(), + options: { + validate: { + request: { body: schema.object({ foo: schema.string() }) }, + response: { + [200]: { body: schema.object({ fooResponse: schema.string() }) }, + }, + }, + version: 'oas-test-version-1', + }, + }, + { + fn: jest.fn(), + options: { + validate: { + request: { body: schema.object({ foo: schema.string() }) }, + response: { + [200]: { body: schema.object({ fooResponse: schema.string() }) }, + }, + }, + version: 'oas-test-version-2', + }, + }, + ], +}); + +export const createTestRouters = ( + { + routers = [], + versionedRouters = [], + }: { + routers?: Array>>; + versionedRouters?: Array>>; + } = { routers: [[{}]], versionedRouters: [[{}]] } +): [routers: Router[], versionedRouters: CoreVersionedRouter[]] => { + return [ + [ + ...routers.map((rs) => + createRouter({ routes: rs.map((r) => Object.assign(getRouterDefaults(), r)) }) + ), + ], + [ + ...versionedRouters.map((rs) => + createVersionedRouter({ + routes: rs.map((r) => Object.assign(getVersionedRouterDefaults(), r)), + }) + ), + ], + ]; +}; diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.ts b/packages/kbn-router-to-openapispec/src/generate_oas.ts new file mode 100644 index 0000000000000..7568f4eeb6f27 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/generate_oas.ts @@ -0,0 +1,300 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIV3 } from 'openapi-types'; +import { getResponseValidation } from '@kbn/core-http-server'; +import { + versionHandlerResolvers, + ALLOWED_PUBLIC_VERSION as LATEST_SERVERLESS_VERSION, +} from '@kbn/core-http-router-server-internal'; +import type { + CoreVersionedRouter, + Router, + VersionedRouterRoute, +} from '@kbn/core-http-router-server-internal'; +import { + getPathParameters, + extractValidationSchemaFromVersionedHandler, + extractValidationSchemaFromRoute, + getVersionedHeaderParam, + getVersionedContentString, +} from './util'; + +import { OasConverter } from './oas_converter'; +import { createOperationIdCounter, OperationIdCounter } from './operation_id_counter'; + +export const openApiVersion = '3.0.0'; + +export interface GenerateOpenApiDocumentOptions { + title: string; + description?: string; + version: string; + baseUrl: string; + docsUrl?: string; + tags?: string[]; + pathStartsWith?: string; +} + +export const generateOpenApiDocument = ( + appRouters: { routers: Router[]; versionedRouters: CoreVersionedRouter[] }, + opts: GenerateOpenApiDocumentOptions +): OpenAPIV3.Document => { + const converter = new OasConverter(); + const getOpId = createOperationIdCounter(); + const paths: OpenAPIV3.PathsObject = {}; + for (const router of appRouters.routers) { + const result = processRouter(router, converter, getOpId, opts.pathStartsWith); + Object.assign(paths, result.paths); + } + for (const router of appRouters.versionedRouters) { + const result = processVersionedRouter(router, converter, getOpId, opts.pathStartsWith); + Object.assign(paths, result.paths); + } + return { + openapi: openApiVersion, + info: { + title: opts.title, + description: opts.description, + version: opts.version, + }, + servers: [ + { + url: opts.baseUrl, + }, + ], + paths, + components: converter.getSchemaComponents(), + security: [ + { + basicAuth: [], + }, + { + apiKeyAuth: [], + }, + ], + tags: opts.tags?.map((tag) => ({ name: tag })), + externalDocs: opts.docsUrl ? { url: opts.docsUrl } : undefined, + }; +}; + +const extractRequestBody = ( + route: VersionedRouterRoute, + converter: OasConverter +): OpenAPIV3.RequestBodyObject['content'] => { + return route.handlers.reduce((acc, handler) => { + const schemas = extractValidationSchemaFromVersionedHandler(handler); + if (!schemas?.request) return acc; + const schema = converter.convert(schemas.request.body); + return { + ...acc, + [getVersionedContentString(handler.options.version)]: { + schema, + }, + }; + }, {}); +}; + +const extractVersionedResponses = ( + route: VersionedRouterRoute, + converter: OasConverter +): OpenAPIV3.ResponsesObject => { + return route.handlers.reduce((acc, handler) => { + const schemas = extractValidationSchemaFromVersionedHandler(handler); + if (!schemas?.response) return acc; + const statusCodes = Object.keys(schemas.response); + for (const statusCode of statusCodes) { + const maybeSchema = schemas.response[statusCode as unknown as number].body; + const schema = converter.convert(maybeSchema); + acc[statusCode] = { + ...acc[statusCode], + description: route.options.description ?? 'No description', + content: { + ...((acc[statusCode] ?? {}) as OpenAPIV3.ResponseObject).content, + [getVersionedContentString(handler.options.version)]: { + schema, + }, + }, + }; + } + return acc; + }, {}); +}; + +const prepareRoutes = ( + routes: R[], + pathStartsWith?: string +): R[] => { + return routes.filter( + pathStartsWith ? (route) => route.path.startsWith(pathStartsWith) : () => true + ); +}; + +const processVersionedRouter = ( + appRouter: CoreVersionedRouter, + converter: OasConverter, + getOpId: OperationIdCounter, + pathStartsWith?: string +) => { + const routes = prepareRoutes(appRouter.getRoutes(), pathStartsWith); + const paths: OpenAPIV3.PathsObject = {}; + for (const route of routes) { + const pathParams = getPathParameters(route.path); + /** + * Note: for a given route we accept that route params and query params remain BWC + * so we only take the latest version of the params and query params, we also + * assume at this point that we are generating for serverless. + */ + let parameters: OpenAPIV3.ParameterObject[] = []; + const versions = route.handlers.map(({ options: { version: v } }) => v).sort(); + const newestVersion = versionHandlerResolvers.newest(versions); + const handler = route.handlers.find(({ options: { version: v } }) => v === newestVersion); + const schemas = handler ? extractValidationSchemaFromVersionedHandler(handler) : undefined; + + try { + if (handler && schemas) { + const reqParams = schemas.request?.params as unknown; + let pathObjects: OpenAPIV3.ParameterObject[] = []; + let queryObjects: OpenAPIV3.ParameterObject[] = []; + if (reqParams) { + pathObjects = converter.convertPathParameters(reqParams, pathParams); + } + const reqQuery = schemas.request?.query as unknown; + if (reqQuery) { + queryObjects = converter.convertQuery(reqQuery); + } + parameters = [ + getVersionedHeaderParam(newestVersion, versions), + ...pathObjects, + ...queryObjects, + ]; + } + + const hasBody = Boolean( + handler && extractValidationSchemaFromVersionedHandler(handler)?.request?.body + ); + const path: OpenAPIV3.PathItemObject = { + [route.method]: { + requestBody: hasBody + ? { + content: extractRequestBody(route, converter), + } + : undefined, + responses: extractVersionedResponses(route, converter), + parameters, + operationId: getOpId(route.path), + }, + }; + + assignToPathsObject(paths, route.path, path); + } catch (e) { + // Enrich the error message with a bit more context + e.message = `Error generating OpenAPI for route '${route.path}' using newest version '${newestVersion}': ${e.message}`; + throw e; + } + } + return { paths }; +}; + +type InternalRouterRoute = ReturnType[0]; + +const extractResponses = (route: InternalRouterRoute, converter: OasConverter) => { + const responses: OpenAPIV3.ResponsesObject = {}; + if (!route.validationSchemas) return responses; + const validationSchemas = getResponseValidation(route.validationSchemas); + + return !!validationSchemas + ? Object.entries(validationSchemas).reduce( + (acc, [statusCode, schema]) => { + const oasSchema = converter.convert(schema.body); + acc[statusCode] = { + ...acc[statusCode], + description: route.options.description ?? 'No description', + content: { + ...((acc[statusCode] ?? {}) as OpenAPIV3.ResponseObject).content, + [getVersionedContentString(LATEST_SERVERLESS_VERSION)]: { + schema: oasSchema, + }, + }, + }; + return acc; + }, + responses + ) + : responses; +}; + +const processRouter = ( + appRouter: Router, + converter: OasConverter, + getOpId: OperationIdCounter, + pathStartsWith?: string +) => { + const routes = prepareRoutes( + appRouter.getRoutes({ excludeVersionedRoutes: true }), + pathStartsWith + ); + + const paths: OpenAPIV3.PathsObject = {}; + for (const route of routes) { + try { + const pathParams = getPathParameters(route.path); + const validationSchemas = extractValidationSchemaFromRoute(route); + + let parameters: undefined | OpenAPIV3.ParameterObject[] = []; + if (validationSchemas) { + let pathObjects: OpenAPIV3.ParameterObject[] = []; + let queryObjects: OpenAPIV3.ParameterObject[] = []; + const reqParams = validationSchemas.params as unknown; + if (reqParams) { + pathObjects = converter.convertPathParameters(reqParams, pathParams); + } + const reqQuery = validationSchemas.query as unknown; + if (reqQuery) { + queryObjects = converter.convertQuery(reqQuery); + } + parameters = [ + getVersionedHeaderParam(LATEST_SERVERLESS_VERSION, [LATEST_SERVERLESS_VERSION]), + ...pathObjects, + ...queryObjects, + ]; + } + + const path: OpenAPIV3.PathItemObject = { + [route.method]: { + requestBody: !!validationSchemas?.body + ? { + content: { + [getVersionedContentString(LATEST_SERVERLESS_VERSION)]: { + schema: converter.convert(validationSchemas.body), + }, + }, + } + : undefined, + responses: extractResponses(route, converter), + parameters, + operationId: getOpId(route.path), + }, + }; + assignToPathsObject(paths, route.path, path); + } catch (e) { + // Enrich the error message with a bit more context + e.message = `Error generating OpenAPI for route '${route.path}': ${e.message}`; + throw e; + } + } + return { paths }; +}; + +const assignToPathsObject = ( + paths: OpenAPIV3.PathsObject, + path: string, + pathObject: OpenAPIV3.PathItemObject +): void => { + const pathName = path.replace('?', ''); + paths[pathName] = { ...paths[pathName], ...pathObject }; +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/catch_all.ts b/packages/kbn-router-to-openapispec/src/oas_converter/catch_all.ts new file mode 100644 index 0000000000000..06a2c2a5e34f0 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/catch_all.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIConverter } from '../type'; + +export const catchAllConverter: OpenAPIConverter = { + convertPathParameters: () => ({ + params: [], + shared: {}, + }), + convertQuery: () => ({ + query: [], + shared: {}, + }), + convert: () => ({ + schema: {}, + shared: {}, + }), + is: () => { + return true; + }, +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/common.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/common.test.ts new file mode 100644 index 0000000000000..378aabb6af329 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/common.test.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { isReferenceObject, validatePathParameters } from './common'; + +test.each([ + [null, false], + [0, false], + [1, false], + [NaN, false], + [undefined, false], + [true, false], + ['', false], + ['123', false], + [[], false], + [{}, false], + [{ $ref: '#/components/schema/test' }, true], +])('isReferenceObject %p', (value, result) => { + expect(isReferenceObject(value)).toBe(result); +}); + +describe('validatePathParameters', () => { + test.each([ + [['a'], []], + [[], ['a']], + [['a', 'b'], ['a']], + [['a'], ['a', 'b']], + ])( + 'throws if path parameters do not match what the schema expects: %p %p', + (pathParams, schemaParams) => { + expect(() => validatePathParameters(pathParams, schemaParams)).toThrow( + /^Schema expects.*but path contains/ + ); + } + ); + + test.each([ + [['a'], ['b']], + [ + ['a', 'b*'], + ['a', 'c'], + ], + ])('throws if schema does not know about a path parameter: %p %p', (pathParam, schemaParam) => { + expect(() => validatePathParameters(pathParam, schemaParam)).toThrow( + /^Path expects key.*from schema but it was not found/ + ); + }); + + test(`handles '*' in param names`, () => { + expect(() => validatePathParameters(['*a*'], ['*a'])).not.toThrow( + /^Path expects key.*from schema but it was not found/ + ); + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/common.ts b/packages/kbn-router-to-openapispec/src/oas_converter/common.ts new file mode 100644 index 0000000000000..3bfe64816e62a --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/common.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIV3 } from 'openapi-types'; + +const trimTrailingStar = (str: string) => str.replace(/\*$/, ''); + +export const validatePathParameters = (pathParameters: string[], schemaKeys: string[]) => { + if (pathParameters.length !== schemaKeys.length) { + throw new Error( + `Schema expects [${schemaKeys.join(', ')}], but path contains [${pathParameters.join(', ')}]` + ); + } + + for (let pathParameter of pathParameters) { + pathParameter = trimTrailingStar(pathParameter); + if (!schemaKeys.includes(pathParameter)) { + throw new Error( + `Path expects key "${pathParameter}" from schema but it was not found. Existing schema keys are: ${schemaKeys.join( + ', ' + )}` + ); + } + } +}; + +export const isReferenceObject = (schema: unknown): schema is OpenAPIV3.ReferenceObject => { + return typeof schema === 'object' && schema !== null && '$ref' in (schema as object); +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/index.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/index.test.ts new file mode 100644 index 0000000000000..ebc33fe4393a0 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/index.test.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OasConverter } from '.'; +import { schema } from '@kbn/config-schema'; + +describe('OasConverter', () => { + it('converts schemas with refs', () => { + const converter = new OasConverter(); + const obj = schema.object({ foo: schema.string() }, { meta: { id: 'test' } }); + const obj2 = schema.object({ bar: schema.string(), fooObject: obj }); + const oasSchema = converter.convert(obj2); + expect(oasSchema).toEqual({ + type: 'object', + additionalProperties: false, + properties: { + bar: { + type: 'string', + }, + fooObject: { + $ref: '#/components/schemas/test', + }, + }, + required: ['bar', 'fooObject'], + }); + + expect(converter.getSchemaComponents()).toEqual({ + schemas: { + test: { + type: 'object', + additionalProperties: false, + properties: { + foo: { + type: 'string', + }, + }, + required: ['foo'], + }, + }, + }); + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/index.ts b/packages/kbn-router-to-openapispec/src/oas_converter/index.ts new file mode 100644 index 0000000000000..92bdd7a795a03 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/index.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIV3 } from 'openapi-types'; +import { KnownParameters, OpenAPIConverter } from '../type'; + +import { kbnConfigSchemaConverter } from './kbn_config_schema'; +import { catchAllConverter } from './catch_all'; + +export class OasConverter { + readonly #converters: OpenAPIConverter[] = [kbnConfigSchemaConverter, catchAllConverter]; + readonly #sharedSchemas = new Map(); + + #getConverter(schema: unknown) { + return this.#converters.find((c) => c.is(schema))!; + } + + #addComponents(components: { [id: string]: OpenAPIV3.SchemaObject }) { + Object.entries(components).forEach(([id, schema]) => { + this.#sharedSchemas.set(id, schema); + }); + } + + public convert(schema: unknown) { + const { schema: oasSchema, shared } = this.#getConverter(schema)!.convert(schema); + this.#addComponents(shared); + return oasSchema as OpenAPIV3.SchemaObject; + } + + public convertPathParameters(schema: unknown, pathParameters: KnownParameters) { + const { params, shared } = this.#getConverter(schema).convertPathParameters( + schema, + pathParameters + ); + this.#addComponents(shared); + return params; + } + + public convertQuery(schema: unknown) { + const { query, shared } = this.#getConverter(schema).convertQuery(schema); + this.#addComponents(shared); + return query; + } + + public getSchemaComponents() { + return { + schemas: Object.fromEntries(this.#sharedSchemas.entries()), + }; + } +} diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/index.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/index.ts new file mode 100644 index 0000000000000..63ba55f6d2df5 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIConverter } from '../../type'; +import { is, convert, convertQuery, convertPathParameters } from './lib'; + +export const kbnConfigSchemaConverter: OpenAPIConverter = { + is, + convert, + convertQuery, + convertPathParameters, +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.test.ts new file mode 100644 index 0000000000000..5933605768378 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.test.ts @@ -0,0 +1,67 @@ +/* + * Copyright 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 { schema, metaFields } from '@kbn/config-schema'; +import { set } from '@kbn/safer-lodash-set'; +import { omit } from 'lodash'; +import { OpenAPIV3 } from 'openapi-types'; +import { is, tryConvertToRef, isNullableObjectType } from './lib'; + +describe('is', () => { + test.each([ + [{}, false], + [1, false], + [undefined, false], + [null, false], + [schema.any(), false], // ignore any + [schema.object({}, { defaultValue: {}, unknowns: 'allow' }), false], // ignore any + [schema.never(), false], + [schema.string(), true], + [schema.number(), true], + [schema.mapOf(schema.string(), schema.number()), true], + [schema.recordOf(schema.string(), schema.number()), true], + [schema.arrayOf(schema.string()), true], + [schema.object({}), true], + [schema.oneOf([schema.string(), schema.number()]), true], + [schema.maybe(schema.literal('yes')), true], + ])('"is" correctly identifies %#', (value, result) => { + expect(is(value)).toBe(result); + }); +}); + +test('tryConvertToRef', () => { + const schemaObject: OpenAPIV3.SchemaObject = { + type: 'object', + properties: { + a: { + type: 'string', + }, + }, + }; + set(schemaObject, metaFields.META_FIELD_X_OAS_REF_ID, 'foo'); + expect(tryConvertToRef(schemaObject)).toEqual({ + idSchema: ['foo', { type: 'object', properties: { a: { type: 'string' } } }], + ref: { + $ref: '#/components/schemas/foo', + }, + }); + + const schemaObject2 = omit(schemaObject, metaFields.META_FIELD_X_OAS_REF_ID); + expect(tryConvertToRef(schemaObject2)).toBeUndefined(); +}); + +test('isNullableObjectType', () => { + const any = schema.any({}); + expect(isNullableObjectType(any.getSchema().describe())).toBe(false); + + const nullableAny = schema.nullable(any); + expect(isNullableObjectType(nullableAny.getSchema().describe())).toBe(false); + + const nullableObject = schema.nullable(schema.object({})); + expect(isNullableObjectType(nullableObject.getSchema().describe())).toBe(true); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.ts new file mode 100644 index 0000000000000..f5ab73d69dc53 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/lib.ts @@ -0,0 +1,192 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 joi from 'joi'; +import { isConfigSchema, Type, metaFields } from '@kbn/config-schema'; +import { get } from 'lodash'; +import type { OpenAPIV3 } from 'openapi-types'; +import type { KnownParameters } from '../../type'; +import { isReferenceObject } from '../common'; +import { parse } from './parse'; + +import { createCtx, IContext } from './post_process_mutations'; + +export const getSharedComponentId = (schema: OpenAPIV3.SchemaObject) => { + if (metaFields.META_FIELD_X_OAS_REF_ID in schema) { + return schema[metaFields.META_FIELD_X_OAS_REF_ID] as string; + } +}; + +export const removeSharedComponentId = ( + schema: OpenAPIV3.SchemaObject & { [metaFields.META_FIELD_X_OAS_REF_ID]?: string } +) => { + const { [metaFields.META_FIELD_X_OAS_REF_ID]: id, ...rest } = schema; + return rest; +}; + +export const sharedComponentIdToRef = (id: string): OpenAPIV3.ReferenceObject => { + return { + $ref: `#/components/schemas/${id}`, + }; +}; + +type IdSchemaTuple = [id: string, schema: OpenAPIV3.SchemaObject]; + +export const tryConvertToRef = (schema: OpenAPIV3.SchemaObject) => { + const sharedId = getSharedComponentId(schema); + if (sharedId) { + const idSchema: IdSchemaTuple = [sharedId, removeSharedComponentId(schema)]; + return { + idSchema, + ref: sharedComponentIdToRef(sharedId), + }; + } +}; + +const isObjectType = (schema: joi.Schema | joi.Description): boolean => { + return schema.type === 'object'; +}; + +const isRecordType = (schema: joi.Schema | joi.Description): boolean => { + return schema.type === 'record'; +}; + +// See the `schema.nullable` type in @kbn/config-schema +export const isNullableObjectType = (schema: joi.Schema | joi.Description): boolean => { + if (schema.type === 'alternatives') { + const { matches } = joi.isSchema(schema) ? schema.describe() : schema; + return ( + matches.length === 2 && + matches.every( + (match: { schema: joi.Description }) => + match.schema.type === 'object' || + (match.schema.type === 'any' && + get(match, 'schema.flags.only') === true && + get(match, 'schema.allow')?.length === 1 && + get(match, 'schema.allow.0') === null) + ) + ); + } + return false; +}; + +const isEmptyObjectAllowsUnknowns = (schema: joi.Description) => { + return ( + isObjectType(schema) && + Object.keys(schema.keys).length === 0 && + get(schema, 'flags.unknown') === true + ); +}; + +const createError = (message: string) => { + return new Error(`[@kbn/config-schema converter] ${message}`); +}; + +function assertInstanceOfKbnConfigSchema(schema: unknown): asserts schema is Type { + if (!is(schema)) { + throw createError('Expected schema to be an instance of @kbn/config-schema'); + } +} + +export const unwrapKbnConfigSchema = (schema: unknown): joi.Schema => { + assertInstanceOfKbnConfigSchema(schema); + return schema.getSchema(); +}; + +export const convert = (kbnConfigSchema: unknown) => { + const schema = unwrapKbnConfigSchema(kbnConfigSchema); + const { result, shared } = parse({ schema, ctx: createCtx({ refs: true }) }); + return { schema: result, shared: Object.fromEntries(shared.entries()) }; +}; + +const convertObjectMembersToParameterObjects = ( + ctx: IContext, + schema: joi.Schema, + knownParameters: KnownParameters = {}, + isPathParameter = false +) => { + let properties: Exclude; + const required = new Map(); + if (isNullableObjectType(schema)) { + const { result } = parse({ schema, ctx }); + const anyOf = (result as OpenAPIV3.SchemaObject).anyOf as OpenAPIV3.SchemaObject[]; + properties = anyOf.find((s) => s.type === 'object')!.properties!; + } else if (isObjectType(schema)) { + const { result } = parse({ schema, ctx }) as { result: OpenAPIV3.SchemaObject }; + properties = (result as OpenAPIV3.SchemaObject).properties!; + (result.required ?? []).forEach((key) => required.set(key, true)); + } else if (isRecordType(schema)) { + return []; + } else { + throw createError(`Expected record, object or nullable object type, but got '${schema.type}'`); + } + + return Object.entries(properties).map(([schemaKey, schemaObject]) => { + if (!knownParameters[schemaKey] && isPathParameter) { + throw createError(`Unknown parameter: ${schemaKey}, are you sure this is in your path?`); + } + const isSubSchemaRequired = required.has(schemaKey); + let description: undefined | string; + let finalSchema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject; + if (!isReferenceObject(schemaObject)) { + const { description: des, ...rest } = schemaObject; + description = des; + finalSchema = rest; + } else { + finalSchema = schemaObject; + } + return { + name: schemaKey, + in: isPathParameter ? 'path' : 'query', + required: isPathParameter ? !knownParameters[schemaKey].optional : isSubSchemaRequired, + schema: finalSchema, + description, + }; + }); +}; + +export const convertQuery = (kbnConfigSchema: unknown) => { + const schema = unwrapKbnConfigSchema(kbnConfigSchema); + const ctx = createCtx({ refs: false }); // For now context is not shared between body, params and queries + const result = convertObjectMembersToParameterObjects(ctx, schema, {}, false); + return { + query: result, + shared: Object.fromEntries(ctx.sharedSchemas.entries()), + }; +}; + +export const convertPathParameters = ( + kbnConfigSchema: unknown, + knownParameters: { [paramName: string]: { optional: boolean } } +) => { + const schema = unwrapKbnConfigSchema(kbnConfigSchema); + if (!isObjectType(schema) && !isNullableObjectType(schema)) { + throw createError('Input parser for path params expected to be an object schema'); + } + const ctx = createCtx(); // For now context is not shared between body, params and queries + const result = convertObjectMembersToParameterObjects(ctx, schema, knownParameters, true); + return { + params: result, + shared: Object.fromEntries(ctx.sharedSchemas.entries()), + }; +}; + +export const is = (schema: unknown): boolean => { + if (isConfigSchema(schema)) { + const description = schema.getSchema().describe(); + // We ignore "any" @kbn/config-schema for the purposes of OAS generation... + if ( + (description.type === 'any' && !('allow' in description)) || + isEmptyObjectAllowsUnknowns(description) + ) { + return false; + } + return true; + } + return false; +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/parse.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/parse.ts new file mode 100644 index 0000000000000..f25cc1a4c354a --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/parse.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Joi from 'joi'; +import joiToJsonParse from 'joi-to-json'; +import type { OpenAPIV3 } from 'openapi-types'; +import { createCtx, postProcessMutations } from './post_process_mutations'; +import type { IContext } from './post_process_mutations'; + +interface ParseArgs { + schema: Joi.Schema; + ctx?: IContext; +} + +export const joi2JsonInternal = (schema: Joi.Schema) => { + return joiToJsonParse(schema, 'open-api'); +}; + +export const parse = ({ schema, ctx = createCtx() }: ParseArgs) => { + const parsed: OpenAPIV3.SchemaObject = joi2JsonInternal(schema); + postProcessMutations({ schema: parsed, ctx }); + const result = ctx.processRef(parsed); + return { shared: ctx.sharedSchemas, result }; +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.test.ts new file mode 100644 index 0000000000000..16f499f48b371 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { schema, metaFields } from '@kbn/config-schema'; +import { joi2JsonInternal } from '../parse'; +import { createCtx } from './context'; + +it('does not convert and record refs by default', () => { + const ctx = createCtx(); + const obj = schema.object({}, { meta: { id: 'foo' } }); + const parsed = joi2JsonInternal(obj.getSchema()); + const result = ctx.processRef(parsed); + expect(result).toMatchObject({ type: 'object', properties: {} }); + expect(ctx.sharedSchemas.get('foo')).toBeUndefined(); + expect(metaFields.META_FIELD_X_OAS_REF_ID in result).toBe(false); +}); + +it('can convert and record refs', () => { + const ctx = createCtx({ refs: true }); + const obj = schema.object({}, { meta: { id: 'foo' } }); + const parsed = joi2JsonInternal(obj.getSchema()); + const result = ctx.processRef(parsed); + expect(result).toEqual({ $ref: '#/components/schemas/foo' }); + expect(ctx.sharedSchemas.get('foo')).toMatchObject({ type: 'object', properties: {} }); + expect(metaFields.META_FIELD_X_OAS_REF_ID in ctx.sharedSchemas.get('foo')!).toBe(false); +}); + +it('can use provided shared schemas Map', () => { + const myMap = new Map(); + const ctx = createCtx({ refs: true, sharedSchemas: myMap }); + const obj = schema.object({}, { meta: { id: 'foo' } }); + const parsed = joi2JsonInternal(obj.getSchema()); + ctx.processRef(parsed); + + const obj2 = schema.object({}, { meta: { id: 'bar' } }); + const parsed2 = joi2JsonInternal(obj2.getSchema()); + ctx.processRef(parsed2); + + expect(myMap.get('foo')).toMatchObject({ type: 'object', properties: {} }); + expect(myMap.get('bar')).toMatchObject({ type: 'object', properties: {} }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.ts new file mode 100644 index 0000000000000..0ae440edc622e --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/context.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { OpenAPIV3 } from 'openapi-types'; +import { processRef as processRefMutation } from './mutations/ref'; +import { removeSharedComponentId } from '../lib'; + +export interface IContext { + sharedSchemas: Map; + /** + * Attempt to convert a schema object to ref, my perform side-effect + * + * Will return the schema sans the ref meta ID if refs are disabled + * + * @note see also {@link Options['refs']} + */ + processRef: ( + schema: OpenAPIV3.SchemaObject + ) => OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject; +} + +interface Options { + sharedSchemas?: Map; + refs?: boolean; +} + +class Context implements IContext { + readonly sharedSchemas: Map; + readonly refs: boolean; + constructor(opts: Options) { + this.sharedSchemas = opts.sharedSchemas ?? new Map(); + this.refs = !!opts.refs; + } + public processRef( + schema: OpenAPIV3.SchemaObject + ): OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject { + if (this.refs) { + return processRefMutation(this, schema) ?? schema; + } + return removeSharedComponentId(schema); + } +} + +export const createCtx = (opts: Options = { sharedSchemas: new Map() }) => { + return new Context(opts); +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.test.ts new file mode 100644 index 0000000000000..4a09e683136dd --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.test.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { schema } from '@kbn/config-schema'; +import { postProcessMutations } from '.'; +import { joi2JsonInternal } from '../parse'; +import { createCtx } from './context'; + +describe('postProcessMutations', () => { + test('walks inner objects first so that "required" fields are populated correctly', () => { + const parsed = joi2JsonInternal( + schema.object({ foo: schema.object({ bar: schema.string() }) }).getSchema() + ); + postProcessMutations({ + ctx: createCtx(), + schema: parsed, + }); + expect(parsed).toEqual({ + type: 'object', + additionalProperties: false, + properties: { + foo: { + type: 'object', + additionalProperties: false, + properties: { + bar: { type: 'string' }, + }, + required: ['bar'], + }, + }, + required: ['foo'], + }); + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.ts new file mode 100644 index 0000000000000..83a05782d28bf --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/index.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 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 { OpenAPIV3 } from 'openapi-types'; +import * as mutations from './mutations'; +import type { IContext } from './context'; + +interface PostProcessMutationsArgs { + schema: OpenAPIV3.SchemaObject; + ctx: IContext; +} + +export const postProcessMutations = ({ ctx, schema }: PostProcessMutationsArgs) => { + walkSchema(ctx, schema); + return ctx; +}; + +const arrayContainers: Array = ['allOf', 'oneOf', 'anyOf']; + +const walkSchema = (ctx: IContext, schema: OpenAPIV3.SchemaObject): void => { + mutations.processAny(schema); + if (schema.type === 'array') { + walkSchema(ctx, schema.items as OpenAPIV3.SchemaObject); + } else if (schema.type === 'object') { + if (schema.properties) { + Object.values(schema.properties).forEach((value) => { + walkSchema(ctx, value as OpenAPIV3.SchemaObject); + }); + } + mutations.processObject(ctx, schema); + } else if ((schema.type as string) === 'record') { + mutations.processRecord(ctx, schema); + } else if ((schema.type as string) === 'map') { + mutations.processMap(ctx, schema); + } else if (schema.type === 'string') { + mutations.processString(schema); + } else if (schema.type) { + // Do nothing + } else { + for (const arrayContainer of arrayContainers) { + if (schema[arrayContainer]) { + schema[arrayContainer].forEach((s: OpenAPIV3.SchemaObject, idx: number) => { + walkSchema(ctx, s); + schema[arrayContainer][idx] = ctx.processRef(s); + }); + break; + } + } + } +}; + +export { createCtx } from './context'; +export type { IContext } from './context'; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.test.ts new file mode 100644 index 0000000000000..cccd06855e8c4 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.test.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { schema } from '@kbn/config-schema'; +import { processMap, processRecord } from '.'; +import { joi2JsonInternal } from '../../parse'; +import { createCtx } from '../context'; + +test.each([ + [ + 'processMap', + processMap, + schema.mapOf(schema.string(), schema.object({ a: schema.string() }, { meta: { id: 'myRef' } })), + ], + [ + 'processRecord', + processRecord, + schema.recordOf( + schema.string(), + schema.object({ a: schema.string() }, { meta: { id: 'myRef' } }) + ), + ], +])('%p parses any additional properties specified', (_, processFn, obj) => { + const ctx = createCtx({ refs: true }); + const parsed = joi2JsonInternal(obj.getSchema()); + + processFn(ctx, parsed); + + expect(parsed).toEqual({ + type: 'object', + additionalProperties: { + $ref: '#/components/schemas/myRef', + }, + }); + expect(ctx.sharedSchemas.get('myRef')).toEqual({ + type: 'object', + additionalProperties: false, + properties: { + a: { + type: 'string', + }, + }, + required: ['a'], + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.ts new file mode 100644 index 0000000000000..4f5b31030695e --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/index.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 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 Joi from 'joi'; +import { metaFields } from '@kbn/config-schema'; +import type { OpenAPIV3 } from 'openapi-types'; +import { parse } from '../../parse'; +import { deleteField, stripBadDefault } from './utils'; +import { IContext } from '../context'; + +const { + META_FIELD_X_OAS_MAX_LENGTH, + META_FIELD_X_OAS_MIN_LENGTH, + META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES, +} = metaFields; + +export const processString = (schema: OpenAPIV3.SchemaObject): void => { + if (META_FIELD_X_OAS_MIN_LENGTH in schema) { + schema.minLength = schema[META_FIELD_X_OAS_MIN_LENGTH] as number; + deleteField(schema, META_FIELD_X_OAS_MIN_LENGTH); + } + if (META_FIELD_X_OAS_MAX_LENGTH in schema) { + schema.maxLength = schema[META_FIELD_X_OAS_MAX_LENGTH] as number; + deleteField(schema, META_FIELD_X_OAS_MAX_LENGTH); + } +}; + +const processAdditionalProperties = (ctx: IContext, schema: OpenAPIV3.SchemaObject) => { + if (META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES in schema) { + const fn = schema[META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES] as () => Joi.Schema; + const { result: additionalSchema } = parse({ ctx, schema: fn() }); + schema.additionalProperties = additionalSchema; + deleteField(schema, META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES); + } else { + schema.additionalProperties = true; + } +}; + +export const processRecord = (ctx: IContext, schema: OpenAPIV3.SchemaObject): void => { + schema.type = 'object'; + processAdditionalProperties(ctx, schema); + if (schema.additionalProperties) { + schema.additionalProperties = ctx.processRef( + schema.additionalProperties as OpenAPIV3.SchemaObject + ); + } +}; + +export const processMap = (ctx: IContext, schema: OpenAPIV3.SchemaObject): void => { + schema.type = 'object'; + processAdditionalProperties(ctx, schema); + if (schema.additionalProperties) { + schema.additionalProperties = ctx.processRef( + schema.additionalProperties as OpenAPIV3.SchemaObject + ); + } +}; + +export const processAny = (schema: OpenAPIV3.SchemaObject): void => { + stripBadDefault(schema); +}; + +export { processObject } from './object'; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts new file mode 100644 index 0000000000000..ea54a04197277 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts @@ -0,0 +1,76 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import { joi2JsonInternal } from '../../parse'; +import { createCtx } from '../context'; +import { processObject } from './object'; + +test.each([ + [ + schema.object({}), + { type: 'object', properties: {}, additionalProperties: false, required: [] }, + ], + [ + schema.object({ never: schema.never() }), + { type: 'object', properties: {}, additionalProperties: false, required: [] }, + ], + [ + schema.object( + { + key1: schema.string(), + key2: schema.number({ defaultValue: 42 }), + }, + { defaultValue: { key1: 'value1', key2: 42 } } + ), + { + type: 'object', + default: { key1: 'value1', key2: 42 }, + properties: { + key1: { type: 'string' }, + key2: { type: 'number', default: 42 }, + }, + additionalProperties: false, + required: ['key1'], + }, + ], +])('processObject %#', (input, result) => { + const parsed = joi2JsonInternal(input.getSchema()); + processObject(createCtx(), parsed); + expect(parsed).toEqual(result); +}); + +test('refs', () => { + const fooSchema = schema.object({ n: schema.number() }, { meta: { id: 'foo' } }); + const barSchema = schema.object({ foo: fooSchema, s: schema.string() }); + const parsed = joi2JsonInternal(barSchema.getSchema()); + const ctx = createCtx({ refs: true }); + + // Simulate us walking the schema + processObject(ctx, parsed.properties.foo); + + processObject(ctx, parsed); + expect(parsed).toEqual({ + type: 'object', + additionalProperties: false, + properties: { + foo: { + $ref: '#/components/schemas/foo', + }, + s: { type: 'string' }, + }, + required: ['foo', 's'], + }); + expect(ctx.sharedSchemas.size).toBe(1); + expect(ctx.sharedSchemas.get('foo')).toEqual({ + type: 'object', + additionalProperties: false, + properties: { n: { type: 'number' } }, + required: ['n'], + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts new file mode 100644 index 0000000000000..70b9b2574615b --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts @@ -0,0 +1,67 @@ +/* + * Copyright 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 { OpenAPIV3 } from 'openapi-types'; +import { metaFields } from '@kbn/config-schema'; +import { deleteField, stripBadDefault } from './utils'; +import { IContext } from '../context'; + +const { META_FIELD_X_OAS_OPTIONAL } = metaFields; + +const isNullable = (schema: OpenAPIV3.SchemaObject): boolean => { + return schema.nullable === true; +}; + +const hasDefault = (schema: OpenAPIV3.SchemaObject): boolean => { + return schema.default != null; +}; + +const populateRequiredFields = (schema: OpenAPIV3.SchemaObject): void => { + if (!schema.properties) return; + const required: string[] = []; + + const entries = Object.entries(schema.properties as Record); + for (const [key, value] of entries) { + if (META_FIELD_X_OAS_OPTIONAL in value) { + deleteField(value, META_FIELD_X_OAS_OPTIONAL); + } else if ( + hasDefault(value) || + Boolean(value.anyOf && value.anyOf.some((v) => isNullable(v as OpenAPIV3.SchemaObject))) + ) { + // Must not be added to the required array + } else { + required.push(key); + } + } + + schema.required = required; +}; + +const removeNeverType = (schema: OpenAPIV3.SchemaObject): void => { + if (!schema.properties) return; + for (const [key, value] of Object.entries(schema.properties)) { + if (Object.keys(value).length === 1 && 'not' in value) { + delete schema.properties[key]; + } + } +}; + +const processObjectRefs = (ctx: IContext, schema: OpenAPIV3.SchemaObject): void => { + if (schema.properties) { + Object.keys(schema.properties).forEach((key) => { + schema.properties![key] = ctx.processRef(schema.properties![key] as OpenAPIV3.SchemaObject); + }); + } +}; + +export const processObject = (ctx: IContext, schema: OpenAPIV3.SchemaObject): void => { + stripBadDefault(schema); + removeNeverType(schema); + populateRequiredFields(schema); + processObjectRefs(ctx, schema); +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.test.ts new file mode 100644 index 0000000000000..539e3cd339db6 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.test.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { schema } from '@kbn/config-schema'; +import { createCtx } from '../context'; +import { joi2JsonInternal } from '../../parse'; +import { processRef } from './ref'; + +test('create a new ref entry', () => { + const ctx = createCtx({ refs: true }); + const obj = schema.object({ a: schema.string() }, { meta: { id: 'id' } }); + const parsed = joi2JsonInternal(obj.getSchema()); + const result = processRef(ctx, parsed); + expect(result).toEqual({ + $ref: '#/components/schemas/id', + }); + expect(ctx.sharedSchemas.get('id')).toMatchObject({ + type: 'object', + properties: { + a: { + type: 'string', + }, + }, + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.ts new file mode 100644 index 0000000000000..4b36a0245e96d --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/ref.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIV3 } from 'openapi-types'; +import { tryConvertToRef } from '../../lib'; +import type { IContext } from '../context'; + +export const processRef = (ctx: IContext, schema: OpenAPIV3.SchemaObject) => { + const result = tryConvertToRef(schema); + if (result) { + const [id, s] = result.idSchema; + ctx.sharedSchemas.set(id, s); + return result.ref; + } +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.test.ts new file mode 100644 index 0000000000000..51fc0a62ebcdf --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.test.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { stripBadDefault } from './utils'; + +test.each([ + [{}, {}], + [{ type: 'object' }, { type: 'object' }], + [{ type: 'object', default: { special: 'deep' } }, { type: 'object' }], + [ + { type: 'object', default: { special: 'deep', another: 1 } }, + { type: 'object', default: { another: 1 } }, + ], + [ + { type: 'object', default: () => ({ special: 'deep', another: 1 }) }, // will not strip "special: 'deep'" in this case + { type: 'object', default: { another: 1, special: 'deep' } }, + ], +])('stripBadDefault %#', (input, output) => { + stripBadDefault(input as any); + expect(input).toEqual(output); +}); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.ts new file mode 100644 index 0000000000000..5bad28b276d10 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/utils.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { OpenAPIV3 } from 'openapi-types'; + +export const stripBadDefault = (schema: OpenAPIV3.SchemaObject): void => { + if (schema.default?.special === 'deep') { + if (Object.keys(schema.default).length === 1) { + delete schema.default; + } else { + delete schema.default.special; + } + } + if (typeof schema.default === 'function') { + const defaultValue = schema.default(); + if (defaultValue === undefined) { + delete schema.default; + } else { + schema.default = defaultValue; + } + } +}; + +/** Just for type convenience */ +export const deleteField = (schema: Record, field: string): void => { + delete schema[field]; +}; diff --git a/packages/kbn-router-to-openapispec/src/operation_id_counter.ts b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts new file mode 100644 index 0000000000000..91fe2adf395d8 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type OperationIdCounter = (name: string) => string; + +export const createOperationIdCounter = () => { + const operationIdCounters = new Map(); + return (name: string): string => { + // Aliases an operationId to ensure it is unique across + // multiple method+path combinations sharing a name. + // "search" -> "search#0", "search#1", etc. + const operationIdCount = operationIdCounters.get(name) ?? 0; + const aliasedName = name + '#' + operationIdCount.toString(); + operationIdCounters.set(name, operationIdCount + 1); + return aliasedName; + }; +}; diff --git a/packages/kbn-router-to-openapispec/src/type.ts b/packages/kbn-router-to-openapispec/src/type.ts new file mode 100644 index 0000000000000..8f69701b76683 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/type.ts @@ -0,0 +1,35 @@ +/* + * Copyright 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 { OpenAPIV3 } from 'openapi-types'; + +export interface KnownParameters { + [paramName: string]: { optional: boolean }; +} + +export interface OpenAPIConverter { + convertPathParameters( + schema: unknown, + knownPathParameters: KnownParameters + ): { + params: OpenAPIV3.ParameterObject[]; + shared: { [key: string]: OpenAPIV3.SchemaObject }; + }; + + convertQuery(schema: unknown): { + query: OpenAPIV3.ParameterObject[]; + shared: { [key: string]: OpenAPIV3.SchemaObject }; + }; + + convert(schema: unknown): { + schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject; + shared: { [key: string]: OpenAPIV3.SchemaObject }; + }; + + is(type: unknown): boolean; +} diff --git a/packages/kbn-router-to-openapispec/src/util.ts b/packages/kbn-router-to-openapispec/src/util.ts new file mode 100644 index 0000000000000..43f4a3ca52fb9 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/util.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { OpenAPIV3 } from 'openapi-types'; +import { VersionedRouterRoute } from '@kbn/core-http-router-server-internal/src/versioned_router/types'; +import { + getRequestValidation, + type RouterRoute, + type RouteValidatorConfig, +} from '@kbn/core-http-server'; +import { KnownParameters } from './type'; + +export const getPathParameters = (path: string): KnownParameters => { + return Array.from(path.matchAll(/\{(.+?)\}/g)).reduce((acc, [_, key]) => { + const optional = key.endsWith('?'); + acc[optional ? key.slice(0, key.length - 1) : key] = { optional }; + return acc; + }, {}); +}; + +export const extractValidationSchemaFromVersionedHandler = ( + handler: VersionedRouterRoute['handlers'][0] +) => { + if (handler.options.validate === false) return undefined; + if (typeof handler.options.validate === 'function') return handler.options.validate(); + return handler.options.validate; +}; + +export const getVersionedContentString = (version: string): string => { + return `application/json; Elastic-Api-Version=${version}`; +}; + +export const extractValidationSchemaFromRoute = ( + route: RouterRoute +): undefined | RouteValidatorConfig => { + if (!route.validationSchemas) return undefined; + return getRequestValidation(route.validationSchemas); +}; + +export const getVersionedHeaderParam = ( + defaultVersion: undefined | string, + versions: string[] +): OpenAPIV3.ParameterObject => ({ + in: 'header', + name: 'elastic-api-version', + schema: { + type: 'string', + enum: versions, + default: defaultVersion, + }, +}); diff --git a/packages/kbn-router-to-openapispec/tsconfig.json b/packages/kbn-router-to-openapispec/tsconfig.json new file mode 100644 index 0000000000000..7977b83701cfd --- /dev/null +++ b/packages/kbn-router-to-openapispec/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/core-http-router-server-internal", + "@kbn/config-schema", + "@kbn/core-http-server", + "@kbn/safer-lodash-set", + ] +} diff --git a/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts b/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts index 0b870bc5a11fe..dd2b3af12cc4b 100644 --- a/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts +++ b/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts @@ -10,6 +10,7 @@ export const OBSERVABILITY_THRESHOLD_RULE_TYPE_ID = 'observability.rules.custom_ export const SLO_BURN_RATE_RULE_TYPE_ID = 'slo.rules.burnRate'; export const METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID = 'metrics.alert.inventory.threshold'; +export const METRIC_THRESHOLD_ALERT_TYPE_ID = 'metrics.alert.threshold'; export const LOG_THRESHOLD_ALERT_TYPE_ID = 'logs.alert.document.count'; export enum ApmRuleType { diff --git a/packages/kbn-search-connectors/components/sync_jobs/__snapshots__/documents_panel.test.tsx.snap b/packages/kbn-search-connectors/components/sync_jobs/__snapshots__/documents_panel.test.tsx.snap index e29361b08a9c1..40f115c567f81 100644 --- a/packages/kbn-search-connectors/components/sync_jobs/__snapshots__/documents_panel.test.tsx.snap +++ b/packages/kbn-search-connectors/components/sync_jobs/__snapshots__/documents_panel.test.tsx.snap @@ -9,15 +9,96 @@ exports[`DocumentsPanel renders 1`] = ` Array [ Object { "field": "added", - "name": "Upserted", + "name": + index + , + } + } + /> + } + delay="regular" + display="inlineBlock" + position="top" + > + + Upserted + + + , }, Object { "field": "removed", - "name": "Deleted", + "name": + delete + , + } + } + /> + } + delay="regular" + display="inlineBlock" + position="top" + > + + Deleted + + + , }, Object { "field": "volume", - "name": "Volume", + "name": + index + , + } + } + /> + } + delay="regular" + display="inlineBlock" + position="top" + > + + Volume + + + , "render": [Function], }, ] diff --git a/packages/kbn-search-connectors/components/sync_jobs/documents_panel.tsx b/packages/kbn-search-connectors/components/sync_jobs/documents_panel.tsx index 0bfe917d3aa01..9eaed179c0dbe 100644 --- a/packages/kbn-search-connectors/components/sync_jobs/documents_panel.tsx +++ b/packages/kbn-search-connectors/components/sync_jobs/documents_panel.tsx @@ -8,10 +8,11 @@ import React from 'react'; -import { EuiBasicTable, EuiBasicTableColumn } from '@elastic/eui'; +import { EuiBasicTable, EuiBasicTableColumn, EuiIcon, EuiToolTip, EuiCode } from '@elastic/eui'; import { ByteSizeValue } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { FlyoutPanel } from './flyout_panel'; interface SyncJobDocumentsPanelProps { @@ -24,21 +25,66 @@ export const SyncJobDocumentsPanel: React.FC = (sync const columns: Array> = [ { field: 'added', - name: i18n.translate('searchConnectors.index.syncJobs.documents.added', { - defaultMessage: 'Upserted', - }), + name: ( + index }} + /> + } + > + <> + {i18n.translate('searchConnectors.index.syncJobs.documents.added', { + defaultMessage: 'Upserted', + })} + + + + ), }, { field: 'removed', - name: i18n.translate('searchConnectors.index.syncJobs.documents.removed', { - defaultMessage: 'Deleted', - }), + name: ( + delete }} + /> + } + > + <> + {i18n.translate('searchConnectors.index.syncJobs.documents.removed', { + defaultMessage: 'Deleted', + })} + + + + ), }, { field: 'volume', - name: i18n.translate('searchConnectors.index.syncJobs.documents.volume', { - defaultMessage: 'Volume', - }), + name: ( + index }} + /> + } + > + <> + {i18n.translate('searchConnectors.index.syncJobs.documents.volume', { + defaultMessage: 'Volume', + })} + + + + ), render: (volume: number) => volume < 1 ? i18n.translate('searchConnectors.index.syncJobs.documents.volume.lessThanOneMBLabel', { diff --git a/packages/kbn-search-connectors/components/sync_jobs/sync_jobs_table.tsx b/packages/kbn-search-connectors/components/sync_jobs/sync_jobs_table.tsx index 4d44f6e47fa5c..ffe2c26d636ed 100644 --- a/packages/kbn-search-connectors/components/sync_jobs/sync_jobs_table.tsx +++ b/packages/kbn-search-connectors/components/sync_jobs/sync_jobs_table.tsx @@ -14,10 +14,14 @@ import { EuiBasicTable, EuiBasicTableColumn, EuiButtonIcon, + EuiCode, + EuiIcon, + EuiToolTip, Pagination, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { ConnectorSyncJob, isSyncCancellable, SyncJobType, SyncStatus } from '../..'; import { syncJobTypeToText, syncStatusToColor, syncStatusToText } from '../..'; @@ -55,18 +59,51 @@ export const SyncJobsTable: React.FC = ({ const columns: Array> = [ { field: 'completed_at', - name: i18n.translate('searchConnectors.syncJobs.lastSync.columnTitle', { - defaultMessage: 'Last sync', - }), + name: ( + completed_at }} + /> + } + > + <> + {i18n.translate('searchConnectors.syncJobs.lastSync.columnTitle', { + defaultMessage: 'Last sync', + })} + + + + ), render: (lastSync: string) => lastSync ? : '--', sortable: true, truncateText: false, }, { - name: i18n.translate('searchConnectors.syncJobs.syncDuration.columnTitle', { - defaultMessage: 'Sync duration', - }), + name: ( + completed_at, + started_at: started_at, + }} + /> + } + > + <> + {i18n.translate('searchConnectors.syncJobs.syncDuration.columnTitle', { + defaultMessage: 'Sync duration', + })} + + + + ), render: (syncJob: ConnectorSyncJob) => durationToText(getSyncJobDuration(syncJob)), truncateText: false, }, @@ -74,17 +111,57 @@ export const SyncJobsTable: React.FC = ({ ? [ { field: 'indexed_document_count', - name: i18n.translate('searchConnectors.searchIndices.addedDocs.columnTitle', { - defaultMessage: 'Docs upserted', - }), + name: ( + index }} + /> + } + > + <> + {i18n.translate('searchConnectors.searchIndices.addedDocs.columnTitle', { + defaultMessage: 'Docs upserted', + })} + + + + ), sortable: true, truncateText: true, }, { field: 'deleted_document_count', - name: i18n.translate('searchConnectors.searchIndices.deletedDocs.columnTitle', { - defaultMessage: 'Docs deleted', - }), + name: ( + delete }} + /> + } + > + <> + {i18n.translate('searchConnectors.searchIndices.deletedDocs.columnTitle', { + defaultMessage: 'Docs deleted', + })} + + + + ), sortable: true, truncateText: true, }, diff --git a/packages/kbn-securitysolution-autocomplete/src/field_value_match/index.tsx b/packages/kbn-securitysolution-autocomplete/src/field_value_match/index.tsx index 37670a291857d..03604343f5d2d 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field_value_match/index.tsx +++ b/packages/kbn-securitysolution-autocomplete/src/field_value_match/index.tsx @@ -39,6 +39,7 @@ const BOOLEAN_OPTIONS = [ ]; const SINGLE_SELECTION = { asPlainText: true }; +type Warning = string | React.ReactNode; interface AutocompleteFieldMatchProps { placeholder: string; @@ -54,6 +55,8 @@ interface AutocompleteFieldMatchProps { autocompleteService: AutocompleteStart; onChange: (arg: string) => void; onError?: (arg: boolean) => void; + onWarning?: (arg: boolean) => void; + warning?: Warning; 'aria-label'?: string; } @@ -71,6 +74,8 @@ export const AutocompleteFieldMatchComponent: React.FC { const [searchQuery, setSearchQuery] = useState(''); @@ -122,6 +127,15 @@ export const AutocompleteFieldMatchComponent: React.FC { + if (onWarning) { + onWarning(warn !== undefined); + } + }, + [onWarning] + ); + const { comboOptions, labels, selectedComboOptions } = useMemo( (): GetGenericComboBoxPropsReturn => getGenericComboBoxProps({ @@ -148,18 +162,20 @@ export const AutocompleteFieldMatchComponent: React.FC { const err = paramIsValid(option, selectedField, isRequired, touched); handleError(err); + handleWarning(warning); if (err != null) { // Explicitly reject the user's input @@ -171,7 +187,16 @@ export const AutocompleteFieldMatchComponent: React.FC { if (isLoading || isLoadingSuggestions) { @@ -229,7 +255,7 @@ export const AutocompleteFieldMatchComponent: React.FC - ); + return useMemo(() => { + return ( + + ); + }, [groupingId, fields, maxGroupingLevels, defaultGroupingOptions, onChange]); }; export const useGetGroupSelector = ({ @@ -198,18 +200,19 @@ export const useGetGroupSelector = ({ } }, [defaultGroupingOptions, options, selectedGroups, setOptions]); - return ( - - ); + return useMemo(() => { + return ( + + ); + }, [groupingId, fields, maxGroupingLevels, onChange, selectedGroups, options]); }; diff --git a/packages/kbn-securitysolution-utils/src/path_validations/index.test.ts b/packages/kbn-securitysolution-utils/src/path_validations/index.test.ts index 4cb502c1e921e..b0ca96642c823 100644 --- a/packages/kbn-securitysolution-utils/src/path_validations/index.test.ts +++ b/packages/kbn-securitysolution-utils/src/path_validations/index.test.ts @@ -11,7 +11,7 @@ import { hasSimpleExecutableName, OperatingSystem, ConditionEntryField, - hasWildcardAndInvalidOperator, + validateHasWildcardWithWrongOperator, validatePotentialWildcardInput, validateFilePathInput, validateWildcardInput, @@ -131,16 +131,24 @@ describe('validateFilePathInput', () => { describe('Wildcard and invalid operator', () => { it('should return TRUE when operator is not "WILDCARD" and value contains a wildcard', () => { - expect(hasWildcardAndInvalidOperator({ operator: 'match', value: 'asdf*' })).toEqual(true); + expect(validateHasWildcardWithWrongOperator({ operator: 'match', value: 'asdf*' })).toEqual( + true + ); }); it('should return FALSE when operator is not "WILDCARD" and value does not contain a wildcard', () => { - expect(hasWildcardAndInvalidOperator({ operator: 'match', value: 'asdf' })).toEqual(false); + expect(validateHasWildcardWithWrongOperator({ operator: 'match', value: 'asdf' })).toEqual( + false + ); }); it('should return FALSE when operator is "WILDCARD" and value contains a wildcard', () => { - expect(hasWildcardAndInvalidOperator({ operator: 'wildcard', value: 'asdf*' })).toEqual(false); + expect(validateHasWildcardWithWrongOperator({ operator: 'wildcard', value: 'asdf*' })).toEqual( + false + ); }); it('should return FALSE when operator is "WILDCARD" and value does not contain a wildcard', () => { - expect(hasWildcardAndInvalidOperator({ operator: 'wildcard', value: 'asdf' })).toEqual(false); + expect(validateHasWildcardWithWrongOperator({ operator: 'wildcard', value: 'asdf' })).toEqual( + false + ); }); }); diff --git a/packages/kbn-securitysolution-utils/src/path_validations/index.ts b/packages/kbn-securitysolution-utils/src/path_validations/index.ts index 761321ba94973..6c0798c7ffe24 100644 --- a/packages/kbn-securitysolution-utils/src/path_validations/index.ts +++ b/packages/kbn-securitysolution-utils/src/path_validations/index.ts @@ -51,6 +51,7 @@ export enum OperatingSystem { export type EntryTypes = 'match' | 'wildcard' | 'match_any'; export type TrustedAppEntryTypes = Extract; +export type EventFiltersTypes = EntryTypes | 'exists' | 'nested'; export const validatePotentialWildcardInput = ({ field = '', @@ -106,11 +107,11 @@ export const validateWildcardInput = (value?: string): string | undefined => { } }; -export const hasWildcardAndInvalidOperator = ({ +export const validateHasWildcardWithWrongOperator = ({ operator, value, }: { - operator: EntryTypes | TrustedAppEntryTypes; + operator: TrustedAppEntryTypes | EventFiltersTypes; value: string; }): boolean => { if (operator !== 'wildcard' && validateWildcardInput(value)) { diff --git a/packages/kbn-server-route-repository/src/decode_request_params.ts b/packages/kbn-server-route-repository/src/decode_request_params.ts index 00492d69b8ac5..e9b75ded73d01 100644 --- a/packages/kbn-server-route-repository/src/decode_request_params.ts +++ b/packages/kbn-server-route-repository/src/decode_request_params.ts @@ -8,9 +8,9 @@ import * as t from 'io-ts'; import { omitBy, isPlainObject, isEmpty } from 'lodash'; import { isLeft } from 'fp-ts/lib/Either'; -import { PathReporter } from 'io-ts/lib/PathReporter'; import Boom from '@hapi/boom'; import { strictKeysRt } from '@kbn/io-ts-utils'; +import { formatErrors } from '@kbn/securitysolution-io-ts-utils'; import { RouteParamsRT } from './typings'; interface KibanaRequestParams { @@ -36,7 +36,7 @@ export function decodeRequestParams( const result = strictKeysRt(paramsRt).decode(paramMap); if (isLeft(result)) { - throw Boom.badRequest(PathReporter.report(result)[0]); + throw Boom.badRequest(formatErrors(result.left).join('|')); } return result.right; diff --git a/packages/kbn-server-route-repository/tsconfig.json b/packages/kbn-server-route-repository/tsconfig.json index a0e9cc288d7b0..f5f84f5114b7d 100644 --- a/packages/kbn-server-route-repository/tsconfig.json +++ b/packages/kbn-server-route-repository/tsconfig.json @@ -17,7 +17,8 @@ "@kbn/core-http-request-handler-context-server", "@kbn/core-http-server", "@kbn/core-lifecycle-server", - "@kbn/logging" + "@kbn/logging", + "@kbn/securitysolution-io-ts-utils" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index 66949ab924b6e..cf026c79fbc55 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -503,30 +503,26 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ async () => { if (!editorModel.current) return; const subscription = { active: true }; - if (code === codeWhenSubmitted) { - if (serverErrors || serverWarning) { - const parsedErrors = parseErrors(serverErrors || [], code); - const parsedWarning = serverWarning ? parseWarning(serverWarning) : []; - setEditorMessages({ - errors: parsedErrors, - warnings: parsedErrors.length ? [] : parsedWarning, - }); - monaco.editor.setModelMarkers( - editorModel.current, - 'Unified search', - parsedErrors.length ? parsedErrors : [] - ); - const parserMessages = await parseMessages(); - setClientParserMessages({ - errors: parserMessages?.errors ?? [], - warnings: parserMessages?.warnings ?? [], - }); - return; - } - } else { - queryValidation(subscription).catch((error) => { - // console.log({ error }); + if (code === codeWhenSubmitted && (serverErrors || serverWarning)) { + const parsedErrors = parseErrors(serverErrors || [], code); + const parsedWarning = serverWarning ? parseWarning(serverWarning) : []; + setEditorMessages({ + errors: parsedErrors, + warnings: parsedErrors.length ? [] : parsedWarning, }); + monaco.editor.setModelMarkers( + editorModel.current, + 'Unified search', + parsedErrors.length ? parsedErrors : [] + ); + const parserMessages = await parseMessages(); + setClientParserMessages({ + errors: parserMessages?.errors ?? [], + warnings: parserMessages?.warnings ?? [], + }); + return; + } else { + queryValidation(subscription).catch(() => {}); } return () => (subscription.active = false); }, diff --git a/packages/kbn-unified-data-table/src/components/data_table_additional_display_settings.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_additional_display_settings.test.tsx index f6b3bfce3b762..ccb53ff49b15b 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_additional_display_settings.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_additional_display_settings.test.tsx @@ -17,6 +17,7 @@ import { import lodash from 'lodash'; import { fireEvent, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { RowHeightMode } from './row_height_settings'; jest.spyOn(lodash, 'debounce').mockImplementation((fn: any) => fn); @@ -26,9 +27,9 @@ const renderDisplaySettings = ( return render( @@ -44,9 +45,9 @@ describe('UnifiedDataTableAdditionalDisplaySettings', function () { ); @@ -80,9 +81,9 @@ describe('UnifiedDataTableAdditionalDisplaySettings', function () { maxAllowedSampleSize={500} sampleSize={50} onChangeSampleSize={onChangeSampleSizeMock} - rowHeight="custom" + rowHeight={RowHeightMode.custom} rowHeightLines={10} - headerRowHeight="custom" + headerRowHeight={RowHeightMode.custom} headerRowHeightLines={5} /> ); @@ -114,9 +115,9 @@ describe('UnifiedDataTableAdditionalDisplaySettings', function () { ); @@ -159,7 +160,7 @@ describe('UnifiedDataTableAdditionalDisplaySettings', function () { const onChangeRowHeight = jest.fn(); const onChangeRowHeightLines = jest.fn(); renderDisplaySettings({ - rowHeight: 'custom', + rowHeight: RowHeightMode.custom, onChangeRowHeight, onChangeRowHeightLines, }); @@ -188,7 +189,7 @@ describe('UnifiedDataTableAdditionalDisplaySettings', function () { const onChangeHeaderRowHeight = jest.fn(); const onChangeHeaderRowHeightLines = jest.fn(); renderDisplaySettings({ - headerRowHeight: 'custom', + headerRowHeight: RowHeightMode.custom, onChangeHeaderRowHeight, onChangeHeaderRowHeightLines, }); diff --git a/packages/kbn-unified-data-table/src/components/row_height_settings.tsx b/packages/kbn-unified-data-table/src/components/row_height_settings.tsx index e903885fec71d..a083217c13787 100644 --- a/packages/kbn-unified-data-table/src/components/row_height_settings.tsx +++ b/packages/kbn-unified-data-table/src/components/row_height_settings.tsx @@ -11,13 +11,18 @@ import { i18n } from '@kbn/i18n'; import { EuiButtonGroup, EuiFormRow, EuiRange, htmlIdGenerator } from '@elastic/eui'; import { euiThemeVars } from '@kbn/ui-theme'; +export enum RowHeightMode { + auto = 'auto', + single = 'single', + custom = 'custom', +} export interface RowHeightSettingsProps { - rowHeight?: 'auto' | 'single' | 'custom'; + rowHeight?: RowHeightMode; rowHeightLines?: number; maxRowHeight?: number; label: string; compressed?: boolean; - onChangeRowHeight: (newHeightMode: 'auto' | 'single' | 'custom' | undefined) => void; + onChangeRowHeight: (newHeightMode: RowHeightMode | undefined) => void; onChangeRowHeightLines: (newRowHeightLines: number) => void; 'data-test-subj'?: string; } @@ -36,25 +41,25 @@ export function RowHeightSettings({ }: RowHeightSettingsProps) { const rowHeightModeOptions = [ { - id: `${idPrefix}single`, + id: `${idPrefix}${RowHeightMode.single}`, label: i18n.translate('unifiedDataTable.rowHeight.single', { defaultMessage: 'Single', }), - 'data-test-subj': `${dataTestSubj}_rowHeight_single`, + 'data-test-subj': `${dataTestSubj}_rowHeight_${RowHeightMode.single}`, }, { - id: `${idPrefix}auto`, + id: `${idPrefix}${RowHeightMode.auto}`, label: i18n.translate('unifiedDataTable.rowHeight.auto', { defaultMessage: 'Auto fit', }), - 'data-test-subj': `${dataTestSubj}_rowHeight_auto`, + 'data-test-subj': `${dataTestSubj}_rowHeight_${RowHeightMode.auto}`, }, { - id: `${idPrefix}custom`, + id: `${idPrefix}${RowHeightMode.custom}`, label: i18n.translate('unifiedDataTable.rowHeight.custom', { defaultMessage: 'Custom', }), - 'data-test-subj': `${dataTestSubj}_rowHeight_custom`, + 'data-test-subj': `${dataTestSubj}_rowHeight_${RowHeightMode.custom}`, }, ]; @@ -67,14 +72,14 @@ export function RowHeightSettings({ legend={label} buttonSize="compressed" options={rowHeightModeOptions} - idSelected={`${idPrefix}${rowHeight ?? 'single'}`} + idSelected={`${idPrefix}${rowHeight ?? RowHeightMode.single}`} onChange={(optionId) => { const newMode = optionId.replace(idPrefix, '') as RowHeightSettingsProps['rowHeight']; onChangeRowHeight(newMode); }} data-test-subj={`${dataTestSubj}_rowHeightButtonGroup`} /> - {rowHeight === 'custom' ? ( + {rowHeight === RowHeightMode.custom ? ( { const { hook: { result }, } = renderRowHeightHook({ rowHeightState: 2 }); - expect(result.current.rowHeight).toEqual('custom'); + expect(result.current.rowHeight).toEqual(RowHeightMode.custom); expect(result.current.rowHeightLines).toEqual(2); }); @@ -59,7 +60,7 @@ describe('useRowHeightsOptions', () => { const { hook: { result }, } = renderRowHeightHook(); - expect(result.current.rowHeight).toEqual('custom'); + expect(result.current.rowHeight).toEqual(RowHeightMode.custom); expect(result.current.rowHeightLines).toEqual(5); }); @@ -70,7 +71,7 @@ describe('useRowHeightsOptions', () => { previousRowHeight: undefined, previousConfigRowHeight: undefined, }); - expect(result.current.rowHeight).toEqual('custom'); + expect(result.current.rowHeight).toEqual(RowHeightMode.custom); expect(result.current.rowHeightLines).toEqual(CONFIG_ROW_HEIGHT); }); @@ -80,7 +81,7 @@ describe('useRowHeightsOptions', () => { } = renderRowHeightHook({ previousConfigRowHeight: 4, }); - expect(result.current.rowHeight).toEqual('custom'); + expect(result.current.rowHeight).toEqual(RowHeightMode.custom); expect(result.current.rowHeightLines).toEqual(3); }); @@ -105,19 +106,19 @@ describe('useRowHeightsOptions', () => { storage, hook: { result }, } = renderRowHeightHook({ onUpdateRowHeight }); - result.current.onChangeRowHeight?.('auto'); + result.current.onChangeRowHeight?.(RowHeightMode.auto); expect(storage.get('discover:dataGridRowHeight')).toEqual({ previousRowHeight: -1, previousConfigRowHeight: CONFIG_ROW_HEIGHT, }); expect(onUpdateRowHeight).toHaveBeenLastCalledWith(-1); - result.current.onChangeRowHeight?.('single'); + result.current.onChangeRowHeight?.(RowHeightMode.single); expect(storage.get('discover:dataGridRowHeight')).toEqual({ previousRowHeight: 0, previousConfigRowHeight: CONFIG_ROW_HEIGHT, }); expect(onUpdateRowHeight).toHaveBeenLastCalledWith(0); - result.current.onChangeRowHeight?.('custom'); + result.current.onChangeRowHeight?.(RowHeightMode.custom); expect(storage.get('discover:dataGridRowHeight')).toEqual({ previousRowHeight: CONFIG_ROW_HEIGHT, previousConfigRowHeight: CONFIG_ROW_HEIGHT, @@ -141,13 +142,13 @@ describe('useRowHeightsOptions', () => { it('should convert provided rowHeightState to rowHeight and rowHeightLines', () => { const { hook, initialProps } = renderRowHeightHook({ rowHeightState: -1 }); - expect(hook.result.current.rowHeight).toEqual('auto'); + expect(hook.result.current.rowHeight).toEqual(RowHeightMode.auto); expect(hook.result.current.rowHeightLines).toEqual(-1); hook.rerender({ ...initialProps, rowHeightState: 0 }); - expect(hook.result.current.rowHeight).toEqual('single'); + expect(hook.result.current.rowHeight).toEqual(RowHeightMode.single); expect(hook.result.current.rowHeightLines).toEqual(0); hook.rerender({ ...initialProps, rowHeightState: 3 }); - expect(hook.result.current.rowHeight).toEqual('custom'); + expect(hook.result.current.rowHeight).toEqual(RowHeightMode.custom); expect(hook.result.current.rowHeightLines).toEqual(3); }); }); diff --git a/packages/kbn-unified-data-table/src/hooks/use_row_height.ts b/packages/kbn-unified-data-table/src/hooks/use_row_height.ts index fdfb96d3c6c09..2ea7b67b71459 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_row_height.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_row_height.ts @@ -15,7 +15,7 @@ import { updateStoredRowHeight, } from '../utils/row_heights'; import { ROWS_HEIGHT_OPTIONS } from '../constants'; -import { RowHeightSettingsProps } from '../components/row_height_settings'; +import { RowHeightMode, RowHeightSettingsProps } from '../components/row_height_settings'; interface UseRowHeightProps { storage: Storage; @@ -57,11 +57,11 @@ export const useRowHeight = ({ const rowHeight = useMemo(() => { switch (rowHeightLines) { case ROWS_HEIGHT_OPTIONS.auto: - return 'auto'; + return RowHeightMode.auto; case ROWS_HEIGHT_OPTIONS.single: - return 'single'; + return RowHeightMode.single; default: - return 'custom'; + return RowHeightMode.custom; } }, [rowHeightLines]); @@ -70,10 +70,10 @@ export const useRowHeight = ({ let newRowHeightLines: number; switch (newRowHeight) { - case 'auto': + case RowHeightMode.auto: newRowHeightLines = ROWS_HEIGHT_OPTIONS.auto; break; - case 'single': + case RowHeightMode.single: newRowHeightLines = ROWS_HEIGHT_OPTIONS.single; break; default: diff --git a/packages/shared-ux/modal/tabbed/src/context/index.tsx b/packages/shared-ux/modal/tabbed/src/context/index.tsx index edb80300874bb..943b67f711028 100644 --- a/packages/shared-ux/modal/tabbed/src/context/index.tsx +++ b/packages/shared-ux/modal/tabbed/src/context/index.tsx @@ -110,7 +110,7 @@ export function ModalContextProvider - tabs?.reduce((result, { reducer, initialState, ...rest }) => { + tabs.reduce((result, { reducer, initialState, ...rest }) => { initialModalState.current[rest.id] = initialState ?? {}; // @ts-ignore modalTabDefinitions.current.push({ ...rest }); diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx b/packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx index 714053bad5318..39e6fd069cedb 100644 --- a/packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx +++ b/packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx @@ -67,7 +67,7 @@ describe('TabbedModal', () => { expect(screen.queryByText(tabDefinition.name)).toBeInTheDocument(); - userEvent.click(await screen.findByTestId(tabDefinition.modalActionBtn.dataTestSubj)); + userEvent.click(await screen.findByTestId(tabDefinition.modalActionBtn!.dataTestSubj)); expect(mockedHandlerFn).toHaveBeenCalled(); }); diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx b/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx index a78e1499268c6..ebcf528665394 100644 --- a/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx +++ b/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx @@ -52,7 +52,7 @@ export interface IModalTabDeclaration extends EuiTabProps, ITabDeclarati description?: string; 'data-test-subj'?: string; content: IModalTabContent; - modalActionBtn: IModalTabActionBtn; + modalActionBtn?: IModalTabActionBtn; } export interface ITabbedModalInner extends Pick, 'onClose'> { @@ -70,35 +70,33 @@ const TabbedModalInner: FC = ({ onClose, modalTitle, modalWid [selectedTabId, state] ); - const { - content: SelectedTabContent, - modalActionBtn: { handler, dataTestSubj, label, style }, - } = useMemo(() => { + const { content: SelectedTabContent, modalActionBtn } = useMemo(() => { return tabs.find((obj) => obj.id === selectedTabId)!; }, [selectedTabId, tabs]); - const onSelectedTabChanged = (id: string) => { - dispatch({ type: 'META_selectedTabId', payload: id }); - }; - - const renderTabs = () => { - return tabs.map((tab, index) => ( - onSelectedTabChanged(tab.id)} - isSelected={tab.id === selectedTabId} - disabled={tab.disabled} - prepend={tab.prepend} - append={tab.append} - > - {tab.name} - - )); - }; + const onSelectedTabChanged = useCallback( + (id: string) => { + dispatch({ type: 'META_selectedTabId', payload: id }); + }, + [dispatch] + ); - const btnClickHandler = useCallback(() => { - handler({ state: selectedTabState }); - }, [handler, selectedTabState]); + const renderTabs = useCallback(() => { + return tabs.map((tab, index) => { + return ( + onSelectedTabChanged(tab.id)} + isSelected={tab.id === selectedTabId} + disabled={tab.disabled} + prepend={tab.prepend} + append={tab.append} + > + {tab.name} + + ); + }); + }, [onSelectedTabChanged, selectedTabId, tabs]); return ( = ({ onClose, modalTitle, modalWid })} - - - {label} - - + {modalActionBtn?.id !== undefined && selectedTabState && ( + + { + modalActionBtn.handler({ state: selectedTabState }); + }} + > + {modalActionBtn.label} + + + )} ); }; diff --git a/scripts/prettier_topology_check.js b/scripts/prettier_topology_check.js new file mode 100644 index 0000000000000..49afd804681f3 --- /dev/null +++ b/scripts/prettier_topology_check.js @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +require('../src/setup_node_env'); +require('../src/dev/run_prettier_topology_check'); diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 7fdf542a8be26..4586b4120d4d3 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -146,6 +146,7 @@ describe('checking migration metadata changes on all registered SO types', () => "siem-ui-timeline-note": "0a32fb776907f596bedca292b8c646496ae9c57b", "siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d", "slo": "9a9995e4572de1839651c43b5fc4dc8276bb5815", + "slo-settings": "f6b5ed339470a6a2cda272bde1750adcf504a11b", "space": "8de4ec513e9bbc6b2f1d635161d850be7747d38e", "spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e", "synthetics-monitor": "5ceb25b6249bd26902c9b34273c71c3dce06dbea", diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts index 82cbf077d884b..63abe75209d59 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts @@ -162,7 +162,11 @@ describe('migration v2', () => { }); afterEach(async () => { - await Promise.all([rootA.shutdown(), rootB.shutdown(), rootC.shutdown()]); + try { + await Promise.all([rootA.shutdown(), rootB.shutdown(), rootC.shutdown()]); + } catch (e) { + /* trap */ + } if (esServer) { await esServer.stop(); diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts index ecdc45dd31d22..d8d54319a35df 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts @@ -120,6 +120,7 @@ const previouslyRegisteredTypes = [ 'siem-ui-timeline-note', 'siem-ui-timeline-pinned-event', 'slo', + 'slo-settings', 'space', 'spaces-usage-stats', 'synthetics-monitor', diff --git a/src/core/server/integration_tests/saved_objects/migrations/group5/dot_kibana_split.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group5/dot_kibana_split.test.ts index 1a1620f1f7b3a..9993c2ea2f0e5 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group5/dot_kibana_split.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group5/dot_kibana_split.test.ts @@ -265,6 +265,7 @@ describe('split .kibana index into multiple system indices', () => { "siem-ui-timeline-note", "siem-ui-timeline-pinned-event", "slo", + "slo-settings", "space", "spaces-usage-stats", "synthetics-monitor", diff --git a/src/dev/run_prettier_topology_check.ts b/src/dev/run_prettier_topology_check.ts new file mode 100644 index 0000000000000..bc75fc8ad56b1 --- /dev/null +++ b/src/dev/run_prettier_topology_check.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import globby from 'globby'; +import path from 'path'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { createFailError } from '@kbn/dev-cli-errors'; +import { run } from '@kbn/dev-cli-runner'; + +function listPaths(filePaths: string[]) { + return filePaths.map((filePath: string) => ` - ${filePath}`).join('\n'); +} + +run(async ({ log }) => { + const filePaths = await globby('**/.prettierrc*', { + cwd: REPO_ROOT, + onlyFiles: true, + gitignore: true, + ignore: [ + // the gitignore: true option makes sure that we don't + // include files from node_modules in the result, but it still + // loads all of the files from node_modules before filtering + // so it's still super slow. This prevents loading the files + // and still relies on gitignore to final ignores + '**/node_modules', + ], + }); + + // const filePaths = paths.map((path) => (new File(path)).getRelativePath()); + + if (!filePaths.length) { + throw createFailError(`A top level .prettierrc file should exist and no file was found.`); + } + + if (filePaths.length > 1) { + throw createFailError( + `Only a single .prettierrc root file should exist and more than one were found.\n${listPaths( + filePaths + )}` + ); + } + + if ( + filePaths.length === 1 && + path.resolve(path.dirname(filePaths[0])) === path.resolve(REPO_ROOT) + ) { + log.success('Only one .prettierrc file found at the root level.'); + } + + process.exit(0); +}); diff --git a/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx b/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx index f22b090a2e541..62687625db86d 100644 --- a/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx +++ b/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx @@ -25,6 +25,7 @@ export function AiAssistantSelectionPage() { const { capabilities, setBreadcrumbs, navigateToApp } = useAppContext(); const observabilityAIAssistantEnabled = capabilities.observabilityAIAssistant.show; + const securityAIAssistantEnabled = capabilities.securitySolutionAssistant?.['ai-assistant']; useEffect(() => { setBreadcrumbs([ @@ -113,6 +114,55 @@ export function AiAssistantSelectionPage() { } /> + + + {!securityAIAssistantEnabled ? ( + <> + + Features.', + } + )} + size="s" + /> + + + ) : null} + + {i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSettingsPage.securityAssistant.documentationLinkLabel', + { defaultMessage: 'Documentation' } + )} + +