From 1abc0c2df75110512bd1069fe1cbd208b0895052 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 11 Dec 2023 10:21:32 -0500 Subject: [PATCH 01/39] Align inference pipeline card/option styling (#172952) ## Summary More closely align the styling used for inference pipeline cards on the indices page and existing inference pipeline options on the "Add an inference pipeline" flyout. Also used this as an opportunity to refactor `inference_pipeline_card.tsx` to improve readability and change the model/pipeline management popover to make the "Fix issue in Trained Models" button fit better with the other buttons. --- .../inference_pipeline_card.test.tsx | 36 ++- .../pipelines/inference_pipeline_card.tsx | 249 +++++++++--------- .../ml_inference/pipeline_select_option.tsx | 12 +- 3 files changed, 156 insertions(+), 141 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx index 970b1488010c0..62ac53004a773 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx @@ -11,11 +11,11 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiButtonIcon, EuiPanel, EuiTextColor, EuiTitle } from '@elastic/eui'; +import { EuiButtonEmpty, EuiPanel, EuiText, EuiTitle } from '@elastic/eui'; import { InferencePipeline, TrainedModelState } from '../../../../../../common/types/pipelines'; -import { InferencePipelineCard } from './inference_pipeline_card'; +import { InferencePipelineCard, TrainedModelHealthPopover } from './inference_pipeline_card'; import { MLModelTypeBadge } from './ml_model_type_badge'; export const DEFAULT_VALUES: InferencePipeline = { @@ -40,7 +40,7 @@ describe('InferencePipelineCard', () => { it('renders pipeline as title', () => { const wrapper = shallow(); expect(wrapper.find(EuiTitle)).toHaveLength(1); - const title = wrapper.find(EuiTitle).dive(); + const title = wrapper.find(EuiTitle).at(0).children(); expect(title.text()).toBe(DEFAULT_VALUES.pipelineName); }); it('renders pipeline as title with unknown model type', () => { @@ -51,14 +51,14 @@ describe('InferencePipelineCard', () => { const wrapper = shallow(); expect(wrapper.find(EuiTitle)).toHaveLength(1); // does not render subtitle - expect(wrapper.find(EuiTextColor)).toHaveLength(0); - const title = wrapper.find(EuiTitle).dive(); + expect(wrapper.find(EuiText)).toHaveLength(0); + const title = wrapper.find(EuiTitle).at(0).children(); expect(title.text()).toBe(DEFAULT_VALUES.pipelineName); }); it('renders model ID as subtitle', () => { const wrapper = shallow(); - expect(wrapper.find(EuiTextColor)).toHaveLength(1); - const subtitle = wrapper.find(EuiTextColor).dive(); + expect(wrapper.find(EuiText)).toHaveLength(1); + const subtitle = wrapper.find(EuiText).at(0).children(); expect(subtitle.text()).toBe(DEFAULT_VALUES.modelId); }); it('renders model type as badge', () => { @@ -67,20 +67,28 @@ describe('InferencePipelineCard', () => { const badge = wrapper.find(MLModelTypeBadge).render(); expect(badge.text()).toBe('ner'); }); - it('renders fix button when model not deployed', () => { +}); + +describe('TrainedModelHealthPopover', () => { + beforeEach(() => { + jest.clearAllMocks(); + setMockValues(mockValues); + }); + it('popover renders fix button when model not deployed', () => { const values = { ...DEFAULT_VALUES, modelState: TrainedModelState.NotDeployed, }; - const wrapper = shallow(); - expect(wrapper.find(EuiButtonIcon)).toHaveLength(1); + const wrapper = shallow(); + expect(wrapper.find(EuiButtonEmpty)).toHaveLength(3); - const fixButton = wrapper.find(EuiButtonIcon); + const fixButton = wrapper.find(EuiButtonEmpty).at(0); expect(fixButton.prop('iconType')).toBe('wrench'); expect(fixButton.prop('href')).toBe('/app/ml/trained_models'); + expect(fixButton.children().text()).toBe('Fix issue in Trained Models'); }); - it('does not render fix button when model deployed', () => { - const wrapper = shallow(); - expect(wrapper.find(EuiButtonIcon)).toHaveLength(0); + it('popover does not render fix button when model deployed', () => { + const wrapper = shallow(); + expect(wrapper.find(EuiButtonEmpty)).toHaveLength(2); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx index dcc4b2a0cad8f..342d05c398878 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx @@ -11,16 +11,14 @@ import { useActions, useValues } from 'kea'; import { EuiButtonEmpty, - EuiButtonIcon, EuiConfirmModal, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiPopover, EuiText, - EuiTextColor, EuiTitle, - EuiToolTip, + useIsWithinMaxBreakpoint, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -39,20 +37,18 @@ import { TrainedModelHealth } from './ml_model_health'; import { MLModelTypeBadge } from './ml_model_type_badge'; import { PipelinesLogic } from './pipelines_logic'; -export const InferencePipelineCard: React.FC = (pipeline) => { +export const TrainedModelHealthPopover: React.FC = (pipeline) => { const { http } = useValues(HttpLogic); const { indexName } = useValues(IndexNameLogic); const { ingestionMethod } = useValues(IndexViewLogic); + + const { deleteMlPipeline, detachMlPipeline } = useActions(PipelinesLogic); + const [isPopOverOpen, setIsPopOverOpen] = useState(false); const [showConfirmDelete, setShowConfirmDelete] = useState(false); - const { deleteMlPipeline, detachMlPipeline } = useActions(PipelinesLogic); - const showConfirmDeleteModal = () => { - setShowConfirmDelete(true); - setIsPopOverOpen(false); - }; - const { modelId, pipelineName, types: modelTypes } = pipeline; - const modelType = getMLType(modelTypes); - const modelTitle = getModelDisplayTitle(modelType); + + const { pipelineName } = pipeline; + const actionButton = ( = (pipeline) => ); + const showConfirmDeleteModal = () => { + setShowConfirmDelete(true); + setIsPopOverOpen(false); + }; + return ( - - - - + <> + setIsPopOverOpen(false)} + > + + {pipeline.modelState === TrainedModelState.NotDeployed && ( - - - -

{pipelineName ?? modelTitle}

-
-
- -
-
- {modelTitle && ( - - - - {modelId} - - - - - - - - - )} -
-
- - setIsPopOverOpen(false)} - > - {pipeline.modelState === TrainedModelState.NotDeployed && ( - - + + {i18n.translate( 'xpack.enterpriseSearch.inferencePipelineCard.modelState.notDeployed.fixLink', - { defaultMessage: 'Fix issue in Trained Models' } + { + defaultMessage: 'Fix issue in Trained Models', + } )} - > - - - - )} - - -
- - {i18n.translate('xpack.enterpriseSearch.inferencePipelineCard.action.view', { - defaultMessage: 'View in Stack Management', - })} - -
-
- -
- { - detachMlPipeline({ indexName, pipelineName }); - setIsPopOverOpen(false); - }} - > - {i18n.translate('xpack.enterpriseSearch.inferencePipelineCard.action.detach', { - defaultMessage: 'Detach pipeline', - })} - -
-
- -
- -
-
-
-
-
-
+ + + + )} + + + + {i18n.translate('xpack.enterpriseSearch.inferencePipelineCard.action.view', { + defaultMessage: 'View in Stack Management', + })} + + + + + + { + detachMlPipeline({ indexName, pipelineName }); + setIsPopOverOpen(false); + }} + > + {i18n.translate('xpack.enterpriseSearch.inferencePipelineCard.action.detach', { + defaultMessage: 'Detach pipeline', + })} + + + + + + + + + + {showConfirmDelete && ( = (pipeline) => )} + + ); +}; + +export const InferencePipelineCard: React.FC = (pipeline) => { + const { modelId, pipelineName, types: modelTypes } = pipeline; + const modelType = getMLType(modelTypes); + const modelTitle = getModelDisplayTitle(modelType); + const isSmallScreen = useIsWithinMaxBreakpoint('s'); + + return ( + + + + + + +

{pipelineName ?? modelTitle}

+
+
+ {modelTitle && ( + + + + + {modelId} + + + + + + + + + + )} +
+
+ + + +
); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/pipeline_select_option.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/pipeline_select_option.tsx index deea940cfe68d..49e00f30c12d4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/pipeline_select_option.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/pipeline_select_option.tsx @@ -45,21 +45,21 @@ export const PipelineSelectOption: React.FC = ({ pipe // TODO: Add model state & pipeline info link. Make sure to check mobile rendering when doing this! - -
{pipeline.pipelineName}
+ +

{pipeline.pipelineName}

- + {modelIdDisplay} {pipeline.modelType.length > 0 && ( - {/* Wrap in a div to prevent the badge from growing to a whole row on mobile*/} -
+ {/* Wrap in a span to prevent the badge from growing to a whole row on mobile*/} + -
+
)}
From 4e6f2cd26420b92ed2b3da700b69aad43d611625 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Mon, 11 Dec 2023 16:57:18 +0100 Subject: [PATCH 02/39] [Security Solution] Specific Cypress executions for `Entity Analytics` team (#173024) ## Summary This PR is part of the effort we are making to have our cypres serverless tests ready for the second quality gate (QA environment - real serverless project and also part of the initial effort started by https://github.com/elastic/kibana/issues/153664. With the introduced changes, we are creating specific Entity Analytics executions for both ESS and serverless with the aim of: - To help to identify quickly the ownership of the tests in case of failure. - To help to raise specific flakiness inside the tests of the team. In this PR: - We are creating different executions for ESS, serverless and the quality gate - We are integrating everything with buildkite and also adding the new executions to the flaky test suite runner - We are updating the readme - We are removing the overall `Security Solution` execution. --- .../es_serverless/verify_es_serverless_image.yml | 4 ++-- .buildkite/pipelines/flaky_tests/groups.json | 9 ++++----- .buildkite/pipelines/on_merge.yml | 10 +++++----- .buildkite/pipelines/pull_request/base.yml | 10 +++++----- .../security_solution_cypress.yml | 14 +++++++++++++- ....sh => security_serverless_entity_analytics.sh} | 4 ++-- ...on.sh => security_solution_entity_analytics.sh} | 4 ++-- .github/CODEOWNERS | 1 + .../security_solution_cypress/cypress/README.md | 11 ++++++----- .../dashboards/enable_risk_score_redirect.cy.ts | 0 .../dashboards/entity_analytics.cy.ts | 0 ...entity_analytics_serverless_splash_screen.cy.ts | 0 .../dashboards/upgrade_risk_score.cy.ts | 0 .../host_details/risk_tab.cy.ts | 0 .../hosts/host_risk_tab.cy.ts | 0 .../hosts/hosts_risk_column.cy.ts | 0 x-pack/test/security_solution_cypress/package.json | 7 +++---- 17 files changed, 43 insertions(+), 31 deletions(-) rename .buildkite/scripts/steps/functional/{security_serverless.sh => security_serverless_entity_analytics.sh} (67%) rename .buildkite/scripts/steps/functional/{security_solution.sh => security_solution_entity_analytics.sh} (66%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/dashboards/enable_risk_score_redirect.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/dashboards/entity_analytics.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/dashboards/entity_analytics_serverless_splash_screen.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/dashboards/upgrade_risk_score.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/host_details/risk_tab.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/hosts/host_risk_tab.cy.ts (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/{explore => entity_analytics}/hosts/hosts_risk_column.cy.ts (100%) diff --git a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml index e641ed08bf34f..77ae40971a282 100644 --- a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml +++ b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml @@ -56,8 +56,8 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_serverless.sh - label: 'Serverless Security Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh + label: 'Serverless Entity Analytics - Security Solution Cypress Tests' if: "build.env('SKIP_CYPRESS') != '1' && build.env('SKIP_CYPRESS') != 'true'" agents: queue: n2-4-spot diff --git a/.buildkite/pipelines/flaky_tests/groups.json b/.buildkite/pipelines/flaky_tests/groups.json index 992efad798b8d..292c5fe33397c 100644 --- a/.buildkite/pipelines/flaky_tests/groups.json +++ b/.buildkite/pipelines/flaky_tests/groups.json @@ -1,12 +1,12 @@ { "groups": [ { - "key": "cypress/security_solution", - "name": "Security Solution - Cypress" + "key": "cypress/security_solution_entity_analytics", + "name": "Security Solution Entity Analytics - Cypress" }, { - "key": "cypress/security_serverless", - "name": "[Serverless] Security Solution - Cypress" + "key": "cypress/security_serverless_entity_analytics", + "name": "[Serverless] Security Solution Entity Analytics - Cypress" }, { "key": "cypress/security_solution_investigations", @@ -32,7 +32,6 @@ "key": "cypress/security_serverless_rule_management", "name": "[Serverless] Security Solution Rule Management - Cypress" }, - { "key": "cypress/security_solution_rule_management_prebuilt_rules", "name": "Security Solution Rule Management - Prebuilt Rules - Cypress" diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index ed464e2a184f4..aa7a96bc8b4a8 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -79,8 +79,8 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_serverless.sh - label: 'Serverless Security Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh + label: 'Serverless Entity Analytics - Security Cypress Tests' agents: queue: n2-4-spot depends_on: build @@ -235,13 +235,13 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_solution.sh - label: 'Security Solution Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_solution_entity_analytics.sh + label: 'Entity Analytics - Security Solution Cypress Tests' agents: queue: n2-4-spot depends_on: build timeout_in_minutes: 60 - parallelism: 8 + parallelism: 2 retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 0040767d5b3d1..223acd9220046 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -57,8 +57,8 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_serverless.sh - label: 'Serverless Security Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh + label: 'Serverless Entity Analytics - Security Cypress Tests' agents: queue: n2-4-spot depends_on: build @@ -153,13 +153,13 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_solution.sh - label: 'Security Solution Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_solution_entity_analytics.sh + label: 'Entity Analytics - Security Solution Cypress Tests' agents: queue: n2-4-spot depends_on: build timeout_in_minutes: 60 - parallelism: 8 + parallelism: 2 retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/security_solution/security_solution_cypress.yml b/.buildkite/pipelines/security_solution/security_solution_cypress.yml index 3fdd8c16a9b76..58e505927b95c 100644 --- a/.buildkite/pipelines/security_solution/security_solution_cypress.yml +++ b/.buildkite/pipelines/security_solution/security_solution_cypress.yml @@ -93,4 +93,16 @@ steps: retry: automatic: - exit_status: '*' - limit: 1 \ No newline at end of file + limit: 1 + + - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:entity_analytics + label: 'Serverless MKI QA Entity Analytics - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. + timeout_in_minutes: 300 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 \ No newline at end of file diff --git a/.buildkite/scripts/steps/functional/security_serverless.sh b/.buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh similarity index 67% rename from .buildkite/scripts/steps/functional/security_serverless.sh rename to .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh index 9903f44da0373..0c3822e149d53 100644 --- a/.buildkite/scripts/steps/functional/security_serverless.sh +++ b/.buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh @@ -8,9 +8,9 @@ source .buildkite/scripts/steps/functional/common_cypress.sh export JOB=kibana-serverless-security-cypress export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION} -echo "--- Security Serverless Cypress Tests" +echo "--- Entity Analytics Cypress Tests on Serverless" cd x-pack/test/security_solution_cypress set +e -yarn cypress:run:serverless; status=$?; yarn junit:merge || :; exit $status +yarn cypress:entity_analytics:run:serverless; status=$?; yarn junit:merge || :; exit $status diff --git a/.buildkite/scripts/steps/functional/security_solution.sh b/.buildkite/scripts/steps/functional/security_solution_entity_analytics.sh similarity index 66% rename from .buildkite/scripts/steps/functional/security_solution.sh rename to .buildkite/scripts/steps/functional/security_solution_entity_analytics.sh index fdba86f4dee4e..09f44d4c6b7ab 100755 --- a/.buildkite/scripts/steps/functional/security_solution.sh +++ b/.buildkite/scripts/steps/functional/security_solution_entity_analytics.sh @@ -8,9 +8,9 @@ source .buildkite/scripts/steps/functional/common_cypress.sh export JOB=kibana-security-solution-chrome export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION} -echo "--- Security Solution Cypress tests (Chrome)" +echo "--- Entity Analytics - Security Solution Cypress Tests" cd x-pack/test/security_solution_cypress set +e -yarn cypress:run:ess; status=$?; yarn junit:merge || :; exit $status +yarn cypress:entity_analytics:run:ess; status=$?; yarn junit:merge || :; exit $status diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 366808adc6ac2..86d597b88c20c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1481,6 +1481,7 @@ x-pack/plugins/security_solution/public/overview/components/entity_analytics x-pack/plugins/security_solution/server/lib/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/server/lib/risk_score @elastic/security-entity-analytics x-pack/test/security_solution_api_integration/test_suites/entity_analytics @elastic/security-entity-analytics +x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/public/flyout/entity_details @elastic/security-entity-analytics x-pack/plugins/security_solution/common/api/entity_analytics @elastic/security-entity-analytics /x-pack/plugins/security_solution/public/entity_analytics @elastic/security-entity-analytics diff --git a/x-pack/test/security_solution_cypress/cypress/README.md b/x-pack/test/security_solution_cypress/cypress/README.md index 0a2b2f4c1c1a9..16a93f0c3b5d5 100644 --- a/x-pack/test/security_solution_cypress/cypress/README.md +++ b/x-pack/test/security_solution_cypress/cypress/README.md @@ -62,14 +62,13 @@ Run the tests with the following yarn scripts from `x-pack/test/security_solutio | cypress | Runs the default Cypress command | | cypress:open:ess | Opens the Cypress UI with all tests in the `e2e` directory. This also runs a local kibana and ES instance. The kibana instance will reload when you make code changes. This is the recommended way to debug and develop tests. | | cypress:open:serverless | Opens the Cypress UI with all tests in the `e2e` directory. This also runs a mocked serverless environment. The kibana instance will reload when you make code changes. This is the recommended way to debug and develop tests. | -| cypress:run:ess | Runs all tests tagged as ESS placed in the `e2e` directory excluding `investigations`,`explore` and `detection_response` directories in headless mode | +| cypress:run:entity_analytics:ess | Runs all tests tagged as ESS placed in the `e2e/entity_analytics` directory in headless mode | | cypress:run:cases:ess | Runs all tests under `explore/cases` in the `e2e` directory related to the Cases area team in headless mode | | cypress:ess | Runs all ESS tests with the specified configuration in headless mode and produces a report using `cypress-multi-reporters` | - | cypress:rule_management:run:ess | Runs all tests tagged as ESS in the `e2e/detection_response/rule_management` excluding `e2e/detection_response/rule_management/prebuilt_rules` directory in headless mode | | cypress:rule_management:prebuilt_rules:run:ess | Runs all tests tagged as ESS in the `e2e/detection_response/rule_management/prebuilt_rules` directory in headless mode | | cypress:run:respops:ess | Runs all tests related to the Response Ops area team, specifically tests in `detection_alerts`, `detection_rules`, and `exceptions` directories in headless mode | -| cypress:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e` directory excluding `investigations`, `explore` and `detections_response` directories in headless mode | +| cypress:run:entity_analytics:serverless | Runs all tests tagged as SERVERLESS in the `e2e/entity_analytics` directory in headless mode | | cypress:rule_management:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/detection_response/rule_management` excluding `e2e/detection_response/rule_management/prebuilt_rules` directory in headless mode | | cypress:rule_management:prebuilt_rules:run:serverless | Runs all tests tagged as ESS in the `e2e/detection_response/rule_management/prebuilt_rules` directory in headless mode | | cypress:detection_engine:run:ess | Runs all tests tagged as ESS in the `e2e/detection_response/detection_engine` excluding `e2e/detection_response/detection_engine/exceptions` directory in headless mode | @@ -83,7 +82,7 @@ Run the tests with the following yarn scripts from `x-pack/test/security_solutio | cypress:investigations:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/investigations` directory in headless mode | | cypress:explore:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/explore` directory in headless mode | | cypress:open:qa:serverless | Opens the Cypress UI with all tests in the `e2e` directory tagged as SERVERLESS. This also creates an MKI project in console.qa enviornment. The kibana instance will reload when you make code changes. This is the recommended way to debug tests in QA. Follow the readme in order to learn about the known limitations. | -| cypress:run:qa:serverless | Runs all tests tagged as SERVERLESS placed in the `e2e` directory excluding `investigations`, `explore` and `rule_management` directories in headless mode using the QA environment and real MKI projects.| +| cypress:run:qa:serverless:entity_analytics | Runs all tests tagged as SERVERLESS placed in the `e2e/entity_analytics` directory in headless mode using the QA environment and real MKI projects.| | cypress:run:qa:serverless:explore | Runs all tests tagged as SERVERLESS in the `e2e/explore` directory in headless mode using the QA environment and real MKI prorjects. | | cypress:run:qa:serverless:investigations | Runs all tests tagged as SERVERLESS in the `e2e/investigations` directory in headless mode using the QA environment and reak MKI projects. | | cypress:run:qa:serverless:rule_management | Runs all tests tagged as SERVERLESS in the `e2e/detection_response/rule_management` directory, excluding `e2e/detection_response/rule_management/prebuilt_rules` in headless mode using the QA environment and reak MKI projects. | @@ -123,6 +122,8 @@ If you belong to one of the teams listed in the table, please add new e2e specs | `e2e/detection_response/rule_management` | Detection Rule Management | | `e2e/detection_response/detection_engine` | Detection Engine | | `e2e/ai_assistant` | AI Assistant | +| `e2e/entity_analytics` | Entity Analytics | + ### fixtures/ @@ -219,7 +220,7 @@ Run the tests with the following yarn scripts from `x-pack/test/security_solutio | Script Name | Description | | ----------- | ----------- | | cypress:open:serverless | Opens the Cypress UI with all tests in the `e2e` directory. This also runs a mocked serverless environment. The kibana instance will reload when you make code changes. This is the recommended way to debug and develop tests. | -| cypress:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e` directory excluding `investigations` and `explore` directories in headless mode | +| cypress:entity_analytics:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/entity_analytics` directory in headless mode | | cypress:investigations:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/investigations` directory in headless mode | | cypress:explore:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/explore` directory in headless mode | | cypress:rule_management:run:serverless | Runs all tests tagged as SERVERLESS in the `e2e/detection_response/rule_management` excluding `e2e/detection_response/rule_management/prebuilt_rules` directory in headless mode | diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/enable_risk_score_redirect.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/enable_risk_score_redirect.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/enable_risk_score_redirect.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/enable_risk_score_redirect.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics_serverless_splash_screen.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics_serverless_splash_screen.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics_serverless_splash_screen.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics_serverless_splash_screen.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/upgrade_risk_score.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/upgrade_risk_score.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/upgrade_risk_score.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/upgrade_risk_score.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/host_details/risk_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/host_details/risk_tab.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/host_details/risk_tab.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/host_details/risk_tab.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/host_risk_tab.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/host_risk_tab.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/hosts_risk_column.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/hosts_risk_column.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/hosts/hosts_risk_column.cy.ts diff --git a/x-pack/test/security_solution_cypress/package.json b/x-pack/test/security_solution_cypress/package.json index 04aff67e6b8ce..6b366061b381c 100644 --- a/x-pack/test/security_solution_cypress/package.json +++ b/x-pack/test/security_solution_cypress/package.json @@ -7,7 +7,7 @@ "scripts": { "cypress": "NODE_OPTIONS=--openssl-legacy-provider ../../../node_modules/.bin/cypress", "cypress:open:ess": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../plugins/security_solution/scripts/start_cypress_parallel open --spec './cypress/e2e/**/*.cy.ts' --config-file ../../test/security_solution_cypress/cypress/cypress.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", - "cypress:run:ess": "yarn cypress:ess --spec './cypress/e2e/!(investigations|explore|detection_response|ai_assistant)/**/*.cy.ts'", + "cypress:entity_analytics:run:ess": "yarn cypress:ess --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", "cypress:run:cases:ess": "yarn cypress:ess --spec './cypress/e2e/explore/cases/*.cy.ts'", "cypress:ess": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../plugins/security_solution/scripts/start_cypress_parallel run --config-file ../../test/security_solution_cypress/cypress/cypress_ci.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", "cypress:rule_management:run:ess":"yarn cypress:ess --spec './cypress/e2e/detection_response/rule_management/!(prebuilt_rules)/**/*.cy.ts'", @@ -26,8 +26,7 @@ "cypress:cloud:serverless": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider NODE_TLS_REJECT_UNAUTHORIZED=0 ../../../node_modules/.bin/cypress", "cypress:open:cloud:serverless": "yarn cypress:cloud:serverless open --config-file ./cypress/cypress_serverless.config.ts --env CLOUD_SERVERLESS=true", "cypress:open:serverless": "yarn cypress:serverless open --config-file ../../test/security_solution_cypress/cypress/cypress_serverless.config.ts --spec './cypress/e2e/**/*.cy.ts'", - "cypress:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/!(investigations|explore|detection_response|ai_assistant)/**/*.cy.ts'", - "cypress:run:cloud:serverless": "yarn cypress:cloud:serverless run --config-file ./cypress/cypress_ci_serverless.config.ts --env CLOUD_SERVERLESS=true", + "cypress:entity_analytics:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", "cypress:rule_management:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/detection_response/rule_management/!(prebuilt_rules)/**/*.cy.ts'", "cypress:rule_management:prebuilt_rules:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/detection_response/rule_management/prebuilt_rules/**/*.cy.ts'", "cypress:detection_engine:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/detection_response/detection_engine/!(exceptions)/**/*.cy.ts'", @@ -39,7 +38,7 @@ "cypress:burn:serverless": "yarn cypress:serverless --env burn=2", "cypress:qa:serverless": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts", "cypress:open:qa:serverless": "yarn cypress:qa:serverless open", - "cypress:run:qa:serverless": "yarn cypress:qa:serverless --spec './cypress/e2e/!(investigations|explore|detection_response|ai_assistant)/**/*.cy.ts'", + "cypress:run:qa:serverless:entity_analytics": "yarn cypress:qa:serverless --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", "cypress:run:qa:serverless:investigations": "yarn cypress:qa:serverless --spec './cypress/e2e/investigations/**/*.cy.ts'", "cypress:run:qa:serverless:explore": "yarn cypress:qa:serverless --spec './cypress/e2e/explore/**/*.cy.ts'", "cypress:run:qa:serverless:rule_management": "yarn cypress:qa:serverless --spec './cypress/e2e/detection_response/rule_management/!(prebuilt_rules)/**/*.cy.ts'", From f5dec20f9d568695331154a6c592376e13efaceb Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Mon, 11 Dec 2023 16:59:31 +0100 Subject: [PATCH 03/39] [Dataset quality] Rename malformed docs to degraded docs (#172586) ### Before image ### After image --- .../{malformed_logs.ts => degraded_logs.ts} | 12 ++----- .../dataset_quality/common/api_types.ts | 8 ++--- .../data_streams_stats/data_stream_stat.ts | 4 +-- .../data_streams_stats/malformed_docs_stat.ts | 18 +++++----- .../common/data_streams_stats/types.ts | 14 ++++---- .../components/dataset_quality/columns.tsx | 34 +++++++++---------- .../percentage_indicator.tsx | 7 +--- .../hooks/use_dataset_quality_table.tsx | 14 ++++---- .../data_streams_stats_client.ts | 22 ++++++------ .../services/data_streams_stats/types.ts | 10 +++--- ...malformed_docs.ts => get_degraded_docs.ts} | 22 ++++++------ .../server/routes/data_streams/routes.ts | 16 ++++----- 12 files changed, 85 insertions(+), 96 deletions(-) rename packages/kbn-apm-synthtrace/src/scenarios/{malformed_logs.ts => degraded_logs.ts} (94%) rename x-pack/plugins/dataset_quality/server/routes/data_streams/{get_malformed_docs.ts => get_degraded_docs.ts} (83%) diff --git a/packages/kbn-apm-synthtrace/src/scenarios/malformed_logs.ts b/packages/kbn-apm-synthtrace/src/scenarios/degraded_logs.ts similarity index 94% rename from packages/kbn-apm-synthtrace/src/scenarios/malformed_logs.ts rename to packages/kbn-apm-synthtrace/src/scenarios/degraded_logs.ts index 55b32e592d62c..cb5313ac70795 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/malformed_logs.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/degraded_logs.ts @@ -29,12 +29,6 @@ const scenario: Scenario = async (runOptions) => { const CLOUD_PROVIDERS = ['gcp', 'aws', 'azure']; const CLOUD_REGION = ['eu-central-1', 'us-east-1', 'area-51']; - // "ignore_above": 1024 in mapping - const MALFORMED_LOG_LEVEL = MORE_THAN_1024_CHARS; - - // "ignore_above": 1024 in mapping - const MALFORMED_CLOUD_REGION = MORE_THAN_1024_CHARS; - const CLUSTER = [ { clusterId: generateShortId(), clusterName: 'synth-cluster-1' }, { clusterId: generateShortId(), clusterName: 'synth-cluster-2' }, @@ -76,7 +70,7 @@ const scenario: Scenario = async (runOptions) => { .create() .dataset('synth.2') .message(MESSAGE_LOG_LEVELS[index].message as string) - .logLevel(isMalformed ? MALFORMED_LOG_LEVEL : MESSAGE_LOG_LEVELS[index].level) + .logLevel(isMalformed ? MORE_THAN_1024_CHARS : MESSAGE_LOG_LEVELS[index].level) // "ignore_above": 1024 in mapping .service(SERVICE_NAMES[index]) .defaults({ 'trace.id': generateShortId(), @@ -101,7 +95,7 @@ const scenario: Scenario = async (runOptions) => { .create() .dataset('synth.3') .message(MESSAGE_LOG_LEVELS[index].message as string) - .logLevel(isMalformed ? MALFORMED_LOG_LEVEL : MESSAGE_LOG_LEVELS[index].level) + .logLevel(isMalformed ? MORE_THAN_1024_CHARS : MESSAGE_LOG_LEVELS[index].level) // "ignore_above": 1024 in mapping .service(SERVICE_NAMES[index]) .defaults({ 'trace.id': generateShortId(), @@ -112,7 +106,7 @@ const scenario: Scenario = async (runOptions) => { 'cloud.provider': CLOUD_PROVIDERS[Math.floor(Math.random() * 3)], 'cloud.region': CLOUD_REGION[index], 'cloud.availability_zone': isMalformed - ? MALFORMED_CLOUD_REGION + ? MORE_THAN_1024_CHARS // "ignore_above": 1024 in mapping : `${CLOUD_REGION[index]}a`, 'cloud.project.id': generateShortId(), 'cloud.instance.id': generateShortId(), diff --git a/x-pack/plugins/dataset_quality/common/api_types.ts b/x-pack/plugins/dataset_quality/common/api_types.ts index 88a7af594b207..4f9936d65e014 100644 --- a/x-pack/plugins/dataset_quality/common/api_types.ts +++ b/x-pack/plugins/dataset_quality/common/api_types.ts @@ -42,12 +42,12 @@ export const integrationRt = rt.intersection([ }), ]); -export const malformedDocsRt = rt.type({ +export const degradedDocsRt = rt.type({ dataset: rt.string, percentage: rt.number, }); -export type MalformedDocs = rt.TypeOf; +export type DegradedDocs = rt.TypeOf; export const getDataStreamsStatsResponseRt = rt.exact( rt.intersection([ @@ -60,8 +60,8 @@ export const getDataStreamsStatsResponseRt = rt.exact( ]) ); -export const getDataStreamsMalformedDocsStatsResponseRt = rt.exact( +export const getDataStreamsDegradedDocsStatsResponseRt = rt.exact( rt.type({ - malformedDocs: rt.array(malformedDocsRt), + degradedDocs: rt.array(degradedDocsRt), }) ); diff --git a/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts b/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts index 96035415b3649..2456284eb3cdc 100644 --- a/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts +++ b/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts @@ -15,7 +15,7 @@ export class DataStreamStat { sizeBytes?: DataStreamStatType['size_bytes']; lastActivity?: DataStreamStatType['last_activity']; integration?: IntegrationType; - malformedDocs?: number; + degradedDocs?: number; private constructor(dataStreamStat: DataStreamStat) { this.name = dataStreamStat.name; @@ -24,7 +24,7 @@ export class DataStreamStat { this.sizeBytes = dataStreamStat.sizeBytes; this.lastActivity = dataStreamStat.lastActivity; this.integration = dataStreamStat.integration; - this.malformedDocs = dataStreamStat.malformedDocs; + this.degradedDocs = dataStreamStat.degradedDocs; } public static create(dataStreamStat: DataStreamStatType) { diff --git a/x-pack/plugins/dataset_quality/common/data_streams_stats/malformed_docs_stat.ts b/x-pack/plugins/dataset_quality/common/data_streams_stats/malformed_docs_stat.ts index d48e4452b548f..b198f45be7101 100644 --- a/x-pack/plugins/dataset_quality/common/data_streams_stats/malformed_docs_stat.ts +++ b/x-pack/plugins/dataset_quality/common/data_streams_stats/malformed_docs_stat.ts @@ -5,18 +5,18 @@ * 2.0. */ -import { MalformedDocsStatType } from './types'; +import { DegradedDocsStatType } from './types'; -export class MalformedDocsStat { - dataset: MalformedDocsStatType['dataset']; - percentage: MalformedDocsStatType['percentage']; +export class DegradedDocsStat { + dataset: DegradedDocsStatType['dataset']; + percentage: DegradedDocsStatType['percentage']; - private constructor(malformedDocsStat: MalformedDocsStat) { - this.dataset = malformedDocsStat.dataset; - this.percentage = malformedDocsStat.percentage; + private constructor(degradedDocsStat: DegradedDocsStat) { + this.dataset = degradedDocsStat.dataset; + this.percentage = degradedDocsStat.percentage; } - public static create(malformedDocsStat: MalformedDocsStatType) { - return new MalformedDocsStat(malformedDocsStat); + public static create(degradedDocsStat: DegradedDocsStatType) { + return new DegradedDocsStat(degradedDocsStat); } } diff --git a/x-pack/plugins/dataset_quality/common/data_streams_stats/types.ts b/x-pack/plugins/dataset_quality/common/data_streams_stats/types.ts index 586732f0899c9..1db25258a04f8 100644 --- a/x-pack/plugins/dataset_quality/common/data_streams_stats/types.ts +++ b/x-pack/plugins/dataset_quality/common/data_streams_stats/types.ts @@ -19,10 +19,10 @@ export type DataStreamStatType = GetDataStreamsStatsResponse['dataStreamsStats'] integration?: IntegrationType; }; -export type GetDataStreamsMalformedDocsStatsParams = - APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/malformed_docs`>['params']; -export type GetDataStreamsMalformedDocsStatsQuery = GetDataStreamsMalformedDocsStatsParams['query']; -export type GetDataStreamsMalformedDocsStatsResponse = - APIReturnType<`GET /internal/dataset_quality/data_streams/malformed_docs`>; -export type DataStreamMalformedDocsStatServiceResponse = MalformedDocsStatType[]; -export type MalformedDocsStatType = GetDataStreamsMalformedDocsStatsResponse['malformedDocs'][0]; +export type GetDataStreamsDegradedDocsStatsParams = + APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/degraded_docs`>['params']; +export type GetDataStreamsDegradedDocsStatsQuery = GetDataStreamsDegradedDocsStatsParams['query']; +export type GetDataStreamsDegradedDocsStatsResponse = + APIReturnType<`GET /internal/dataset_quality/data_streams/degraded_docs`>; +export type DataStreamDegradedDocsStatServiceResponse = DegradedDocsStatType[]; +export type DegradedDocsStatType = GetDataStreamsDegradedDocsStatsResponse['degradedDocs'][0]; diff --git a/x-pack/plugins/dataset_quality/public/components/dataset_quality/columns.tsx b/x-pack/plugins/dataset_quality/public/components/dataset_quality/columns.tsx index cccd4d3b12bb7..94223e10f316f 100644 --- a/x-pack/plugins/dataset_quality/public/components/dataset_quality/columns.tsx +++ b/x-pack/plugins/dataset_quality/public/components/dataset_quality/columns.tsx @@ -37,20 +37,20 @@ const sizeColumnName = i18n.translate('xpack.datasetQuality.sizeColumnName', { defaultMessage: 'Size', }); -const malformedDocsColumnName = i18n.translate('xpack.datasetQuality.malformedDocsColumnName', { - defaultMessage: 'Malformed Docs', +const degradedDocsColumnName = i18n.translate('xpack.datasetQuality.degradedDocsColumnName', { + defaultMessage: 'Degraded Docs', }); -const malformedDocsDescription = (minimimPercentage: number) => - i18n.translate('xpack.datasetQuality.malformedDocsQualityDescription', { +const degradedDocsDescription = (minimimPercentage: number) => + i18n.translate('xpack.datasetQuality.degradedDocsQualityDescription', { defaultMessage: 'greater than {minimimPercentage}%', values: { minimimPercentage }, }); -const malformedDocsColumnTooltip = ( +const degradedDocsColumnTooltip = ( @@ -62,13 +62,13 @@ const malformedDocsColumnTooltip = ( - {` ${malformedDocsDescription(POOR_QUALITY_MINIMUM_PERCENTAGE)}`} + {` ${degradedDocsDescription(POOR_QUALITY_MINIMUM_PERCENTAGE)}`} - {` ${malformedDocsDescription(DEGRADED_QUALITY_MINIMUM_PERCENTAGE)}`} + {` ${degradedDocsDescription(DEGRADED_QUALITY_MINIMUM_PERCENTAGE)}`} @@ -89,10 +89,10 @@ const lastActivityColumnName = i18n.translate('xpack.datasetQuality.lastActivity export const getDatasetQualitTableColumns = ({ fieldFormats, - loadingMalformedStats, + loadingDegradedStats, }: { fieldFormats: FieldFormatsStart; - loadingMalformedStats?: boolean; + loadingDegradedStats?: boolean; }): Array> => { return [ { @@ -129,28 +129,28 @@ export const getDatasetQualitTableColumns = ({ }, { name: ( - + - {`${malformedDocsColumnName} `} + {`${degradedDocsColumnName} `} ), - field: 'malformedDocs', + field: 'degradedDocs', sortable: true, render: (_, dataStreamStat: DataStreamStat) => ( - + - {`${dataStreamStat.malformedDocs}%`} + {`${dataStreamStat.degradedDocs ?? 0}%`} ), diff --git a/x-pack/plugins/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx b/x-pack/plugins/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx index 5f446a0367c3c..b3f9d8e3b852c 100644 --- a/x-pack/plugins/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx +++ b/x-pack/plugins/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import { isNil } from 'lodash'; import React from 'react'; import { DEGRADED_QUALITY_MINIMUM_PERCENTAGE, @@ -13,11 +12,7 @@ import { } from '../../../common/constants'; import { QualityIndicator } from './indicator'; -export function QualityPercentageIndicator({ percentage }: { percentage?: number }) { - if (isNil(percentage)) { - return <>; - } - +export function QualityPercentageIndicator({ percentage = 0 }: { percentage?: number }) { const quality = percentage > POOR_QUALITY_MINIMUM_PERCENTAGE ? 'poor' diff --git a/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx b/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx index bf7afdc9d95e2..4bff4f54f0db3 100644 --- a/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx +++ b/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx @@ -36,9 +36,9 @@ export const useDatasetQualityTable = () => { const { dataStreamsStatsServiceClient: client } = useDatasetQualityContext(); const { data = [], loading } = useFetcher(async () => client.getDataStreamsStats(), []); - const { data: malformedStats = [], loading: loadingMalformedStats } = useFetcher( + const { data: degradedStats = [], loading: loadingDegradedStats } = useFetcher( async () => - client.getDataStreamsMalformedStats({ + client.getDataStreamsDegradedStats({ start: defaultTimeRange.from, end: defaultTimeRange.to, }), @@ -46,8 +46,8 @@ export const useDatasetQualityTable = () => { ); const columns = useMemo( - () => getDatasetQualitTableColumns({ fieldFormats, loadingMalformedStats }), - [fieldFormats, loadingMalformedStats] + () => getDatasetQualitTableColumns({ fieldFormats, loadingDegradedStats }), + [fieldFormats, loadingDegradedStats] ); const pagination = { @@ -77,18 +77,18 @@ export const useDatasetQualityTable = () => { const renderedItems = useMemo(() => { const overridenSortingField = sortingOverrides[sortField] || sortField; const mergedData = data.map((dataStream) => { - const malformedDocs = find(malformedStats, { dataset: dataStream.name }); + const degradedDocs = find(degradedStats, { dataset: dataStream.name }); return { ...dataStream, - malformedDocs: malformedDocs?.percentage, + degradedDocs: degradedDocs?.percentage, }; }); const sortedItems = orderBy(mergedData, overridenSortingField, sortDirection); return sortedItems.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize); - }, [data, malformedStats, sortField, sortDirection, pageIndex, pageSize]); + }, [data, degradedStats, sortField, sortDirection, pageIndex, pageSize]); const resultsCount = useMemo(() => { const startNumberItemsOnPage = pageSize * pageIndex + (renderedItems.length ? 1 : 0); diff --git a/x-pack/plugins/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts b/x-pack/plugins/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts index 21a4b7b7dc2ff..5fe6f9ab28231 100644 --- a/x-pack/plugins/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts +++ b/x-pack/plugins/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts @@ -9,13 +9,13 @@ import { HttpStart } from '@kbn/core/public'; import { decodeOrThrow } from '@kbn/io-ts-utils'; import { find, merge } from 'lodash'; import { - getDataStreamsMalformedDocsStatsResponseRt, + getDataStreamsDegradedDocsStatsResponseRt, getDataStreamsStatsResponseRt, } from '../../../common/api_types'; import { DataStreamStatServiceResponse, - GetDataStreamsMalformedDocsStatsQuery, - GetDataStreamsMalformedDocsStatsResponse, + GetDataStreamsDegradedDocsStatsQuery, + GetDataStreamsDegradedDocsStatsResponse, GetDataStreamsStatsError, GetDataStreamsStatsQuery, GetDataStreamsStatsResponse, @@ -52,10 +52,10 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { return mergedDataStreamsStats.map(DataStreamStat.create); } - public async getDataStreamsMalformedStats(params: GetDataStreamsMalformedDocsStatsQuery) { + public async getDataStreamsDegradedStats(params: GetDataStreamsDegradedDocsStatsQuery) { const response = await this.http - .get( - '/internal/dataset_quality/data_streams/malformed_docs', + .get( + '/internal/dataset_quality/data_streams/degraded_docs', { query: { ...params, @@ -65,18 +65,18 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { ) .catch((error) => { throw new GetDataStreamsStatsError( - `Failed to fetch data streams malformed stats": ${error}` + `Failed to fetch data streams degraded stats": ${error}` ); }); - const { malformedDocs } = decodeOrThrow( - getDataStreamsMalformedDocsStatsResponseRt, + const { degradedDocs } = decodeOrThrow( + getDataStreamsDegradedDocsStatsResponseRt, (message: string) => new GetDataStreamsStatsError( - `Failed to decode data streams malformed docs stats response: ${message}"` + `Failed to decode data streams degraded docs stats response: ${message}"` ) )(response); - return malformedDocs; + return degradedDocs; } } diff --git a/x-pack/plugins/dataset_quality/public/services/data_streams_stats/types.ts b/x-pack/plugins/dataset_quality/public/services/data_streams_stats/types.ts index 4f79753bc99cd..46c39082ce1d4 100644 --- a/x-pack/plugins/dataset_quality/public/services/data_streams_stats/types.ts +++ b/x-pack/plugins/dataset_quality/public/services/data_streams_stats/types.ts @@ -7,9 +7,9 @@ import { HttpStart } from '@kbn/core/public'; import { - DataStreamMalformedDocsStatServiceResponse, + DataStreamDegradedDocsStatServiceResponse, DataStreamStatServiceResponse, - GetDataStreamsMalformedDocsStatsQuery, + GetDataStreamsDegradedDocsStatsQuery, GetDataStreamsStatsQuery, } from '../../../common/data_streams_stats'; @@ -25,7 +25,7 @@ export interface DataStreamsStatsServiceStartDeps { export interface IDataStreamsStatsClient { getDataStreamsStats(params?: GetDataStreamsStatsQuery): Promise; - getDataStreamsMalformedStats( - params?: GetDataStreamsMalformedDocsStatsQuery - ): Promise; + getDataStreamsDegradedStats( + params?: GetDataStreamsDegradedDocsStatsQuery + ): Promise; } diff --git a/x-pack/plugins/dataset_quality/server/routes/data_streams/get_malformed_docs.ts b/x-pack/plugins/dataset_quality/server/routes/data_streams/get_degraded_docs.ts similarity index 83% rename from x-pack/plugins/dataset_quality/server/routes/data_streams/get_malformed_docs.ts rename to x-pack/plugins/dataset_quality/server/routes/data_streams/get_degraded_docs.ts index 155fe981428c7..4bbe01d219322 100644 --- a/x-pack/plugins/dataset_quality/server/routes/data_streams/get_malformed_docs.ts +++ b/x-pack/plugins/dataset_quality/server/routes/data_streams/get_degraded_docs.ts @@ -7,7 +7,7 @@ import type { ElasticsearchClient } from '@kbn/core/server'; import { rangeQuery, termQuery } from '@kbn/observability-plugin/server'; -import { MalformedDocs } from '../../../common/api_types'; +import { DegradedDocs } from '../../../common/api_types'; import { DATA_STREAM_DATASET, DATA_STREAM_NAMESPACE, @@ -17,7 +17,7 @@ import { import { DataStreamTypes } from '../../types/data_stream'; import { createDatasetQualityESClient, wildcardQuery } from '../../utils'; -export async function getMalformedDocsPaginated(options: { +export async function getDegradedDocsPaginated(options: { esClient: ElasticsearchClient; type?: DataStreamTypes; start: number; @@ -27,8 +27,8 @@ export async function getMalformedDocsPaginated(options: { dataset: string; namespace: string; }; - prevResults?: MalformedDocs[]; -}): Promise { + prevResults?: DegradedDocs[]; +}): Promise { const { esClient, type = 'logs', datasetQuery, start, end, after, prevResults = [] } = options; const datasetQualityESClient = createDatasetQualityESClient(esClient); @@ -61,7 +61,7 @@ export async function getMalformedDocsPaginated(options: { ], }, aggs: { - malformed: { + degraded: { filter: { exists: { field: _IGNORED, @@ -73,16 +73,16 @@ export async function getMalformedDocsPaginated(options: { }, }); - const currMalformedDocs = + const currDegradedDocs = response.aggregations?.datasets.buckets.map((bucket) => ({ dataset: `${type}-${bucket.key.dataset}-${bucket.key.namespace}`, - percentage: (bucket.malformed.doc_count * 100) / bucket.doc_count, + percentage: (bucket.degraded.doc_count * 100) / bucket.doc_count, })) ?? []; - const malformedDocs = [...prevResults, ...currMalformedDocs]; + const degradedDocs = [...prevResults, ...currDegradedDocs]; if (response.aggregations?.datasets.after_key) { - return getMalformedDocsPaginated({ + return getDegradedDocsPaginated({ esClient, type, start, @@ -92,9 +92,9 @@ export async function getMalformedDocsPaginated(options: { dataset: response.aggregations?.datasets.after_key.dataset as string, namespace: response.aggregations?.datasets.after_key.namespace as string, }, - prevResults: malformedDocs, + prevResults: degradedDocs, }); } - return malformedDocs; + return degradedDocs; } diff --git a/x-pack/plugins/dataset_quality/server/routes/data_streams/routes.ts b/x-pack/plugins/dataset_quality/server/routes/data_streams/routes.ts index a70bcc133e100..7be8c102060d6 100644 --- a/x-pack/plugins/dataset_quality/server/routes/data_streams/routes.ts +++ b/x-pack/plugins/dataset_quality/server/routes/data_streams/routes.ts @@ -13,8 +13,8 @@ import { Integration } from '../../types/integration'; import { createDatasetQualityServerRoute } from '../create_datasets_quality_server_route'; import { getDataStreams } from './get_data_streams'; import { getDataStreamsStats } from './get_data_streams_stats'; -import { getMalformedDocsPaginated } from './get_malformed_docs'; -import { MalformedDocs } from '../../../common/api_types'; +import { getDegradedDocsPaginated } from './get_degraded_docs'; +import { DegradedDocs } from '../../../common/api_types'; const statsRoute = createDatasetQualityServerRoute({ endpoint: 'GET /internal/dataset_quality/data_streams/stats', @@ -72,8 +72,8 @@ const statsRoute = createDatasetQualityServerRoute({ }, }); -const malformedDocsRoute = createDatasetQualityServerRoute({ - endpoint: 'GET /internal/dataset_quality/data_streams/malformed_docs', +const degradedDocsRoute = createDatasetQualityServerRoute({ + endpoint: 'GET /internal/dataset_quality/data_streams/degraded_docs', params: t.type({ query: t.intersection([ rangeRt, @@ -87,25 +87,25 @@ const malformedDocsRoute = createDatasetQualityServerRoute({ tags: [], }, async handler(resources): Promise<{ - malformedDocs: MalformedDocs[]; + degradedDocs: DegradedDocs[]; }> { const { context, params } = resources; const coreContext = await context.core; const esClient = coreContext.elasticsearch.client.asCurrentUser; - const malformedDocs = await getMalformedDocsPaginated({ + const degradedDocs = await getDegradedDocsPaginated({ esClient, ...params.query, }); return { - malformedDocs, + degradedDocs, }; }, }); export const dataStreamsRouteRepository = { ...statsRoute, - ...malformedDocsRoute, + ...degradedDocsRoute, }; From 1a6ab7e85ad36ec17a0333568c0393b279f22fff Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Mon, 11 Dec 2023 17:10:49 +0100 Subject: [PATCH 04/39] [Unified search] Adds 1minute option to the date picker (#172944) ## Summary Adds 1 minute option to the commonly used section of unified search datepicker. There are use cases which this can be very beneficiary. image --- src/plugins/data/server/ui_settings.ts | 9 ++++++++- .../public/query_string_input/query_bar.scss | 12 ++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/plugins/data/server/ui_settings.ts b/src/plugins/data/server/ui_settings.ts index 5ab638a087783..46794e0a3c9c6 100644 --- a/src/plugins/data/server/ui_settings.ts +++ b/src/plugins/data/server/ui_settings.ts @@ -385,6 +385,13 @@ export function getUiSettings( defaultMessage: 'This week', }), }, + { + from: 'now-1m', + to: 'now', + display: i18n.translate('data.advancedSettings.timepicker.last1Minute', { + defaultMessage: 'Last 1 minute', + }), + }, { from: 'now-15m', to: 'now', @@ -471,7 +478,7 @@ export function getUiSettings( to: schema.string(), display: schema.string(), }), - { maxSize: 10 } + { maxSize: 12 } ) : schema.arrayOf( schema.object({ diff --git a/src/plugins/unified_search/public/query_string_input/query_bar.scss b/src/plugins/unified_search/public/query_string_input/query_bar.scss index 89cca695ee154..2ecf27416a907 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar.scss +++ b/src/plugins/unified_search/public/query_string_input/query_bar.scss @@ -1,13 +1,9 @@ .kbnQueryBar__datePickerWrapper { .euiDatePopoverButton-isInvalid { background-image: euiFormControlGradient($euiColorDanger); - - // @todo Remove when EUI issue is resolved. - // @see https://github.com/elastic/eui/issues/4612 - &:focus { - color: $euiTextColor; - background-color: $euiFormBackgroundColor; - background-image: euiFormControlGradient($euiColorPrimary); - } } } +// increase the section height to avoid vertical scrolling +.euiQuickSelectPopover__section { + max-height: 142px; +} From b54fac45ee013666b1d85fe7c955ae1a1f81f986 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 11 Dec 2023 17:25:34 +0100 Subject: [PATCH 05/39] [SLOs] Remove unnecessary count call from SLO find route (#173039) --- .../services/slo/summary_search_client.test.ts | 7 ++----- .../server/services/slo/summary_search_client.ts | 16 +++++++--------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts b/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts index fc53bf1e7181b..5e6f50398fc95 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts @@ -74,10 +74,7 @@ describe('Summary Search Client', () => { const SLO_ID3 = 'slo-three'; const SLO_ID4 = 'slo-four'; const SLO_ID5 = 'slo-five'; - esClientMock.count.mockResolvedValue({ - count: 8, - _shards: { failed: 0, successful: 1, total: 1 }, - }); + esClientMock.search.mockResolvedValue({ took: 0, timed_out: false, @@ -89,7 +86,7 @@ describe('Summary Search Client', () => { }, hits: { total: { - value: 6, + value: 8, relation: 'eq', }, max_score: 1, diff --git a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts index 2361e8dd3678e..a145a76aa729d 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts @@ -9,6 +9,7 @@ import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { ALL_VALUE } from '@kbn/slo-schema'; import { assertNever } from '@kbn/std'; import _ from 'lodash'; +import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; import { SLO_SUMMARY_DESTINATION_INDEX_PATTERN } from '../../../common/slo/constants'; import { SLOId, Status, Summary } from '../../domain/models'; import { toHighPrecision } from '../../utils/number'; @@ -67,17 +68,9 @@ export class DefaultSummarySearchClient implements SummarySearchClient { pagination: Pagination ): Promise> { try { - const { count: total } = await this.esClient.count({ - index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, - query: getElastichsearchQueryOrThrow(kqlQuery), - }); - - if (total === 0) { - return { total: 0, perPage: pagination.perPage, page: pagination.page, results: [] }; - } - const summarySearch = await this.esClient.search({ index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, + track_total_hits: true, query: getElastichsearchQueryOrThrow(kqlQuery), sort: { // non-temp first, then temp documents @@ -92,6 +85,11 @@ export class DefaultSummarySearchClient implements SummarySearchClient { size: pagination.perPage * 2, // twice as much as we return, in case they are all duplicate temp/non-temp summary }); + const total = (summarySearch.hits.total as SearchTotalHits).value ?? 0; + if (total === 0) { + return { total: 0, perPage: pagination.perPage, page: pagination.page, results: [] }; + } + const [tempSummaryDocuments, summaryDocuments] = _.partition( summarySearch.hits.hits, (doc) => !!doc._source?.isTempDoc From 61cd731417208a601d50330b9da069be11a339c5 Mon Sep 17 00:00:00 2001 From: David Kyle Date: Mon, 11 Dec 2023 16:41:26 +0000 Subject: [PATCH 06/39] [CONSOLE] Autocomplete for the inference API (#173014) This PR adds the to autocomplete definitions in Console for the _inference API --- .../generated/inference.delete_model.json | 27 +++++++++++++++++++ .../json/generated/inference.get_model.json | 27 +++++++++++++++++++ .../json/generated/inference.inference.json | 27 +++++++++++++++++++ .../json/generated/inference.put_model.json | 27 +++++++++++++++++++ .../ml.start_trained_model_deployment.json | 1 + 5 files changed, 109 insertions(+) create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/inference.inference.json create mode 100644 src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json new file mode 100644 index 0000000000000..c7066c0a48b19 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json @@ -0,0 +1,27 @@ +{ + "inference.delete_model": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "url_components": { + "task_type": [ + "sparse_embedding", + "text_embedding" + ] + }, + "methods": [ + "DELETE" + ], + "patterns": [ + "_inference/{task_type}/{model_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-inference-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json new file mode 100644 index 0000000000000..40745a385fa75 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json @@ -0,0 +1,27 @@ +{ + "inference.get_model": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "url_components": { + "task_type": [ + "sparse_embedding", + "text_embedding" + ] + }, + "methods": [ + "GET" + ], + "patterns": [ + "_inference/{task_type}/{model_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-inference-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.inference.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.inference.json new file mode 100644 index 0000000000000..e8f959aa3330a --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.inference.json @@ -0,0 +1,27 @@ +{ + "inference.inference": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "url_components": { + "task_type": [ + "sparse_embedding", + "text_embedding" + ] + }, + "methods": [ + "POST" + ], + "patterns": [ + "_inference/{task_type}/{model_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/post-inference-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json new file mode 100644 index 0000000000000..69e26a1103c02 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json @@ -0,0 +1,27 @@ +{ + "inference.put_model": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "url_components": { + "task_type": [ + "sparse_embedding", + "text_embedding" + ] + }, + "methods": [ + "PUT" + ], + "patterns": [ + "_inference/{task_type}/{model_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-inference-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.start_trained_model_deployment.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.start_trained_model_deployment.json index 972ae313c20fb..f09c45526e4f2 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.start_trained_model_deployment.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.start_trained_model_deployment.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "cache_size": [], + "deployment_id": "", "number_of_allocations": [ "1" ], From a50b97fb2382213c88f65bc7317caa792c3c0750 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Mon, 11 Dec 2023 08:59:53 -0800 Subject: [PATCH 07/39] [Security Solution] fix endpoint list + metadata api FTR tests (#170489) --- .../fleet/server/services/epm/elasticsearch/retry.ts | 3 +++ .../common/endpoint/utils/package_v2.ts | 9 +++++++-- .../apps/endpoint/endpoint_list.ts | 3 +-- .../apps/endpoint/responder.ts | 3 ++- .../security_solution_endpoint/services/endpoint.ts | 11 +++++++++-- .../apis/metadata.ts | 3 +-- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/retry.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/retry.ts index 773ed7273d885..32d0c9e23fb78 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/retry.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/retry.ts @@ -17,7 +17,10 @@ const retryResponseStatuses = [ 410, // Gone ]; +const retryMessages = ['no_shard_available_action_exception']; + const isRetryableError = (e: any, additionalResponseStatuses: number[] = []) => + retryMessages.some((msg) => e.message.includes(msg)) || e instanceof EsErrors.NoLivingConnectionsError || e instanceof EsErrors.ConnectionError || e instanceof EsErrors.TimeoutError || diff --git a/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts b/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts index 926949bf9cd7f..fffa55ccbe514 100644 --- a/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts +++ b/x-pack/plugins/security_solution/common/endpoint/utils/package_v2.ts @@ -7,7 +7,12 @@ import semverLte from 'semver/functions/lte'; -const MIN_ENDPOINT_PACKAGE_V2_VERSION = '8.12.0'; +function parseSemver(semver: string) { + return semver.includes('-') ? semver.substring(0, semver.indexOf('-')) : semver; +} + +const MIN_ENDPOINT_PACKAGE_V2_VERSION = '8.13.0'; export function isEndpointPackageV2(version: string) { - return semverLte(MIN_ENDPOINT_PACKAGE_V2_VERSION, version); + const parsedVersion = parseSemver(version); + return semverLte(MIN_ENDPOINT_PACKAGE_V2_VERSION, parsedVersion); } diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts index c1eed560a2142..f1edd7a45800c 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts @@ -117,8 +117,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.endpoint.navigateToEndpointList(); }); - // FLAKY: https://github.com/elastic/kibana/issues/170357 - describe.skip('when there is data,', () => { + describe('when there is data,', () => { before(async () => { indexedData = await endpointTestResources.loadEndpointData({ numHosts: 3 }); await pageObjects.endpoint.navigateToEndpointList(); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts index bcc3177846d37..6f00806e67c05 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts @@ -82,7 +82,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ); }; - describe('Response Actions Responder', function () { + // FLAKY: https://github.com/elastic/kibana/issues/153071 + describe.skip('Response Actions Responder', function () { targetTags(this, ['@ess', '@serverless']); let indexedData: IndexedHostsAndAlertsResponse; diff --git a/x-pack/test/security_solution_endpoint/services/endpoint.ts b/x-pack/test/security_solution_endpoint/services/endpoint.ts index 1372ffe0139fd..b4b5e5aef96bf 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint.ts @@ -9,6 +9,7 @@ import { errors } from '@elastic/elasticsearch'; import { Client } from '@elastic/elasticsearch'; +import { AGENTS_INDEX } from '@kbn/fleet-plugin/common'; import { metadataCurrentIndexPattern, metadataTransformPrefix, @@ -94,7 +95,7 @@ export class EndpointTestResources extends FtrService { * @param [options.enableFleetIntegration=true] When set to `true`, Fleet data will also be loaded (ex. Integration Policies, Agent Policies, "fake" Agents) * @param [options.generatorSeed='seed`] The seed to be used by the data generator. Important in order to ensure the same data is generated on very run. * @param [options.waitUntilTransformed=true] If set to `true`, the data loading process will wait until the endpoint hosts metadata is processed by the transform - * @param [options.waitTimeout=60000] If waitUntilTransformed=true, number of ms to wait until timeout + * @param [options.waitTimeout=120000] If waitUntilTransformed=true, number of ms to wait until timeout * @param [options.customIndexFn] If provided, will use this function to generate and index data instead */ async loadEndpointData( @@ -116,7 +117,7 @@ export class EndpointTestResources extends FtrService { enableFleetIntegration = true, generatorSeed = 'seed', waitUntilTransformed = true, - waitTimeout = 60000, + waitTimeout = 120000, customIndexFn, } = options; @@ -197,6 +198,12 @@ export class EndpointTestResources extends FtrService { await this.retry.waitForWithTimeout(`endpoint hosts in ${index}`, timeout, async () => { try { + if (index === METADATA_UNITED_INDEX) { + // United metadata transform occasionally can't find docs in .fleet-agents. + // Running a search on the index first eliminates this issue. + // Replacing the search with a refresh does not resolve flakiness. + await this.esClient.search({ index: AGENTS_INDEX }); + } const searchResponse = await this.esClient.search({ index, size, diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts index 3ac6c83938c14..0e118cf88e4b9 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts @@ -47,8 +47,7 @@ export default function ({ getService }: FtrProviderContext) { const endpointTestResources = getService('endpointTestResources'); const log = getService('log'); - // Failing: See https://github.com/elastic/kibana/issues/151854 - describe.skip('test metadata apis', function () { + describe('test metadata apis', function () { targetTags(this, ['@ess', '@serverless']); describe('list endpoints GET route', () => { From 59dfc250b000248752946f8090947bd87b33af52 Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:26:12 +0000 Subject: [PATCH 08/39] [Security Solution][Detection Engine] removes ES|QL new feature tour (#172856) ## Summary Removes ES|QL new feature tour introduced in [8.12 ](https://github.com/elastic/kibana/pull/168879) for 8.13+ Tour in 8.12 Screenshot 2023-12-07 at 17 05 14 --- .../pages/rule_management/index.tsx | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx index 3e390eb29b42d..c9160c3cba1b9 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx @@ -35,8 +35,6 @@ import { AllRules } from '../../components/rules_table'; import { RulesTableContextProvider } from '../../components/rules_table/rules_table/rules_table_context'; import { useInvalidateFetchCoverageOverviewQuery } from '../../../rule_management/api/hooks/use_fetch_coverage_overview_query'; import { HeaderPage } from '../../../../common/components/header_page'; -import { RulesPageTourComponent } from '../../components/rules_table/alternative_tour/tour'; -import { useIsEsqlRuleTypeEnabled } from '../../../rule_creation/hooks'; const RulesPageComponent: React.FC = () => { const [isImportModalVisible, showImportModal, hideImportModal] = useBoolState(); @@ -72,8 +70,6 @@ const RulesPageComponent: React.FC = () => { } = useListsConfig(); const loading = userInfoLoading || listsConfigLoading; - const isEsqlRuleTypeEnabled = useIsEsqlRuleTypeEnabled(); - if ( redirectToDetections( isSignalIndexExists, @@ -89,18 +85,6 @@ const RulesPageComponent: React.FC = () => { return null; } - const addNewRuleButton = ( - - {i18n.ADD_NEW_RULE} - - ); - return ( <> @@ -155,11 +139,15 @@ const RulesPageComponent: React.FC = () => { - {isEsqlRuleTypeEnabled ? ( - {addNewRuleButton} - ) : ( - addNewRuleButton - )} + + {i18n.ADD_NEW_RULE} +
From 88ea8498b417d0b0f22364b434d57764ad958030 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:31:25 -0500 Subject: [PATCH 09/39] [ResponseOps] Fix Actions authz for SentinelOne to ensure that the user explicitly has `ALL` privilege (#172528) ## Summary - Fixes the Actions plugin sub-actions execution for SentinelOne connector to ensure that a user must have `ALL` privilege to "Action and Connectors" --- .../actions_client/actions_client.test.ts | 25 +- .../server/actions_client/actions_client.ts | 37 ++- .../actions_authorization.test.ts | 57 ++++- .../authorization/actions_authorization.ts | 10 +- x-pack/plugins/actions/server/feature.ts | 10 +- .../server/lib/action_executor.test.ts | 7 +- .../actions/server/lib/action_executor.ts | 17 +- .../common/experimental_features.ts | 2 +- .../alerting_api_integration/common/config.ts | 6 + .../common/lib/log_supertest_errors.ts | 66 +++++ .../security_and_spaces/group2/config.ts | 1 + .../config_non_dedicated_task_runner.ts | 1 + .../group2/tests/actions/bulk_enqueue.ts | 3 +- .../group2/tests/actions/config.ts | 1 + .../actions/connector_types/sentinelone.ts | 240 ++++++++++++++++++ .../group2/tests/actions/execute.ts | 28 +- .../group2/tests/actions/index.ts | 1 + 17 files changed, 483 insertions(+), 29 deletions(-) create mode 100644 x-pack/test/alerting_api_integration/common/lib/log_supertest_errors.ts create mode 100644 x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts diff --git a/x-pack/plugins/actions/server/actions_client/actions_client.test.ts b/x-pack/plugins/actions/server/actions_client/actions_client.test.ts index 35860bdfb0c53..02c647f17664d 100644 --- a/x-pack/plugins/actions/server/actions_client/actions_client.test.ts +++ b/x-pack/plugins/actions/server/actions_client/actions_client.test.ts @@ -43,7 +43,7 @@ import { actionsAuthorizationMock } from '../authorization/actions_authorization import { trackLegacyRBACExemption } from '../lib/track_legacy_rbac_exemption'; import { ConnectorTokenClient } from '../lib/connector_token_client'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; -import { Logger } from '@kbn/core/server'; +import { Logger, SavedObject } from '@kbn/core/server'; import { connectorTokenClientMock } from '../lib/connector_token_client.mock'; import { inMemoryMetricsMock } from '../monitoring/in_memory_metrics.mock'; import { getOAuthJwtAccessToken } from '../lib/get_oauth_jwt_access_token'; @@ -120,6 +120,14 @@ const executor: ExecutorType<{}, {}, {}, void> = async (options) => { const connectorTokenClient = connectorTokenClientMock.create(); const inMemoryMetrics = inMemoryMetricsMock.create(); +const actionTypeIdFromSavedObjectMock = (actionTypeId: string = 'my-action-type') => { + return { + attributes: { + actionTypeId, + }, + } as SavedObject; +}; + beforeEach(() => { jest.resetAllMocks(); mockedLicenseState = licenseStateMock.create(); @@ -2664,6 +2672,7 @@ describe('execute()', () => { (getAuthorizationModeBySource as jest.Mock).mockImplementationOnce(() => { return AuthorizationMode.RBAC; }); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(actionTypeIdFromSavedObjectMock()); await actionsClient.execute({ actionId: 'action-id', params: { @@ -2672,6 +2681,7 @@ describe('execute()', () => { source: asHttpRequestExecutionSource(request), }); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', additionalPrivileges: [], }); @@ -2685,6 +2695,8 @@ describe('execute()', () => { new Error(`Unauthorized to execute all actions`) ); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(actionTypeIdFromSavedObjectMock()); + await expect( actionsClient.execute({ actionId: 'action-id', @@ -2696,6 +2708,7 @@ describe('execute()', () => { ).rejects.toMatchInlineSnapshot(`[Error: Unauthorized to execute all actions]`); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', additionalPrivileges: [], }); @@ -2768,12 +2781,15 @@ describe('execute()', () => { executor, }); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(actionTypeIdFromSavedObjectMock()); + await actionsClient.execute({ actionId: 'system-connector-.cases', params: {}, }); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', additionalPrivileges: ['test/create'], }); @@ -2832,12 +2848,15 @@ describe('execute()', () => { executor, }); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(actionTypeIdFromSavedObjectMock()); + await actionsClient.execute({ actionId: 'testPreconfigured', params: {}, }); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', additionalPrivileges: [], }); @@ -2895,12 +2914,15 @@ describe('execute()', () => { executor, }); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(actionTypeIdFromSavedObjectMock()); + await actionsClient.execute({ actionId: 'system-connector-.cases', params: { foo: 'bar' }, }); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', additionalPrivileges: ['test/create'], }); @@ -3032,6 +3054,7 @@ describe('bulkEnqueueExecution()', () => { }, ]); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + actionTypeId: 'my-action-type', operation: 'execute', }); }); diff --git a/x-pack/plugins/actions/server/actions_client/actions_client.ts b/x-pack/plugins/actions/server/actions_client/actions_client.ts index 85376e64897ad..a5314ab2d7d3d 100644 --- a/x-pack/plugins/actions/server/actions_client/actions_client.ts +++ b/x-pack/plugins/actions/server/actions_client/actions_client.ts @@ -11,7 +11,7 @@ import url from 'url'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import { i18n } from '@kbn/i18n'; -import { omitBy, isUndefined, compact } from 'lodash'; +import { omitBy, isUndefined, compact, uniq } from 'lodash'; import { IScopedClusterClient, SavedObjectsClientContract, @@ -681,14 +681,39 @@ export class ActionsClient { }: Omit): Promise< ActionTypeExecutorResult > { + const log = this.context.logger; + if ( (await getAuthorizationModeBySource(this.context.unsecuredSavedObjectsClient, source)) === AuthorizationMode.RBAC ) { const additionalPrivileges = this.getSystemActionKibanaPrivileges(actionId, params); + let actionTypeId: string | undefined; + + try { + if (this.isPreconfigured(actionId)) { + const connector = this.context.inMemoryConnectors.find( + (inMemoryConnector) => inMemoryConnector.id === actionId + ); + + actionTypeId = connector?.actionTypeId; + } else { + // TODO: Optimize so we don't do another get on top of getAuthorizationModeBySource and within the actionExecutor.execute + const { attributes } = await this.context.unsecuredSavedObjectsClient.get( + 'action', + actionId + ); + + actionTypeId = attributes.actionTypeId; + } + } catch (err) { + log.debug(`Failed to retrieve actionTypeId for action [${actionId}]`, err); + } + await this.context.authorization.ensureAuthorized({ operation: 'execute', additionalPrivileges, + actionTypeId, }); } else { trackLegacyRBACExemption('execute', this.context.usageCounter); @@ -723,6 +748,11 @@ export class ActionsClient { * inside the ActionExecutor at execution time */ await this.context.authorization.ensureAuthorized({ operation: 'execute' }); + await Promise.all( + uniq(options.map((o) => o.actionTypeId)).map((actionTypeId) => + this.context.authorization.ensureAuthorized({ operation: 'execute', actionTypeId }) + ) + ); } if (authModes[AuthorizationMode.Legacy] > 0) { trackLegacyRBACExemption( @@ -740,7 +770,10 @@ export class ActionsClient { (await getAuthorizationModeBySource(this.context.unsecuredSavedObjectsClient, source)) === AuthorizationMode.RBAC ) { - await this.context.authorization.ensureAuthorized({ operation: 'execute' }); + await this.context.authorization.ensureAuthorized({ + operation: 'execute', + actionTypeId: options.actionTypeId, + }); } else { trackLegacyRBACExemption('ephemeralEnqueuedExecution', this.context.usageCounter); } 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 fa65b06777f98..f9f2094ba05ba 100644 --- a/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts +++ b/x-pack/plugins/actions/server/authorization/actions_authorization.test.ts @@ -14,10 +14,16 @@ import { } from '../constants/saved_objects'; import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { AuthorizationMode } from './get_authorization_mode_by_source'; +import { + CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG, + CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG, +} from '../feature'; const request = {} as KibanaRequest; const mockAuthorizationAction = (type: string, operation: string) => `${type}/${operation}`; +const BASIC_EXECUTE_AUTHZ = `api:${CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG}`; +const ADVANCED_EXECUTE_AUTHZ = `api:${CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG}`; function mockSecurity() { const security = securityMock.createSetup(); @@ -83,7 +89,7 @@ describe('ensureAuthorized', () => { expect(authorization.actions.savedObject.get).toHaveBeenCalledWith('action', 'create'); expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [mockAuthorizationAction('action', 'create')], + kibana: [mockAuthorizationAction('action', 'create'), BASIC_EXECUTE_AUTHZ], }); }); @@ -123,6 +129,7 @@ describe('ensureAuthorized', () => { kibana: [ mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), + BASIC_EXECUTE_AUTHZ, ], }); }); @@ -225,6 +232,54 @@ describe('ensureAuthorized', () => { mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), 'test/create', + BASIC_EXECUTE_AUTHZ, + ], + }); + }); + + 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, ], }); }); diff --git a/x-pack/plugins/actions/server/authorization/actions_authorization.ts b/x-pack/plugins/actions/server/authorization/actions_authorization.ts index 34eec819b431b..df282b95e9686 100644 --- a/x-pack/plugins/actions/server/authorization/actions_authorization.ts +++ b/x-pack/plugins/actions/server/authorization/actions_authorization.ts @@ -74,7 +74,15 @@ export class ActionsAuthorization { : [authorization.actions.savedObject.get(ACTION_SAVED_OBJECT_TYPE, operation)]; const { hasAllRequested } = await checkPrivileges({ - kibana: [...privileges, ...additionalPrivileges], + kibana: [ + ...privileges, + ...additionalPrivileges, + // SentinelOne 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' + ? 'api:actions:execute-advanced-connectors' + : 'api:actions:execute-basic-connectors', + ], }); if (!hasAllRequested) { throw Boom.forbidden( diff --git a/x-pack/plugins/actions/server/feature.ts b/x-pack/plugins/actions/server/feature.ts index aa0b88dbee633..b44aaf61cad62 100644 --- a/x-pack/plugins/actions/server/feature.ts +++ b/x-pack/plugins/actions/server/feature.ts @@ -13,6 +13,9 @@ import { CONNECTOR_TOKEN_SAVED_OBJECT_TYPE, } from './constants/saved_objects'; +export const CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-advanced-connectors'; +export const CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-basic-connectors'; + /** * The order of appearance in the feature privilege page * under the management section. @@ -33,7 +36,10 @@ export const ACTIONS_FEATURE = { privileges: { all: { app: [], - api: [], + api: [ + CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG, + CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG, + ], catalogue: [], management: { insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'], @@ -50,7 +56,7 @@ export const ACTIONS_FEATURE = { }, read: { app: [], - api: [], + api: [CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG], catalogue: [], management: { insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'], diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index 9e277b9084329..c58e16a11aa4a 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -835,6 +835,7 @@ test('successfully authorize system actions', async () => { await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: '.cases', operation: 'execute', additionalPrivileges: ['test/create'], }); @@ -875,7 +876,10 @@ test('Execute of SentinelOne sub-actions require create privilege', async () => await actionExecutor.execute({ ...executeParams, actionId: 'sentinel-one-connector-authz' }); - expect(authorizationMock.ensureAuthorized).toHaveBeenCalledWith({ operation: 'create' }); + expect(authorizationMock.ensureAuthorized).toHaveBeenCalledWith({ + operation: 'execute', + actionTypeId: '.sentinelone', + }); }); test('pass the params to the actionTypeRegistry when authorizing system actions', async () => { @@ -909,6 +913,7 @@ test('pass the params to the actionTypeRegistry when authorizing system actions' }); expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: '.cases', operation: 'execute', additionalPrivileges: ['test/create'], }); diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index fd1d8f92a0482..69aab56e4e5b3 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -565,14 +565,17 @@ const ensureAuthorizedToExecute = async ({ params ); - await authorization.ensureAuthorized({ operation: 'execute', additionalPrivileges }); - } - - // SentinelOne 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 - if (actionTypeId === '.sentinelone') { await authorization.ensureAuthorized({ - operation: 'create', + operation: 'execute', + additionalPrivileges, + actionTypeId, + }); + } else if (actionTypeId === '.sentinelone') { + // SentinelOne 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', + actionTypeId, }); } } catch (error) { diff --git a/x-pack/plugins/stack_connectors/common/experimental_features.ts b/x-pack/plugins/stack_connectors/common/experimental_features.ts index 4ac02dd9f06db..5e114524e0b19 100644 --- a/x-pack/plugins/stack_connectors/common/experimental_features.ts +++ b/x-pack/plugins/stack_connectors/common/experimental_features.ts @@ -16,7 +16,7 @@ export const allowedExperimentalValues = Object.freeze({ sentinelOneConnectorOn: false, }); -type ExperimentalConfigKeys = Array; +export type ExperimentalConfigKeys = Array; type Mutable = { -readonly [P in keyof T]: T[P] }; const allowedKeys = Object.keys(allowedExperimentalValues) as Readonly; diff --git a/x-pack/test/alerting_api_integration/common/config.ts b/x-pack/test/alerting_api_integration/common/config.ts index 4a5c665911495..88f3cce226a70 100644 --- a/x-pack/test/alerting_api_integration/common/config.ts +++ b/x-pack/test/alerting_api_integration/common/config.ts @@ -10,6 +10,8 @@ import getPort from 'get-port'; import { CA_CERT_PATH } from '@kbn/dev-utils'; import { FtrConfigProviderContext, findTestPluginPaths } from '@kbn/test'; import { getAllExternalServiceSimulatorPaths } from '@kbn/actions-simulators-plugin/server/plugin'; +import { ExperimentalConfigKeys } from '@kbn/stack-connectors-plugin/common/experimental_features'; +import { SENTINELONE_CONNECTOR_ID } from '@kbn/stack-connectors-plugin/common/sentinelone/constants'; import { services } from './services'; import { getTlsWebhookServerUrls } from './lib/get_tls_webhook_servers'; @@ -29,6 +31,7 @@ interface CreateTestConfigOptions { useDedicatedTaskRunner: boolean; enableFooterInEmail?: boolean; maxScheduledPerMinute?: number; + experimentalFeatures?: ExperimentalConfigKeys; } // test.not-enabled is specifically not enabled @@ -48,6 +51,7 @@ const enabledActionTypes = [ '.resilient', '.gen-ai', '.d3security', + SENTINELONE_CONNECTOR_ID, '.slack', '.slack_api', '.tines', @@ -85,6 +89,7 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions) useDedicatedTaskRunner, enableFooterInEmail = true, maxScheduledPerMinute, + experimentalFeatures = [], } = options; return async ({ readConfigFile }: FtrConfigProviderContext) => { @@ -344,6 +349,7 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions) '--xpack.task_manager.allow_reading_invalid_state=false', '--xpack.task_manager.requeue_invalid_tasks.enabled=true', '--xpack.actions.queued.max=500', + `--xpack.stack_connectors.enableExperimental=${JSON.stringify(experimentalFeatures)}`, ], }, }; diff --git a/x-pack/test/alerting_api_integration/common/lib/log_supertest_errors.ts b/x-pack/test/alerting_api_integration/common/lib/log_supertest_errors.ts new file mode 100644 index 0000000000000..d8b0034606293 --- /dev/null +++ b/x-pack/test/alerting_api_integration/common/lib/log_supertest_errors.ts @@ -0,0 +1,66 @@ +/* + * Copyright 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 SuperTest from 'supertest'; +import { ToolingLog } from '@kbn/tooling-log'; + +export interface LogErrorDetailsInterface { + (this: SuperTest.Test, err: Error & { response?: any }): SuperTest.Test; + ignoreCodes: ( + codes: number[] + ) => (this: SuperTest.Test, err: Error & { response?: SuperTest.Response }) => SuperTest.Test; +} + +/** + * Creates a logger that can be used with `supertest` to log details around errors + * + * @param log + * + * @example + * const errorLogger = createSupertestErrorLogger(log); + * supertestWithoutAuth + * .post(`some/url`) + * .on('error', errorLogger) //<< Add logger to `error` event + * .send({}) + */ +export const createSupertestErrorLogger = (log: ToolingLog): LogErrorDetailsInterface => { + /** + * Utility for use with `supertest` that logs errors with details returned by the API + * @param err + */ + const logErrorDetails: LogErrorDetailsInterface = function (err) { + if (err.response && (err.response.body || err.response.text)) { + let outputData = + 'RESPONSE:\n' + err.response.body + ? JSON.stringify(err.response.body, null, 2) + : err.response.text; + + if (err.response.request) { + const { url = '', method = '', _data = '' } = err.response.request; + + outputData += `\nREQUEST: + ${method} ${url} + ${JSON.stringify(_data, null, 2)} + `; + } + + log.error(outputData); + } + + return this ?? err; + }; + logErrorDetails.ignoreCodes = (codes) => { + return function (err) { + if (err.response && err.response.status && !codes.includes(err.response.status)) { + return logErrorDetails.call(this, err); + } + return this; + }; + }; + + return logErrorDetails; +}; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/config.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/config.ts index f999da061b90b..8f52f7c40d005 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/config.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/config.ts @@ -16,4 +16,5 @@ export default createTestConfig('security_and_spaces', { publicBaseUrl: true, testFiles: [require.resolve('./tests')], useDedicatedTaskRunner: true, + experimentalFeatures: ['sentinelOneConnectorOn'], }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/config_non_dedicated_task_runner.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/config_non_dedicated_task_runner.ts index 7aed7501bc012..56e99c4c2d5e4 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/config_non_dedicated_task_runner.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/config_non_dedicated_task_runner.ts @@ -16,4 +16,5 @@ export default createTestConfig('security_and_spaces', { publicBaseUrl: true, testFiles: [require.resolve('./tests')], useDedicatedTaskRunner: false, + experimentalFeatures: ['sentinelOneConnectorOn'], }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/bulk_enqueue.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/bulk_enqueue.ts index 589f31656736c..599f370122358 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/bulk_enqueue.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/bulk_enqueue.ts @@ -133,7 +133,8 @@ export default function ({ getService }: FtrProviderContext) { connectorId, outcome: 'failure', message: `action execution failure: test.system-action-kibana-privileges:${connectorId}: ${name}`, - errorMessage: 'Unauthorized to execute actions', + errorMessage: + 'Unauthorized to execute a "test.system-action-kibana-privileges" action', startDate, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts index e6336b7092087..77dce4971e9ed 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts @@ -16,4 +16,5 @@ export default createTestConfig('security_and_spaces', { publicBaseUrl: true, testFiles: [require.resolve('.')], useDedicatedTaskRunner: true, + experimentalFeatures: ['sentinelOneConnectorOn'], }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts new file mode 100644 index 0000000000000..87ec7de447945 --- /dev/null +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts @@ -0,0 +1,240 @@ +/* + * Copyright 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 { + SENTINELONE_CONNECTOR_ID, + SUB_ACTION, +} from '@kbn/stack-connectors-plugin/common/sentinelone/constants'; +import { FeaturesPrivileges, Role } from '@kbn/security-plugin/common'; +import SuperTest from 'supertest'; +import expect from '@kbn/expect'; +import { getUrlPrefix } from '../../../../../common/lib'; +import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; +import { createSupertestErrorLogger } from '../../../../../common/lib/log_supertest_errors'; + +// eslint-disable-next-line import/no-default-export +export default function createSentinelOneTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const securityService = getService('security'); + const log = getService('log'); + const logErrorDetails = createSupertestErrorLogger(log); + + describe('SentinelOne', () => { + describe('sub-actions authz', () => { + interface CreatedUser { + username: string; + password: string; + deleteUser: () => Promise; + } + + // SentinelOne supported sub-actions + const s1SubActions = [ + SUB_ACTION.KILL_PROCESS, + SUB_ACTION.GET_AGENTS, + SUB_ACTION.ISOLATE_HOST, + SUB_ACTION.RELEASE_HOST, + SUB_ACTION.GET_REMOTE_SCRIPT_STATUS, + SUB_ACTION.GET_REMOTE_SCRIPT_RESULTS, + ]; + + let connectorId: string; + + const createUser = async ({ + username, + password = 'changeme', + kibanaFeatures = { actions: ['all'] }, + }: { + username: string; + password?: string; + kibanaFeatures?: FeaturesPrivileges; + }): Promise => { + const role: Role = { + name: username, + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [ + { + base: [], + feature: { + // Important: Saved Objects Managemnt should be set to `all` to ensure that authz + // is not defaulted to the check done against SO's for SentinelOne + savedObjectsManagement: ['all'], + ...kibanaFeatures, + }, + spaces: ['*'], + }, + ], + }; + + await securityService.role.create(role.name, { + kibana: role.kibana, + elasticsearch: role.elasticsearch, + }); + + await securityService.user.create(username, { + password: 'changeme', + full_name: role.name, + roles: [role.name], + }); + + return { + username, + password, + deleteUser: async () => { + await securityService.user.delete(role.name); + await securityService.role.delete(role.name); + }, + }; + }; + + before(async () => { + const response = await supertest + .post(`${getUrlPrefix('default')}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .on('error', logErrorDetails) + .send({ + name: 'My sub connector', + connector_type_id: SENTINELONE_CONNECTOR_ID, + config: { url: 'https://some.non.existent.com' }, + secrets: { token: 'abc-123' }, + }) + .expect(200); + + connectorId = response.body.id; + }); + + after(async () => { + if (connectorId) { + await supertest + .delete(`${getUrlPrefix('default')}/api/actions/connector/${connectorId}`) + .set('kbn-xsrf', 'true') + .send() + .expect(({ ok, status }) => { + // Should cover all success codes (ex. 204 (no content), 200, etc...) + if (!ok) { + throw new Error( + `Expected delete to return a status code in the 200, but got ${status}` + ); + } + }); + + connectorId = ''; + } + }); + + const executeSubAction = async ({ + subAction, + subActionParams, + expectedHttpCode = 200, + username = 'elastic', + password = 'changeme', + errorLogger = logErrorDetails, + }: { + supertest: SuperTest.SuperTest; + subAction: string; + subActionParams: Record; + expectedHttpCode?: number; + username?: string; + password?: string; + errorLogger?: (err: any) => void; + }) => { + return supertestWithoutAuth + .post(`${getUrlPrefix('default')}/api/actions/connector/${connectorId}/_execute`) + .set('kbn-xsrf', 'foo') + .on('error', errorLogger) + .auth(username, password) + .send({ + params: { + subAction, + subActionParams, + }, + }) + .expect(expectedHttpCode); + }; + + describe('and user has NO privileges', () => { + let user: CreatedUser; + + before(async () => { + user = await createUser({ + username: 'read_access_user', + kibanaFeatures: { actions: ['read'] }, + }); + }); + + after(async () => { + if (user) { + await user.deleteUser(); + } + }); + + for (const s1SubAction of s1SubActions) { + it(`should deny execute of ${s1SubAction}`, async () => { + const execRes = await executeSubAction({ + supertest: supertestWithoutAuth, + subAction: s1SubAction, + subActionParams: {}, + username: user.username, + password: user.password, + expectedHttpCode: 403, + errorLogger: logErrorDetails.ignoreCodes([403]), + }); + + expect(execRes.body).to.eql({ + statusCode: 403, + error: 'Forbidden', + message: 'Unauthorized to execute a ".sentinelone" action', + }); + }); + } + }); + + describe('and user has proper privileges', () => { + let user: CreatedUser; + + before(async () => { + user = await createUser({ + username: 'all_access_user', + }); + }); + + after(async () => { + if (user) { + await user.deleteUser(); + // @ts-expect-error + user = undefined; + } + }); + + for (const s1SubAction of s1SubActions) { + it(`should allow execute of ${s1SubAction}`, async () => { + const { + // eslint-disable-next-line @typescript-eslint/naming-convention + body: { status, message, connector_id }, + } = await executeSubAction({ + supertest: supertestWithoutAuth, + subAction: s1SubAction, + subActionParams: {}, + username: user.username, + password: user.password, + }); + + expect({ status, message, connector_id }).to.eql({ + status: 'error', + message: 'an error occurred while running the action', + connector_id: connectorId, + }); + }); + } + }); + }); + }); +} diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/execute.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/execute.ts index 8433570e08241..d12bc59aca4df 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/execute.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/execute.ts @@ -41,12 +41,13 @@ export default function ({ getService }: FtrProviderContext) { const { user, space } = scenario; describe(scenario.id, () => { it('should handle execute request appropriately', async () => { + const connectorTypeId = 'test.index-record'; const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') .send({ name: 'My action', - connector_type_id: 'test.index-record', + connector_type_id: connectorTypeId, config: { unencrypted: `This value shouldn't get encrypted`, }, @@ -78,7 +79,7 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', - message: 'Unauthorized to execute actions', + message: `Unauthorized to execute a "${connectorTypeId}" action`, }); break; case 'global_read at space1': @@ -161,7 +162,7 @@ export default function ({ getService }: FtrProviderContext) { case 'space_1_all at space2': case 'space_1_all at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.statusCode).to.eql(403); + expect(response.statusCode).to.eql(403, response.text); expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', @@ -184,12 +185,13 @@ export default function ({ getService }: FtrProviderContext) { }); it('should handle execute request appropriately after action is updated', async () => { + const connectorTypeId = 'test.index-record'; const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') .send({ name: 'My action', - connector_type_id: 'test.index-record', + connector_type_id: connectorTypeId, config: { unencrypted: `This value shouldn't get encrypted`, }, @@ -235,7 +237,7 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', - message: 'Unauthorized to execute actions', + message: `Unauthorized to execute a "${connectorTypeId}" action`, }); break; case 'global_read at space1': @@ -286,7 +288,7 @@ export default function ({ getService }: FtrProviderContext) { case 'no_kibana_privileges at space1': case 'space_1_all_alerts_none_actions at space1': case 'space_1_all at space2': - expect(response.statusCode).to.eql(403); + expect(response.statusCode).to.eql(403, response.text); expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', @@ -340,12 +342,13 @@ export default function ({ getService }: FtrProviderContext) { }); it('should handle execute request appropriately after changing config properties', async () => { + const connectorTypeId = '.email'; const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') .send({ name: 'test email action', - connector_type_id: '.email', + connector_type_id: connectorTypeId, config: { from: 'email-from-1@example.com', // this host is specifically added to allowedHosts in: @@ -397,7 +400,7 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', - message: 'Unauthorized to execute actions', + message: `Unauthorized to execute a "${connectorTypeId}" action`, }); break; case 'global_read at space1': @@ -416,12 +419,13 @@ export default function ({ getService }: FtrProviderContext) { let indexedRecord: any; let searchResult: any; const reference = `actions-execute-3:${user.username}`; + const connectorTypeId = 'test.authorization'; const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/actions/connector`) .set('kbn-xsrf', 'foo') .send({ name: 'My action', - connector_type_id: 'test.authorization', + connector_type_id: connectorTypeId, }) .expect(200); objectRemover.add(space.id, createdAction.id, 'action', 'actions'); @@ -448,7 +452,7 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', - message: 'Unauthorized to execute actions', + message: `Unauthorized to execute a "${connectorTypeId}" action`, }); break; case 'global_read at space1': @@ -528,7 +532,7 @@ export default function ({ getService }: FtrProviderContext) { case 'global_read at space1': case 'space_1_all at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.statusCode).to.eql(403); + expect(response.statusCode).to.eql(403, response.text); expect(response.body).to.eql({ statusCode: 403, error: 'Forbidden', @@ -542,7 +546,7 @@ export default function ({ getService }: FtrProviderContext) { */ case 'superuser at space1': case 'system_actions at space1': - expect(response.statusCode).to.eql(200); + expect(response.statusCode).to.eql(200, response.text); await validateSystemEventLog({ spaceId: space.id, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/index.ts index e9fc2cbeb7c00..dc1876d6e784b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/index.ts @@ -32,6 +32,7 @@ export default function connectorsTests({ loadTestFile, getService }: FtrProvide loadTestFile(require.resolve('./connector_types/es_index_preconfigured')); loadTestFile(require.resolve('./connector_types/opsgenie')); loadTestFile(require.resolve('./connector_types/pagerduty')); + loadTestFile(require.resolve('./connector_types/sentinelone')); loadTestFile(require.resolve('./connector_types/server_log')); loadTestFile(require.resolve('./connector_types/slack_webhook')); loadTestFile(require.resolve('./connector_types/slack_api')); From 594731dc47d82ae99e5dc1e0aeb44eadf2e9681e Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Mon, 11 Dec 2023 10:50:07 -0700 Subject: [PATCH 10/39] Fix saved query response validation (#172579) ## Summary Fixes https://github.com/elastic/kibana/issues/167610. Updates the saved query response validation to optionally include the `namespace` attribute (which is returned from the saved objects client for create, but not for update). ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios Co-authored-by: Stratoula Kalafateli --- src/plugins/data/server/query/routes.ts | 2 +- .../functional/apps/discover/saved_queries.ts | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/plugins/data/server/query/routes.ts b/src/plugins/data/server/query/routes.ts index 7446e3ad83a12..5ac18df37d544 100644 --- a/src/plugins/data/server/query/routes.ts +++ b/src/plugins/data/server/query/routes.ts @@ -30,7 +30,7 @@ const SAVED_QUERY_ATTRS_CONFIG = schema.object({ const savedQueryResponseSchema = schema.object({ id: schema.string(), attributes: SAVED_QUERY_ATTRS_CONFIG, - namespaces: schema.arrayOf(schema.string()), + namespaces: schema.maybe(schema.arrayOf(schema.string())), }); const access = 'internal'; diff --git a/x-pack/test/functional/apps/discover/saved_queries.ts b/x-pack/test/functional/apps/discover/saved_queries.ts index 66ceb0dd974df..2795ce3beafd6 100644 --- a/x-pack/test/functional/apps/discover/saved_queries.ts +++ b/x-pack/test/functional/apps/discover/saved_queries.ts @@ -5,6 +5,7 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { @@ -12,6 +13,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const spaces = getService('spaces'); + const toasts = getService('toasts'); const PageObjects = getPageObjects([ 'common', 'discover', @@ -71,6 +73,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); await savedQueryManagementComponent.savedQueryMissingOrFail(savedQueryName); }); + + it('updates a saved query', async () => { + // Navigate to Discover & create a saved query + await PageObjects.common.navigateToApp('discover'); + await queryBar.setQuery('response:200'); + await savedQueryManagementComponent.saveNewQuery(savedQueryName, '', true, false); + await savedQueryManagementComponent.savedQueryExistOrFail(savedQueryName); + await savedQueryManagementComponent.closeSavedQueryManagementComponent(); + + // Navigate to Discover & create a saved query + await queryBar.setQuery('response:404'); + await savedQueryManagementComponent.updateCurrentlyLoadedQuery('', true, false); + + // Expect to see a success toast + const successToast = await toasts.getToastElement(1); + const successText = await successToast.getVisibleText(); + expect(successText).to.equal(`Your query "${savedQueryName}" was saved`); + + await PageObjects.common.navigateToApp('discover'); + await savedQueryManagementComponent.deleteSavedQuery(savedQueryName); + }); }); }); } From 543a047adf09940cdb8eb59e0d79b56148916d9d Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:50:41 -0500 Subject: [PATCH 11/39] [Serverless Search] Index documents can be browsed in index management (#172635) This PR adds functionality to browse index documents in a index management app. ## Screen Recording https://github.com/elastic/kibana/assets/55930906/d7e565b4-f893-4c56-8e51-3a535cea09ff ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) --- packages/kbn-optimizer/limits.yml | 2 +- .../lib/fetch_search_results.test.ts | 36 ++++----- .../lib/fetch_search_results.ts | 6 +- .../routes/enterprise_search/search.test.ts | 15 ++-- .../server/routes/enterprise_search/search.ts | 2 +- .../components/index_documents/documents.tsx | 76 +++++++++++++++++++ .../index_documents/documents_tab.tsx | 43 +++++++++++ .../hooks/api/use_index_documents.tsx | 47 ++++++++++++ .../hooks/api/use_index_mappings.tsx | 21 +++++ .../serverless_search/public/plugin.ts | 9 ++- .../serverless_search/server/plugin.ts | 2 + .../server/routes/indices_routes.ts | 41 ++++++++++ .../server/routes/mapping_routes.ts | 33 ++++++++ .../plugins/serverless_search/tsconfig.json | 2 + 14 files changed, 300 insertions(+), 35 deletions(-) create mode 100644 x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/hooks/api/use_index_documents.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/hooks/api/use_index_mappings.tsx create mode 100644 x-pack/plugins/serverless_search/server/routes/mapping_routes.ts diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index ef99652ee767f..764fe35dd759d 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -131,7 +131,7 @@ pageLoadAssetSize: securitySolutionServerless: 62488 serverless: 16573 serverlessObservability: 68747 - serverlessSearch: 71995 + serverlessSearch: 72995 sessionView: 77750 share: 71239 snapshotRestore: 79032 diff --git a/packages/kbn-search-index-documents/lib/fetch_search_results.test.ts b/packages/kbn-search-index-documents/lib/fetch_search_results.test.ts index dc60dcba437bd..dec058aae0bf2 100644 --- a/packages/kbn-search-index-documents/lib/fetch_search_results.test.ts +++ b/packages/kbn-search-index-documents/lib/fetch_search_results.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { IScopedClusterClient } from '@kbn/core/server'; +import { ElasticsearchClient } from '@kbn/core/server'; import { DEFAULT_DOCS_PER_PAGE } from '../types'; import { fetchSearchResults } from './fetch_search_results'; @@ -14,9 +14,7 @@ import { fetchSearchResults } from './fetch_search_results'; const DEFAULT_FROM_VALUE = 0; describe('fetchSearchResults lib function', () => { const mockClient = { - asCurrentUser: { - search: jest.fn(), - }, + search: jest.fn(), }; const indexName = 'search-regular-index'; @@ -78,15 +76,13 @@ describe('fetchSearchResults lib function', () => { }); it('should return search results with hits', async () => { - mockClient.asCurrentUser.search.mockImplementation(() => - Promise.resolve(mockSearchResponseWithHits) - ); + mockClient.search.mockImplementation(() => Promise.resolve(mockSearchResponseWithHits)); await expect( - fetchSearchResults(mockClient as unknown as IScopedClusterClient, indexName, query) + fetchSearchResults(mockClient as unknown as ElasticsearchClient, indexName, query) ).resolves.toEqual(regularSearchResultsResponse); - expect(mockClient.asCurrentUser.search).toHaveBeenCalledWith({ + expect(mockClient.search).toHaveBeenCalledWith({ from: DEFAULT_FROM_VALUE, index: indexName, q: query, @@ -95,13 +91,11 @@ describe('fetchSearchResults lib function', () => { }); it('should escape quotes in queries and return results with hits', async () => { - mockClient.asCurrentUser.search.mockImplementation(() => - Promise.resolve(mockSearchResponseWithHits) - ); + mockClient.search.mockImplementation(() => Promise.resolve(mockSearchResponseWithHits)); await expect( fetchSearchResults( - mockClient as unknown as IScopedClusterClient, + mockClient as unknown as ElasticsearchClient, indexName, '"yellow banana"', 0, @@ -109,7 +103,7 @@ describe('fetchSearchResults lib function', () => { ) ).resolves.toEqual(regularSearchResultsResponse); - expect(mockClient.asCurrentUser.search).toHaveBeenCalledWith({ + expect(mockClient.search).toHaveBeenCalledWith({ from: DEFAULT_FROM_VALUE, index: indexName, q: '\\"yellow banana\\"', @@ -118,15 +112,13 @@ describe('fetchSearchResults lib function', () => { }); it('should return search results with hits when no query is passed', async () => { - mockClient.asCurrentUser.search.mockImplementation(() => - Promise.resolve(mockSearchResponseWithHits) - ); + mockClient.search.mockImplementation(() => Promise.resolve(mockSearchResponseWithHits)); await expect( - fetchSearchResults(mockClient as unknown as IScopedClusterClient, indexName) + fetchSearchResults(mockClient as unknown as ElasticsearchClient, indexName) ).resolves.toEqual(regularSearchResultsResponse); - expect(mockClient.asCurrentUser.search).toHaveBeenCalledWith({ + expect(mockClient.search).toHaveBeenCalledWith({ from: DEFAULT_FROM_VALUE, index: indexName, size: DEFAULT_DOCS_PER_PAGE, @@ -134,7 +126,7 @@ describe('fetchSearchResults lib function', () => { }); it('should return empty search results', async () => { - mockClient.asCurrentUser.search.mockImplementationOnce(() => + mockClient.search.mockImplementationOnce(() => Promise.resolve({ ...mockSearchResponseWithHits, hits: { @@ -149,10 +141,10 @@ describe('fetchSearchResults lib function', () => { ); await expect( - fetchSearchResults(mockClient as unknown as IScopedClusterClient, indexName, query) + fetchSearchResults(mockClient as unknown as ElasticsearchClient, indexName, query) ).resolves.toEqual(emptySearchResultsResponse); - expect(mockClient.asCurrentUser.search).toHaveBeenCalledWith({ + expect(mockClient.search).toHaveBeenCalledWith({ from: DEFAULT_FROM_VALUE, index: indexName, q: query, diff --git a/packages/kbn-search-index-documents/lib/fetch_search_results.ts b/packages/kbn-search-index-documents/lib/fetch_search_results.ts index 4427fded71c2c..3abca93516c5a 100644 --- a/packages/kbn-search-index-documents/lib/fetch_search_results.ts +++ b/packages/kbn-search-index-documents/lib/fetch_search_results.ts @@ -7,13 +7,13 @@ */ import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; -import { IScopedClusterClient } from '@kbn/core/server'; +import { ElasticsearchClient } from '@kbn/core/server'; import { DEFAULT_DOCS_PER_PAGE, Paginate } from '../types'; import { escapeLuceneChars } from '../utils/escape_lucene_charts'; import { fetchWithPagination } from '../utils/fetch_with_pagination'; export const fetchSearchResults = async ( - client: IScopedClusterClient, + client: ElasticsearchClient, indexName: string, query?: string, from: number = 0, @@ -21,7 +21,7 @@ export const fetchSearchResults = async ( ): Promise> => { const result = await fetchWithPagination( async () => - await client.asCurrentUser.search({ + await client.search({ from, index: indexName, size, diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.test.ts index 0d7fd264b143f..08c82e8523e44 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.test.ts @@ -19,12 +19,15 @@ jest.mock('@kbn/search-index-documents/lib', () => ({ describe('Elasticsearch Search', () => { let mockRouter: MockRouter; - const mockClient = {}; - + const mockClient = { + asCurrentUser: jest.fn(), + }; beforeEach(() => { const context = { - core: Promise.resolve({ elasticsearch: { client: mockClient } }), - } as jest.Mocked; + core: Promise.resolve({ + elasticsearch: { client: mockClient }, + }), + } as unknown as jest.Mocked; mockRouter = new MockRouter({ context, @@ -90,7 +93,7 @@ describe('Elasticsearch Search', () => { beforeEach(() => { const context = { core: Promise.resolve({ elasticsearch: { client: mockClient } }), - } as jest.Mocked; + } as unknown as jest.Mocked; mockRouterNoQuery = new MockRouter({ context, @@ -137,7 +140,7 @@ describe('Elasticsearch Search', () => { }); expect(fetchSearchResults).toHaveBeenCalledWith( - mockClient, + mockClient.asCurrentUser, 'search-index-name', 'banana', 0, diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.ts index f1f6862c58a8f..430740f85644c 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search.ts @@ -43,7 +43,7 @@ export function registerSearchRoute({ router, log }: RouteDependencies) { elasticsearchErrorHandler(log, async (context, request, response) => { const indexName = decodeURIComponent(request.params.index_name); const searchQuery = request.body.searchQuery; - const { client } = (await context.core).elasticsearch; + const client = (await context.core).elasticsearch.client.asCurrentUser; const { page = 0, size = ENTERPRISE_SEARCH_DOCUMENTS_DEFAULT_DOC_COUNT } = request.query; const from = page * size; try { diff --git a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx new file mode 100644 index 0000000000000..8d719485973e4 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect, useState } from 'react'; + +import { + DocumentList, + DocumentsOverview, + INDEX_DOCUMENTS_META_DEFAULT, +} from '@kbn/search-index-documents'; + +import { i18n } from '@kbn/i18n'; +import { useIndexDocumentSearch } from '../../hooks/api/use_index_documents'; +import { useIndexMappings } from '../../hooks/api/use_index_mappings'; + +const DEFAULT_PAGINATION = { + pageIndex: INDEX_DOCUMENTS_META_DEFAULT.pageIndex, + pageSize: INDEX_DOCUMENTS_META_DEFAULT.pageSize, + totalItemCount: INDEX_DOCUMENTS_META_DEFAULT.totalItemCount, +}; + +interface IndexDocumentsProps { + indexName: string; +} + +export const IndexDocuments: React.FC = ({ indexName }) => { + const [pagination, setPagination] = useState(DEFAULT_PAGINATION); + const [searchQuery, setSearchQuery] = useState(''); + const searchQueryCallback = (query: string) => { + setSearchQuery(query); + }; + const { results: indexDocuments, meta: documentsMeta } = useIndexDocumentSearch( + indexName, + pagination, + searchQuery + ); + + const { data: mappingData } = useIndexMappings(indexName); + + const docs = indexDocuments?.data ?? []; + + useEffect(() => { + setSearchQuery(''); + setPagination(DEFAULT_PAGINATION); + }, [indexName]); + return ( + + {docs.length === 0 && + i18n.translate('xpack.serverlessSearch.indexManagementTab.documents.noMappings', { + defaultMessage: 'No documents found for index', + })} + {docs?.length > 0 && ( + setPagination({ ...pagination, pageIndex })} + setDocsPerPage={(pageSize) => setPagination({ ...pagination, pageSize })} + /> + )} + + } + /> + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx new file mode 100644 index 0000000000000..c71089b5f3b83 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/index_documents/documents_tab.tsx @@ -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 { IndexDetailsTab } from '@kbn/index-management-plugin/common/constants'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { CoreStart } from '@kbn/core-lifecycle-browser'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { ServerlessSearchPluginStartDependencies } from '../../../types'; +import { IndexDocuments } from './documents'; + +export const createIndexOverviewContent = ( + core: CoreStart, + services: ServerlessSearchPluginStartDependencies +): IndexDetailsTab => { + return { + id: 'documents', + name: ( + + ), + order: 11, + renderTabContent: ({ index }) => { + const queryClient = new QueryClient(); + return ( + + + + + + + ); + }, + }; +}; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_documents.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_documents.tsx new file mode 100644 index 0000000000000..7c95376b295d8 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_documents.tsx @@ -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 { Pagination } from '@elastic/eui'; +import { SearchHit } from '@kbn/es-types'; +import { pageToPagination, Paginate } from '@kbn/search-index-documents'; +import { useQuery } from '@tanstack/react-query'; +import { useKibanaServices } from '../use_kibana'; + +interface IndexDocuments { + meta: Pagination; + results: Paginate; +} +const DEFAULT_PAGINATION = { + from: 0, + has_more_hits_than_total: false, + size: 10, + total: 0, +}; +export const useIndexDocumentSearch = ( + indexName: string, + pagination: Omit, + searchQuery?: string +) => { + const { http } = useKibanaServices(); + const response = useQuery({ + queryKey: ['fetchIndexDocuments', pagination, searchQuery], + queryFn: async () => + http.post(`/internal/serverless_search/indices/${indexName}/search`, { + body: JSON.stringify({ + searchQuery, + }), + query: { + page: pagination.pageIndex, + size: pagination.pageSize, + }, + }), + }); + return { + results: response?.data?.results, + meta: pageToPagination(response?.data?.results?._meta?.page ?? DEFAULT_PAGINATION), + }; +}; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_mappings.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_mappings.tsx new file mode 100644 index 0000000000000..28ee739bc6700 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_index_mappings.tsx @@ -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 { IndicesGetMappingIndexMappingRecord } from '@elastic/elasticsearch/lib/api/types'; +import { useQuery } from '@tanstack/react-query'; +import { useKibanaServices } from '../use_kibana'; + +export const useIndexMappings = (indexName: string) => { + const { http } = useKibanaServices(); + return useQuery({ + queryKey: ['fetchIndexMappings'], + queryFn: async () => + http.fetch( + `/internal/serverless_search/mappings/${indexName}` + ), + }); +}; diff --git a/x-pack/plugins/serverless_search/public/plugin.ts b/x-pack/plugins/serverless_search/public/plugin.ts index 4203925650385..f82af8390c9fc 100644 --- a/x-pack/plugins/serverless_search/public/plugin.ts +++ b/x-pack/plugins/serverless_search/public/plugin.ts @@ -24,6 +24,7 @@ import { ServerlessSearchPluginStart, ServerlessSearchPluginStartDependencies, } from './types'; +import { createIndexOverviewContent } from './application/components/index_documents/documents_tab'; export class ServerlessSearchPlugin implements @@ -80,14 +81,14 @@ export class ServerlessSearchPlugin return await renderApp(element, coreStart, { history, ...services }); }, }); - return {}; } public start( core: CoreStart, - { serverless, management, cloud, indexManagement }: ServerlessSearchPluginStartDependencies + services: ServerlessSearchPluginStartDependencies ): ServerlessSearchPluginStart { + const { serverless, management, cloud, indexManagement } = services; serverless.setProjectHome('/app/elasticsearch'); serverless.setSideNavComponent(createComponent(core, { serverless, cloud })); management.setIsSidebarEnabled(false); @@ -96,6 +97,10 @@ export class ServerlessSearchPlugin hideLinksTo: [appIds.MAINTENANCE_WINDOWS], }); indexManagement?.extensionsService.setIndexMappingsContent(createIndexMappingsContent(core)); + indexManagement?.extensionsService.addIndexDetailsTab( + createIndexOverviewContent(core, services) + ); + return {}; } diff --git a/x-pack/plugins/serverless_search/server/plugin.ts b/x-pack/plugins/serverless_search/server/plugin.ts index 6e6a90735ee23..e533ae6023380 100644 --- a/x-pack/plugins/serverless_search/server/plugin.ts +++ b/x-pack/plugins/serverless_search/server/plugin.ts @@ -28,6 +28,7 @@ import type { } from './types'; import { registerConnectorsRoutes } from './routes/connectors_routes'; import { registerTelemetryUsageCollector } from './collectors/connectors/telemetry'; +import { registerMappingRoutes } from './routes/mapping_routes'; export interface RouteDependencies { http: CoreSetup['http']; @@ -93,6 +94,7 @@ export class ServerlessSearchPlugin registerApiKeyRoutes(dependencies); registerConnectorsRoutes(dependencies); registerIndicesRoutes(dependencies); + registerMappingRoutes(dependencies); }); if (usageCollection) { diff --git a/x-pack/plugins/serverless_search/server/routes/indices_routes.ts b/x-pack/plugins/serverless_search/server/routes/indices_routes.ts index 9cac99f30ab31..7f165f13218f1 100644 --- a/x-pack/plugins/serverless_search/server/routes/indices_routes.ts +++ b/x-pack/plugins/serverless_search/server/routes/indices_routes.ts @@ -8,6 +8,8 @@ import { IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; import { schema } from '@kbn/config-schema'; +import { fetchSearchResults } from '@kbn/search-index-documents/lib'; +import { DEFAULT_DOCS_PER_PAGE } from '@kbn/search-index-documents/types'; import { fetchIndices } from '../lib/indices/fetch_indices'; import { RouteDependencies } from '../plugin'; @@ -72,6 +74,45 @@ export const registerIndicesRoutes = ({ router, security }: RouteDependencies) = }); } ); + + router.post( + { + path: '/internal/serverless_search/indices/{index_name}/search', + validate: { + body: schema.object({ + searchQuery: schema.string({ + defaultValue: '', + }), + }), + params: schema.object({ + index_name: schema.string(), + }), + query: schema.object({ + page: schema.number({ defaultValue: 0, min: 0 }), + size: schema.number({ + defaultValue: DEFAULT_DOCS_PER_PAGE, + min: 0, + }), + }), + }, + }, + async (context, request, response) => { + const client = (await context.core).elasticsearch.client.asCurrentUser; + const indexName = decodeURIComponent(request.params.index_name); + const searchQuery = request.body.searchQuery; + const { page = 0, size = DEFAULT_DOCS_PER_PAGE } = request.query; + const from = page * size; + + const searchResults = await fetchSearchResults(client, indexName, searchQuery, from, size); + + return response.ok({ + body: { + results: searchResults, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); }; function isHidden(index?: IndicesIndexState): boolean { diff --git a/x-pack/plugins/serverless_search/server/routes/mapping_routes.ts b/x-pack/plugins/serverless_search/server/routes/mapping_routes.ts new file mode 100644 index 0000000000000..bb6e22a1bd8fe --- /dev/null +++ b/x-pack/plugins/serverless_search/server/routes/mapping_routes.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { RouteDependencies } from '../plugin'; + +export const registerMappingRoutes = ({ router }: RouteDependencies) => { + router.get( + { + path: '/internal/serverless_search/mappings/{index_name}', + validate: { + params: schema.object({ + index_name: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const mapping = await client.asCurrentUser.indices.getMapping({ + expand_wildcards: ['open'], + index: request.params.index_name, + }); + return response.ok({ + body: mapping[request.params.index_name], + headers: { 'content-type': 'application/json' }, + }); + } + ); +}; diff --git a/x-pack/plugins/serverless_search/tsconfig.json b/x-pack/plugins/serverless_search/tsconfig.json index 6e00a0f988c2d..e8cad3756b974 100644 --- a/x-pack/plugins/serverless_search/tsconfig.json +++ b/x-pack/plugins/serverless_search/tsconfig.json @@ -30,6 +30,7 @@ "@kbn/management-cards-navigation", "@kbn/core-elasticsearch-server", "@kbn/search-api-panels", + "@kbn/search-index-documents", "@kbn/serverless-search-settings", "@kbn/core-lifecycle-browser", "@kbn/react-kibana-context-theme", @@ -39,5 +40,6 @@ "@kbn/kibana-utils-plugin", "@kbn/index-management-plugin", "@kbn/usage-collection-plugin", + "@kbn/es-types", ] } From 644c61cdc699799523cb62beaacad67d39b12de7 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Mon, 11 Dec 2023 11:52:46 -0700 Subject: [PATCH 12/39] [Embeddable] Fix embeddable panel loader (#173000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fix https://github.com/elastic/kibana/issues/172996 Basically, the embeddable output has three optional properties tracking the state of the child: `loading`, `rendered`, `error`. Child embeddables are currently using these relatively inconsistently, but for the purposes of hiding/showing the loader we can assume that the first time any embeddable sets `loading` to false, `rendered` to true, or `error` to some error, the loader shouldn't be shown anymore. ## Testing This is a dashboard that creates both a search error (runtime) and an embeddable stack error (missing reference). Screenshot 2023-12-08 at 4 05 03 PM
``` {"attributes":{"fieldFormatMap":"{\"hour_of_day\":{}}","name":"Kibana Sample Data Logs","runtimeFieldMap":"{\"hour_of_day\":{\"type\":\"long\",\"script\":{\"source\":\"emit(doc['timestamp'].value.getHour());\"}}}","timeFieldName":"timestamp","title":"kibana_sample_data_logs"},"coreMigrationVersion":"8.8.0","created_at":"2023-12-08T17:30:55.069Z","id":"90943e30-9a47-11e8-b64d-95841ca0b247","managed":false,"references":[],"type":"index-pattern","typeMigrationVersion":"8.0.0","updated_at":"2023-12-08T17:30:55.069Z","version":"WzExMCwzXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"72110599-43d0-4e7e-8821-55e92670d181\"},\"panelIndex\":\"72110599-43d0-4e7e-8821-55e92670d181\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_72110599-43d0-4e7e-8821-55e92670d181\"},{\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"bcd0181c-dbdf-4165-8011-b1211970232c\"},\"panelIndex\":\"bcd0181c-dbdf-4165-8011-b1211970232c\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-75249dd3-e213-44a7-ab24-e155c7bff23c\"},{\"type\":\"index-pattern\",\"name\":\"568ef039-09f6-47e4-adae-30f449514d4b\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"75249dd3-e213-44a7-ab24-e155c7bff23c\",\"accessors\":[\"968f9f62-722e-4c79-9675-390632f76a23\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"03a7a16a-0761-4e19-a3ff-ea412facc4f8\"}]},\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filters\":[{\"meta\":{\"index\":\"568ef039-09f6-47e4-adae-30f449514d4b\",\"type\":\"custom\",\"disabled\":false,\"negate\":false,\"alias\":null,\"key\":\"query\",\"value\":\"{\\\"error_query\\\":{\\\"indices\\\":[{\\\"error_type\\\":\\\"exception\\\",\\\"message\\\":\\\"local shard failure message 123\\\",\\\"name\\\":\\\"kibana_sample_data_logs\\\"}]}}\"},\"$state\":{\"store\":\"appState\"},\"query\":{\"error_query\":{\"indices\":[{\"error_type\":\"exception\",\"message\":\"local shard failure message 123\",\"name\":\"kibana_sample_data_logs\"}]}}}],\"datasourceStates\":{\"formBased\":{\"layers\":{\"75249dd3-e213-44a7-ab24-e155c7bff23c\":{\"columns\":{\"03a7a16a-0761-4e19-a3ff-ea412facc4f8\":{\"label\":\"timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"968f9f62-722e-4c79-9675-390632f76a23\":{\"label\":\"Median of bytes\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"bytes\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"03a7a16a-0761-4e19-a3ff-ea412facc4f8\",\"968f9f62-722e-4c79-9675-390632f76a23\"],\"incompleteColumns\":{},\"sampling\":1}}},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}}}]","timeRestore":false,"title":"My problem dash","version":1},"coreMigrationVersion":"8.8.0","created_at":"2023-12-08T23:02:45.161Z","id":"14469a24-5299-44f8-974a-69e66c48e9f4","managed":false,"references":[{"id":"67a260e2-01d2-44ae-8c3c-448829aebe0c","name":"72110599-43d0-4e7e-8821-55e92670d181:panel_72110599-43d0-4e7e-8821-55e92670d181","type":"lens"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"bcd0181c-dbdf-4165-8011-b1211970232c:indexpattern-datasource-layer-75249dd3-e213-44a7-ab24-e155c7bff23c","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"bcd0181c-dbdf-4165-8011-b1211970232c:568ef039-09f6-47e4-adae-30f449514d4b","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"8.9.0","updated_at":"2023-12-08T23:02:45.161Z","version":"WzE0MSwzXQ=="} {"excludedObjects":[],"excludedObjectsCount":0,"exportedCount":2,"missingRefCount":1,"missingReferences":[{"id":"67a260e2-01d2-44ae-8c3c-448829aebe0c","type":"lens"}]} ```
--- .../embeddable/public/embeddable_panel/embeddable_panel.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx b/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx index 2c9a30431218d..c24383ff9fb18 100644 --- a/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx +++ b/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx @@ -129,8 +129,9 @@ export const EmbeddablePanel = (panelProps: UnwrappedEmbeddablePanelProps) => { * Select state from the embeddable */ const loading = useSelectFromEmbeddableOutput('loading', embeddable); + const rendered = useSelectFromEmbeddableOutput('rendered', embeddable); - if (loading === false && !initialLoadComplete) { + if ((loading === false || rendered === true || outputError) && !initialLoadComplete) { setInitialLoadComplete(true); } From ac3e1f1e8efbe6b6cb68f8281ad282a9cb3d7612 Mon Sep 17 00:00:00 2001 From: Colton Myers Date: Mon, 11 Dec 2023 12:02:08 -0700 Subject: [PATCH 13/39] [Telemetry] Add opentelemetry/android as a valid APM agent name (#172898) ## Summary The `opentelemetry/android` agent was released in September. This PR adds it to our telemetry collection. ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../kbn-apm-synthtrace-client/src/types/agent_names.ts | 1 + packages/kbn-elastic-agent-utils/src/agent_names.ts | 2 ++ .../apm/common/__snapshots__/apm_telemetry.test.ts.snap | 6 ++++++ x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts | 7 +++++++ .../telemetry_collection_xpack/schema/xpack_plugins.json | 6 ++++++ 5 files changed, 22 insertions(+) diff --git a/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts b/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts index d9e3a371e0e87..c57b15e3dace0 100644 --- a/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts +++ b/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts @@ -31,6 +31,7 @@ type OpenTelemetryAgentName = | 'opentelemetry/python' | 'opentelemetry/ruby' | 'opentelemetry/swift' + | 'opentelemetry/android' | 'opentelemetry/webjs'; // Unable to reference AgentName from '@kbn/apm-plugin/typings/es_schemas/ui/fields/agent' due to circular reference diff --git a/packages/kbn-elastic-agent-utils/src/agent_names.ts b/packages/kbn-elastic-agent-utils/src/agent_names.ts index f29160699a241..ca98b64024f8a 100644 --- a/packages/kbn-elastic-agent-utils/src/agent_names.ts +++ b/packages/kbn-elastic-agent-utils/src/agent_names.ts @@ -49,6 +49,7 @@ export type OpenTelemetryAgentName = | 'opentelemetry/ruby' | 'opentelemetry/rust' | 'opentelemetry/swift' + | 'opentelemetry/android' | 'opentelemetry/webjs'; export const OPEN_TELEMETRY_AGENT_NAMES: OpenTelemetryAgentName[] = [ 'otlp', @@ -63,6 +64,7 @@ export const OPEN_TELEMETRY_AGENT_NAMES: OpenTelemetryAgentName[] = [ 'opentelemetry/ruby', 'opentelemetry/rust', 'opentelemetry/swift', + 'opentelemetry/android', 'opentelemetry/webjs', ]; diff --git a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap index 79ecdc077ea6f..a372355d1db7c 100644 --- a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap @@ -151,6 +151,12 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "description": "Total number of services utilizing the opentelemetry/swift agent within the last day" } }, + "opentelemetry/android": { + "type": "long", + "_meta": { + "description": "Total number of services utilizing the opentelemetry/android agent within the last day" + } + }, "opentelemetry/webjs": { "type": "long", "_meta": { diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts index e52be12ca5c36..33a95f246f86b 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts @@ -373,6 +373,13 @@ const apmPerAgentSchema: Pick< 'Total number of services utilizing the opentelemetry/swift agent within the last day', }, }, + 'opentelemetry/android': { + type: 'long', + _meta: { + description: + 'Total number of services utilizing the opentelemetry/android agent within the last day', + }, + }, 'opentelemetry/webjs': { type: 'long', _meta: { diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index 777d78acb192f..a7098dae6a150 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -2865,6 +2865,12 @@ "description": "Total number of services utilizing the opentelemetry/swift agent within the last day" } }, + "opentelemetry/android": { + "type": "long", + "_meta": { + "description": "Total number of services utilizing the opentelemetry/android agent within the last day" + } + }, "opentelemetry/webjs": { "type": "long", "_meta": { From 0c16c9db4e47e964e9385f1daab5b9d86e0c2732 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Mon, 11 Dec 2023 11:36:25 -0800 Subject: [PATCH 14/39] Removes duplicate images (#173097) For https://github.com/elastic/obs-docs-projects/issues/217 --- docs/canvas/canvas-tutorial.asciidoc | 2 +- .../canvas_tutorialCustomTimeFilter_7.17.0.png | Bin 171101 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 docs/canvas/images/canvas_tutorialCustomTimeFilter_7.17.0.png diff --git a/docs/canvas/canvas-tutorial.asciidoc b/docs/canvas/canvas-tutorial.asciidoc index f8d2297df18b9..5016dbec88aac 100644 --- a/docs/canvas/canvas-tutorial.asciidoc +++ b/docs/canvas/canvas-tutorial.asciidoc @@ -121,7 +121,7 @@ To focus your data on a specific time range, add the time filter. . To use the date time field from the sample data, enter `order_date` in the *Column* field, then click *Set*. [role="screenshot"] -image::images/canvas_tutorialCustomTimeFilter_7.17.0.png[Custom time filter added to the workpad] +image::../setup/images/canvas_tutorialCustomTimeFilter_7.17.0.png[Custom time filter added to the workpad] To see how the data changes, set the time filter to *Last 7 days*. As you change the time filter options, the elements automatically update. diff --git a/docs/canvas/images/canvas_tutorialCustomTimeFilter_7.17.0.png b/docs/canvas/images/canvas_tutorialCustomTimeFilter_7.17.0.png deleted file mode 100644 index 7eb78efa5f59111fa619cb4ec645a0fee38a38a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171101 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

Z%U?o|QGvdAFkUBhMAG*LewhcB0LzV@>GUn_c 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 From a021240dbb71b3a173907b035b3a14273f49c53a Mon Sep 17 00:00:00 2001 From: Rachel Shen Date: Mon, 11 Dec 2023 13:48:21 -0700 Subject: [PATCH 15/39] [Guided Onboarding] Refactor tests (#172696) ## Summary Closes #172597, #172595, #172596 PR #171586 created flaky tests where the snapshot isn't resilient. Solution filtering behavior is now at the component vs. the guide cards level. This PR is removing the test file since the functionality is being tested in getting_started.test.tsx. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../__snapshots__/guide_cards.test.tsx.snap | 2989 ----------------- .../landing_page/guide/guide_cards.test.tsx | 57 - packages/kbn-guided-onboarding/tsconfig.json | 2 - 3 files changed, 3048 deletions(-) delete mode 100644 packages/kbn-guided-onboarding/src/components/landing_page/guide/__snapshots__/guide_cards.test.tsx.snap delete mode 100644 packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_cards.test.tsx diff --git a/packages/kbn-guided-onboarding/src/components/landing_page/guide/__snapshots__/guide_cards.test.tsx.snap b/packages/kbn-guided-onboarding/src/components/landing_page/guide/__snapshots__/guide_cards.test.tsx.snap deleted file mode 100644 index 9f1d86ef25477..0000000000000 --- a/packages/kbn-guided-onboarding/src/components/landing_page/guide/__snapshots__/guide_cards.test.tsx.snap +++ /dev/null @@ -1,2989 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`guide cards snapshots should render observability cards 1`] = ` - - -

- - - - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "1a2wnuz-euiFlexGroup-responsive-wrap-l-center-center-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;flex-wrap:wrap;label:wrap;;;gap:24px;;label:l;;;justify-content:center;label:center;;;align-items:center;label:center;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } - /> -
-
- - -`; - -exports[`guide cards snapshots should render search cards 1`] = ` - - -
- - - - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "1a2wnuz-euiFlexGroup-responsive-wrap-l-center-center-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;flex-wrap:wrap;label:wrap;;;gap:24px;;label:l;;;justify-content:center;label:center;;;align-items:center;label:center;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } - /> -
-
- - -`; - -exports[`guide cards snapshots should render security cards 1`] = ` - - -
- - - - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "1a2wnuz-euiFlexGroup-responsive-wrap-l-center-center-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;flex-wrap:wrap;label:wrap;;;gap:24px;;label:l;;;justify-content:center;label:center;;;align-items:center;label:center;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } - /> -
-
- - -`; diff --git a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_cards.test.tsx b/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_cards.test.tsx deleted file mode 100644 index ea0a18c89617d..0000000000000 --- a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_cards.test.tsx +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import React from 'react'; -import { mount } from 'enzyme'; - -import { GuideCards, GuideCardsProps } from './guide_cards'; -import { cloudMock } from '@kbn/cloud-plugin/public/mocks'; -import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; -import { I18nStart } from '@kbn/core-i18n-browser'; -import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; -import { docLinksServiceMock } from '@kbn/core-doc-links-browser-mocks'; -import { GuideCardSolutions } from '../classic_version/guide_cards'; - -const defaultProps: Omit = { - activateGuide: jest.fn(), - navigateToApp: jest.fn(), - guidesState: [], - openModal: jest.fn(), - theme: themeServiceMock.createStartContract(), - i18nStart: {} as unknown as I18nStart, - cloud: cloudMock.createSetup(), - docLinks: docLinksServiceMock.createStartContract(), - navigateToUrl: jest.fn(), - url: sharePluginMock.createSetupContract().url, -}; - -// FLAKY: https://github.com/elastic/kibana/issues/172595 -// FLAKY: https://github.com/elastic/kibana/issues/172596 -// FLAKY: https://github.com/elastic/kibana/issues/172597 -describe.skip('guide cards', () => { - describe('snapshots', () => { - test('should render search cards', async () => { - const component = mount( - - ); - expect(component).toMatchSnapshot(); - }); - test('should render security cards', async () => { - const component = mount( - - ); - expect(component).toMatchSnapshot(); - }); - test('should render observability cards', async () => { - const component = mount( - - ); - expect(component).toMatchSnapshot(); - }); - }); -}); diff --git a/packages/kbn-guided-onboarding/tsconfig.json b/packages/kbn-guided-onboarding/tsconfig.json index 1bfd6c2454fcb..050ae7d99e95c 100644 --- a/packages/kbn-guided-onboarding/tsconfig.json +++ b/packages/kbn-guided-onboarding/tsconfig.json @@ -23,9 +23,7 @@ "@kbn/share-plugin", "@kbn/cloud-plugin", "@kbn/core-lifecycle-browser", - "@kbn/core-theme-browser-mocks", "@kbn/analytics", - "@kbn/core-doc-links-browser-mocks", "@kbn/core-mount-utils-browser" ], "exclude": [ From bc153bc65acd4f0814ada0c701380f162373fd14 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Mon, 11 Dec 2023 21:58:33 +0100 Subject: [PATCH 16/39] [Cases] Assignees Table Filter Does Not Reset Selected Options (#173021) Co-authored-by: Christos Nasikas --- x-pack/plugins/cases/common/ui/types.ts | 2 +- .../all_cases/all_cases_list.test.tsx | 41 +++++++ .../all_cases/assignees_filter.test.tsx | 116 +++++++----------- .../components/all_cases/assignees_filter.tsx | 26 +++- .../use_filter_config.test.tsx | 2 +- .../use_system_filter_config.tsx | 15 +-- .../all_cases/table_filters.test.tsx | 53 +++++++- .../components/all_cases/table_filters.tsx | 18 +-- .../cases/public/containers/api.test.tsx | 4 +- .../cases/public/containers/utils.test.ts | 4 - .../plugins/cases/public/containers/utils.ts | 9 +- 11 files changed, 171 insertions(+), 119 deletions(-) diff --git a/x-pack/plugins/cases/common/ui/types.ts b/x-pack/plugins/cases/common/ui/types.ts index b4019861c06fa..2ab04f058179d 100644 --- a/x-pack/plugins/cases/common/ui/types.ts +++ b/x-pack/plugins/cases/common/ui/types.ts @@ -156,7 +156,7 @@ export interface SystemFilterOptions { severity: CaseSeverity[]; status: CaseStatuses[]; tags: string[]; - assignees: Array | null; + assignees: Array; reporters: User[]; owner: string[]; category: string[]; diff --git a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx index 6a425b9a803a7..2971da7a1041a 100644 --- a/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/all_cases_list.test.tsx @@ -47,6 +47,7 @@ import { useLicense } from '../../common/use_license'; import * as api from '../../containers/api'; import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; import { useCaseConfigureResponse } from '../configure_cases/__mock__'; +import { useSuggestUserProfiles } from '../../containers/user_profiles/use_suggest_user_profiles'; jest.mock('../../containers/configure/use_get_case_configuration'); jest.mock('../../containers/use_get_cases'); @@ -63,6 +64,7 @@ jest.mock('../app/use_available_owners', () => ({ })); jest.mock('../../containers/use_update_case'); jest.mock('../../common/use_license'); +jest.mock('../../containers/user_profiles/use_suggest_user_profiles'); const useGetCaseConfigurationMock = useGetCaseConfiguration as jest.Mock; const useGetCasesMock = useGetCases as jest.Mock; @@ -74,6 +76,7 @@ const useGetConnectorsMock = useGetSupportedActionConnectors as jest.Mock; const useUpdateCaseMock = useUpdateCase as jest.Mock; const useLicenseMock = useLicense as jest.Mock; const useGetCategoriesMock = useGetCategories as jest.Mock; +const useSuggestUserProfilesMock = useSuggestUserProfiles as jest.Mock; const mockTriggersActionsUiService = triggersActionsUiMock.createStart(); @@ -164,6 +167,7 @@ describe('AllCasesListGeneric', () => { useBulkGetUserProfilesMock.mockReturnValue({ data: userProfilesMap }); useUpdateCaseMock.mockReturnValue({ mutate: updateCaseProperty }); useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => false }); + useSuggestUserProfilesMock.mockReturnValue({ data: userProfiles, isLoading: false }); mockKibana(); moment.tz.setDefault('UTC'); window.localStorage.clear(); @@ -1078,6 +1082,43 @@ describe('AllCasesListGeneric', () => { ).toBeGreaterThan(0); }); }); + + it('should reset the assignees when deactivating the filter', async () => { + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); + + appMockRenderer.render(); + + // Opens assignees filter and checks an option + const assigneesButton = screen.getByTestId('options-filter-popover-button-assignees'); + userEvent.click(assigneesButton); + userEvent.click(screen.getByText('Damaged Raccoon')); + expect(within(assigneesButton).getByLabelText('1 active filters')).toBeInTheDocument(); + + // Deactivates assignees filter + userEvent.click(screen.getByRole('button', { name: 'More' })); + await waitForEuiPopoverOpen(); + userEvent.click(screen.getByRole('option', { name: 'Assignees' })); + + expect(useGetCasesMock).toHaveBeenLastCalledWith({ + filterOptions: { + ...DEFAULT_FILTER_OPTIONS, + owner: [SECURITY_SOLUTION_OWNER], + assignees: [], + }, + queryParams: DEFAULT_QUERY_PARAMS, + }); + + // Reopens assignees filter + userEvent.click(screen.getByRole('option', { name: 'Assignees' })); + // Opens the assignees popup + userEvent.click(assigneesButton); + expect(screen.getByLabelText('click to filter assignees')).toBeInTheDocument(); + expect( + within(screen.getByTestId('options-filter-popover-button-assignees')).queryByLabelText( + '1 active filters' + ) + ).not.toBeInTheDocument(); + }); }); }); diff --git a/x-pack/plugins/cases/public/components/all_cases/assignees_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/assignees_filter.test.tsx index 258f30b64eca8..90e204fe8ccfb 100644 --- a/x-pack/plugins/cases/public/components/all_cases/assignees_filter.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/assignees_filter.test.tsx @@ -51,19 +51,13 @@ describe('AssigneesFilterPopover', () => { userEvent.click(screen.getByText('WD')); expect(onSelectionChange.mock.calls[0][0]).toMatchInlineSnapshot(` - Array [ - Object { - "data": Object {}, - "enabled": true, - "uid": "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", - "user": Object { - "email": "wet_dingo@elastic.co", - "full_name": "Wet Dingo", - "username": "wet_dingo", - }, - }, - ] - `); + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", + ], + } + `); }); it('calls onSelectionChange with a single user when different users are selected', async () => { @@ -83,32 +77,20 @@ describe('AssigneesFilterPopover', () => { userEvent.click(screen.getByText('damaged_raccoon@elastic.co')); expect(onSelectionChange.mock.calls[0][0]).toMatchInlineSnapshot(` - Array [ - Object { - "data": Object {}, - "enabled": true, - "uid": "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", - "user": Object { - "email": "wet_dingo@elastic.co", - "full_name": "Wet Dingo", - "username": "wet_dingo", - }, - }, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", + ], + } `); expect(onSelectionChange.mock.calls[1][0]).toMatchInlineSnapshot(` - Array [ - Object { - "data": Object {}, - "enabled": true, - "uid": "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", - "user": Object { - "email": "damaged_raccoon@elastic.co", - "full_name": "Damaged Raccoon", - "username": "damaged_raccoon", - }, - }, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", + ], + } `); }); @@ -128,7 +110,7 @@ describe('AssigneesFilterPopover', () => { it('shows the 1 assigned total when the users are passed in', async () => { const props = { ...defaultProps, - selectedAssignees: [userProfiles[0]], + selectedAssignees: [userProfiles[0].uid], }; appMockRender.render(); @@ -145,7 +127,7 @@ describe('AssigneesFilterPopover', () => { it('shows the total when the multiple users are selected', async () => { const props = { ...defaultProps, - selectedAssignees: [userProfiles[0], userProfiles[1]], + selectedAssignees: [userProfiles[0].uid, userProfiles[1].uid], }; appMockRender.render(); @@ -239,9 +221,12 @@ describe('AssigneesFilterPopover', () => { userEvent.click(screen.getByText('No assignees')); expect(onSelectionChange.mock.calls[0][0]).toMatchInlineSnapshot(` - Array [ - null, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + null, + ], + } `); }); @@ -261,39 +246,30 @@ describe('AssigneesFilterPopover', () => { userEvent.click(screen.getByText('damaged_raccoon@elastic.co')); expect(onSelectionChange.mock.calls[0][0]).toMatchInlineSnapshot(` - Array [ - null, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + null, + ], + } `); expect(onSelectionChange.mock.calls[1][0]).toMatchInlineSnapshot(` - Array [ - Object { - "data": Object {}, - "enabled": true, - "uid": "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", - "user": Object { - "email": "wet_dingo@elastic.co", - "full_name": "Wet Dingo", - "username": "wet_dingo", - }, - }, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + "u_9xDEQqUqoYCnFnPPLq5mIRHKL8gBTo_NiKgOnd5gGk0_0", + ], + } `); expect(onSelectionChange.mock.calls[2][0]).toMatchInlineSnapshot(` - Array [ - Object { - "data": Object {}, - "enabled": true, - "uid": "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", - "user": Object { - "email": "damaged_raccoon@elastic.co", - "full_name": "Damaged Raccoon", - "username": "damaged_raccoon", - }, - }, - ] + Object { + "filterId": "assignees", + "selectedOptionKeys": Array [ + "u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0", + ], + } `); }); @@ -313,7 +289,7 @@ describe('AssigneesFilterPopover', () => { }); it('shows warning message when reaching maximum limit to filter', async () => { - const maxAssignees = Array(MAX_ASSIGNEES_FILTER_LENGTH).fill(userProfiles[0]); + const maxAssignees = Array(MAX_ASSIGNEES_FILTER_LENGTH).fill(userProfiles[0].uid); const props = { ...defaultProps, selectedAssignees: maxAssignees, diff --git a/x-pack/plugins/cases/public/components/all_cases/assignees_filter.tsx b/x-pack/plugins/cases/public/components/all_cases/assignees_filter.tsx index 7e556ee46eeab..3a2e03e827665 100644 --- a/x-pack/plugins/cases/public/components/all_cases/assignees_filter.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/assignees_filter.tsx @@ -6,6 +6,7 @@ */ import { EuiFilterButton, EuiFilterGroup } from '@elastic/eui'; +import type { UserProfileWithAvatar } from '@kbn/user-profile-components'; import { UserProfilesPopover } from '@kbn/user-profile-components'; import { isEmpty } from 'lodash'; import React, { useCallback, useMemo, useState } from 'react'; @@ -24,14 +25,17 @@ import { MAX_ASSIGNEES_FILTER_LENGTH } from '../../../common/constants'; export const NO_ASSIGNEES_VALUE = null; export interface AssigneesFilterPopoverProps { - selectedAssignees: AssigneesFilteringSelection[]; + selectedAssignees: Array; currentUserProfile: CurrentUserProfile; isLoading: boolean; - onSelectionChange: (users: AssigneesFilteringSelection[]) => void; + onSelectionChange: (params: { + filterId: string; + selectedOptionKeys: Array; + }) => void; } const AssigneesFilterPopoverComponent: React.FC = ({ - selectedAssignees, + selectedAssignees: selectedAssigneesUids, currentUserProfile, isLoading, onSelectionChange, @@ -48,8 +52,10 @@ const AssigneesFilterPopoverComponent: React.FC = ( const onChange = useCallback( (users: AssigneesFilteringSelection[]) => { const sortedUsers = orderAssigneesIncludingNone(currentUserProfile, users); - - onSelectionChange(sortedUsers); + onSelectionChange({ + filterId: 'assignees', + selectedOptionKeys: sortedUsers.map((user) => user?.uid ?? null), + }); }, [currentUserProfile, onSelectionChange] ); @@ -88,6 +94,16 @@ const AssigneesFilterPopoverComponent: React.FC = ( return sortedUsers; }, [currentUserProfile, userProfiles, searchTerm]); + const selectedAssignees = selectedAssigneesUids + .map((uuid) => { + // this is the "no assignees" option + if (uuid === null) return null; + const userProfile = searchResultProfiles.find((user) => user?.uid === uuid); + return userProfile; + }) + .filter( + (userProfile): userProfile is UserProfileWithAvatar | null => userProfile !== undefined + ); // Filter out profiles that no longer exists const isLoadingData = isLoading || isLoadingSuggest; return ( diff --git a/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_filter_config.test.tsx b/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_filter_config.test.tsx index 483080ffd5ea6..62dd688cae29a 100644 --- a/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_filter_config.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_filter_config.test.tsx @@ -27,7 +27,7 @@ const emptyFilterOptions: FilterOptions = { severity: [], status: [], tags: [], - assignees: null, + assignees: [], reporters: [], owner: [], category: [], diff --git a/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_system_filter_config.tsx b/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_system_filter_config.tsx index aeedce3ff819f..0b522f6b066c8 100644 --- a/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_system_filter_config.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/table_filter_config/use_system_filter_config.tsx @@ -17,7 +17,6 @@ import * as i18n from '../translations'; import { SeverityFilter } from '../severity_filter'; import { AssigneesFilterPopover } from '../assignees_filter'; import type { CurrentUserProfile } from '../../types'; -import type { AssigneesFilteringSelection } from '../../user_profiles/types'; import type { FilterChangeHandler, FilterConfig, FilterConfigRenderParams } from './types'; interface UseFilterConfigProps { @@ -28,13 +27,11 @@ interface UseFilterConfigProps { countInProgressCases: number | null; countOpenCases: number | null; currentUserProfile: CurrentUserProfile; - handleSelectedAssignees: (newAssignees: AssigneesFilteringSelection[]) => void; hiddenStatuses?: CaseStatuses[]; initialFilterOptions: Partial; isLoading: boolean; isSelectorView?: boolean; onFilterOptionsChange: FilterChangeHandler; - selectedAssignees: AssigneesFilteringSelection[]; tags: string[]; } @@ -46,13 +43,11 @@ export const getSystemFilterConfig = ({ countInProgressCases, countOpenCases, currentUserProfile, - handleSelectedAssignees, hiddenStatuses, initialFilterOptions, isLoading, isSelectorView, onFilterOptionsChange, - selectedAssignees, tags, }: UseFilterConfigProps): FilterConfig[] => { const onSystemFilterChange = ({ @@ -60,7 +55,7 @@ export const getSystemFilterConfig = ({ selectedOptionKeys, }: { filterId: string; - selectedOptionKeys: string[]; + selectedOptionKeys: Array; }) => { onFilterOptionsChange({ [filterId]: selectedOptionKeys, @@ -118,10 +113,10 @@ export const getSystemFilterConfig = ({ render: ({ filterOptions }: FilterConfigRenderParams) => { return ( ); }, @@ -199,13 +194,11 @@ export const useSystemFilterConfig = ({ countInProgressCases, countOpenCases, currentUserProfile, - handleSelectedAssignees, hiddenStatuses, initialFilterOptions, isLoading, isSelectorView, onFilterOptionsChange, - selectedAssignees, tags, }: UseFilterConfigProps) => { const filterConfig = getSystemFilterConfig({ @@ -216,13 +209,11 @@ export const useSystemFilterConfig = ({ countInProgressCases, countOpenCases, currentUserProfile, - handleSelectedAssignees, hiddenStatuses, initialFilterOptions, isLoading, isSelectorView, onFilterOptionsChange, - selectedAssignees, tags, }); diff --git a/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx b/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx index ad8c63350e3ab..f4b93724ed4b9 100644 --- a/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx @@ -165,6 +165,18 @@ describe('CasesTableFilters ', () => { "assignees": Array [ "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0", ], + "category": Array [], + "customFields": Object {}, + "owner": Array [], + "reporters": Array [], + "search": "", + "searchFields": Array [ + "title", + "description", + ], + "severity": Array [], + "status": Array [], + "tags": Array [], } `); }); @@ -206,12 +218,11 @@ describe('CasesTableFilters ', () => { it('should remove assignee from selected assignees when assignee no longer exists', async () => { const overrideProps = { ...props, - initial: { + filterOptions: { ...DEFAULT_FILTER_OPTIONS, assignees: [ // invalid profile uid '123', - 'u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0', ], }, }; @@ -233,6 +244,18 @@ describe('CasesTableFilters ', () => { "assignees": Array [ "u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0", ], + "category": Array [], + "customFields": Object {}, + "owner": Array [], + "reporters": Array [], + "search": "", + "searchFields": Array [ + "title", + "description", + ], + "severity": Array [], + "status": Array [], + "tags": Array [], } `); }); @@ -305,6 +328,32 @@ describe('CasesTableFilters ', () => { expect(screen.getByTestId('options-filter-popover-button-assignees')).toBeInTheDocument(); }); + + it('shuld reset the assignees when deactivating the filter', async () => { + const overrideProps = { + ...props, + filterOptions: { + ...DEFAULT_FILTER_OPTIONS, + assignees: ['u_A_tM4n0wPkdiQ9smmd8o0Hr_h61XQfu8aRPh9GMoRoc_0'], + }, + }; + const license = licensingMock.createLicense({ + license: { type: 'platinum' }, + }); + + appMockRender = createAppMockRenderer({ license }); + appMockRender.render(); + + // deactivate the assignees filter + userEvent.click(screen.getByRole('button', { name: 'More' })); + await waitForEuiPopoverOpen(); + userEvent.click(screen.getByRole('option', { name: 'Assignees' })); + + expect(onFilterChanged).toHaveBeenCalledWith({ + ...DEFAULT_FILTER_OPTIONS, + assignees: [], + }); + }); }); describe('create case button', () => { diff --git a/x-pack/plugins/cases/public/components/all_cases/table_filters.tsx b/x-pack/plugins/cases/public/components/all_cases/table_filters.tsx index 8672671bd8ab6..e9e4350b6619f 100644 --- a/x-pack/plugins/cases/public/components/all_cases/table_filters.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/table_filters.tsx @@ -16,11 +16,10 @@ import { useGetTags } from '../../containers/use_get_tags'; import { useGetCategories } from '../../containers/use_get_categories'; import type { CurrentUserProfile } from '../types'; import { useCasesFeatures } from '../../common/use_cases_features'; -import type { AssigneesFilteringSelection } from '../user_profiles/types'; import { useSystemFilterConfig } from './table_filter_config/use_system_filter_config'; import { useFilterConfig } from './table_filter_config/use_filter_config'; -interface CasesTableFiltersProps { +export interface CasesTableFiltersProps { countClosedCases: number | null; countInProgressCases: number | null; countOpenCases: number | null; @@ -56,23 +55,10 @@ const CasesTableFiltersComponent = ({ filterOptions, }: CasesTableFiltersProps) => { const [search, setSearch] = useState(filterOptions.search); - const [selectedAssignees, setSelectedAssignees] = useState([]); const { data: tags = [] } = useGetTags(); const { data: categories = [] } = useGetCategories(); const { caseAssignmentAuthorized } = useCasesFeatures(); - const handleSelectedAssignees = useCallback( - (newAssignees: AssigneesFilteringSelection[]) => { - if (!isEqual(newAssignees, selectedAssignees)) { - setSelectedAssignees(newAssignees); - onFilterChanged({ - assignees: newAssignees.map((assignee) => assignee?.uid ?? null), - }); - } - }, - [selectedAssignees, onFilterChanged] - ); - const onFilterOptionsChange = useCallback( (partialFilterOptions: Partial) => { const newFilterOptions = mergeWith({}, filterOptions, partialFilterOptions, mergeCustomizer); @@ -91,13 +77,11 @@ const CasesTableFiltersComponent = ({ countInProgressCases, countOpenCases, currentUserProfile, - handleSelectedAssignees, hiddenStatuses, initialFilterOptions, isLoading, isSelectorView, onFilterOptionsChange, - selectedAssignees, tags, }); diff --git a/x-pack/plugins/cases/public/containers/api.test.tsx b/x-pack/plugins/cases/public/containers/api.test.tsx index 6f42c31186dc7..5b00fabbbbf50 100644 --- a/x-pack/plugins/cases/public/containers/api.test.tsx +++ b/x-pack/plugins/cases/public/containers/api.test.tsx @@ -364,7 +364,7 @@ describe('Cases API', () => { await getCases({ filterOptions: { ...DEFAULT_FILTER_OPTIONS, - assignees: null, + assignees: [], }, queryParams: DEFAULT_QUERY_PARAMS, signal: abortCtrl.signal, @@ -373,7 +373,7 @@ describe('Cases API', () => { expect(fetchMock).toHaveBeenCalledWith(`${CASES_INTERNAL_URL}/_search`, { method: 'POST', body: JSON.stringify({ - assignees: 'none', + assignees: undefined, searchFields: DEFAULT_FILTER_OPTIONS.searchFields, ...DEFAULT_QUERY_PARAMS, }), diff --git a/x-pack/plugins/cases/public/containers/utils.test.ts b/x-pack/plugins/cases/public/containers/utils.test.ts index 16dd6f25f3d2f..bb784686df6f1 100644 --- a/x-pack/plugins/cases/public/containers/utils.test.ts +++ b/x-pack/plugins/cases/public/containers/utils.test.ts @@ -160,10 +160,6 @@ describe('utils', () => { expect(constructAssigneesFilter([])).toEqual({}); }); - it('returns none if the assignees are null', () => { - expect(constructAssigneesFilter(null)).toEqual({ assignees: 'none' }); - }); - it('returns none for null values in the assignees array', () => { expect(constructAssigneesFilter([null, '123'])).toEqual({ assignees: ['none', '123'] }); }); diff --git a/x-pack/plugins/cases/public/containers/utils.ts b/x-pack/plugins/cases/public/containers/utils.ts index 50f8524dbe78e..a00e2e3b738a0 100644 --- a/x-pack/plugins/cases/public/containers/utils.ts +++ b/x-pack/plugins/cases/public/containers/utils.ts @@ -148,12 +148,11 @@ export const createUpdateSuccessToaster = ( export const constructAssigneesFilter = ( assignees: FilterOptions['assignees'] ): { assignees?: string | string[] } => - assignees === null || assignees.length > 0 + assignees.length > 0 ? { - assignees: - assignees?.map((assignee) => - assignee === null ? NO_ASSIGNEES_FILTERING_KEYWORD : assignee - ) ?? NO_ASSIGNEES_FILTERING_KEYWORD, + assignees: assignees?.map((assignee) => + assignee === null ? NO_ASSIGNEES_FILTERING_KEYWORD : assignee + ) ?? [NO_ASSIGNEES_FILTERING_KEYWORD], } : {}; From cd0648c89534a6e40ef02a19241f12f82ff1edbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Mon, 11 Dec 2023 22:03:40 +0100 Subject: [PATCH 17/39] [APM] Unskip apm api test suite (#173055) APM api test suite was accidentally skipped in https://github.com/elastic/kibana/issues/172772. This unskips the suite and instead skips just the flaky tests Blocking: https://github.com/elastic/kibana/pull/173038 --- .../agent_configuration/get_agent_config_etag_metrics.ts | 2 +- .../tests/error_rate/service_maps.spec.ts | 3 ++- x-pack/test/apm_api_integration/tests/index.ts | 6 ++++-- .../apm_api_integration/tests/inspect/inspect.spec.ts | 8 +++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_agent_config_etag_metrics.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_agent_config_etag_metrics.ts index ac16f82d66f6b..fccf26f591ce3 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_agent_config_etag_metrics.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_agent_config_etag_metrics.ts @@ -46,7 +46,7 @@ export async function getAgentConfigEtagMetrics( }; const response = await apmEventClient.search( - 'get_config_applied_to_agent_through_fleet', + 'get_agent_config_etag_metrics', params ); diff --git a/x-pack/test/apm_api_integration/tests/error_rate/service_maps.spec.ts b/x-pack/test/apm_api_integration/tests/error_rate/service_maps.spec.ts index 4207d9ea5c4a4..af07dd52adf03 100644 --- a/x-pack/test/apm_api_integration/tests/error_rate/service_maps.spec.ts +++ b/x-pack/test/apm_api_integration/tests/error_rate/service_maps.spec.ts @@ -140,7 +140,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { after(() => synthtraceEsClient.clean()); - describe('compare latency value between service inventory and service maps', () => { + // FLAKY: https://github.com/elastic/kibana/issues/172772 + describe.skip('compare latency value between service inventory and service maps', () => { before(async () => { [errorTransactionValues, errorRateMetricValues] = await Promise.all([ getErrorRateValues('transaction'), diff --git a/x-pack/test/apm_api_integration/tests/index.ts b/x-pack/test/apm_api_integration/tests/index.ts index 10913f7bdac22..c8eec324f4bd7 100644 --- a/x-pack/test/apm_api_integration/tests/index.ts +++ b/x-pack/test/apm_api_integration/tests/index.ts @@ -26,8 +26,10 @@ function getGlobPattern() { export default function apmApiIntegrationTests({ getService, loadTestFile }: FtrProviderContext) { const registry = getService('registry'); - // FLAKY: https://github.com/elastic/kibana/issues/172772 - describe.skip('APM API tests', function () { + // DO NOT SKIP + // Skipping here will skip the entire apm api test suite + // Instead skip (flaky) tests individually + describe('APM API tests', function () { const filePattern = getGlobPattern(); const tests = globby.sync(filePattern, { cwd }); diff --git a/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts b/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts index c4e10fb877817..155fbf2d959e4 100644 --- a/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts +++ b/x-pack/test/apm_api_integration/tests/inspect/inspect.spec.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../common/ftr_provider_context'; import archives_metadata from '../../common/fixtures/es_archiver/archives_metadata'; -export default function customLinksTests({ getService }: FtrProviderContext) { +export default function inspectFlagTests({ getService }: FtrProviderContext) { const registry = getService('registry'); const apmApiClient = getService('apmApiClient'); @@ -64,7 +64,7 @@ export default function customLinksTests({ getService }: FtrProviderContext) { }); }); - describe('elasticsearch calls made with internal user are not return', () => { + describe('elasticsearch calls made with internal user should not leak internal queries', () => { it('for custom links', async () => { const { status, body } = await apmApiClient.readUser({ endpoint: 'GET /internal/apm/settings/custom_links', @@ -92,7 +92,9 @@ export default function customLinksTests({ getService }: FtrProviderContext) { }); expect(status).to.be(200); - expect(body._inspect).to.eql([]); + expect(body._inspect?.map((res) => res.stats?.indexPattern.value)).to.eql([ + ['metrics-apm*', 'apm-*'], + ]); }); }); }); From 61b413ea05734b94c82cd07cef048f281deda3bd Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Mon, 11 Dec 2023 16:16:34 -0500 Subject: [PATCH 18/39] [Fleet] Fix output backfill for preconfigured outputs (#173088) ## Summary Closes #173081 Fixes output backfill for existing preconfigured outputs. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Nicolas Chaulet --- .../common/services/output_helpers.test.ts | 16 +++++ .../fleet/common/services/output_helpers.ts | 5 +- .../fleet/server/services/output.test.ts | 62 +++++++++++++++++++ .../plugins/fleet/server/services/output.ts | 8 ++- 4 files changed, 89 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/common/services/output_helpers.test.ts b/x-pack/plugins/fleet/common/services/output_helpers.test.ts index 1c3db129fee2f..cba42f1b6c233 100644 --- a/x-pack/plugins/fleet/common/services/output_helpers.test.ts +++ b/x-pack/plugins/fleet/common/services/output_helpers.test.ts @@ -101,4 +101,20 @@ describe('outputYmlIncludesReservedPerformanceKey', () => { expect(outputYmlIncludesReservedPerformanceKey(configYml, safeLoad)).toBe(false); }); }); + + describe('comment', () => { + it('returns false when reserved key is present only in a comment', () => { + const configYml = `true`; + + expect(outputYmlIncludesReservedPerformanceKey(configYml, safeLoad)).toBe(false); + }); + }); + + describe('empty string', () => { + it('returns false when YML is empty', () => { + const configYml = ``; + + expect(outputYmlIncludesReservedPerformanceKey(configYml, safeLoad)).toBe(false); + }); + }); }); diff --git a/x-pack/plugins/fleet/common/services/output_helpers.ts b/x-pack/plugins/fleet/common/services/output_helpers.ts index 0db73e4d83511..26d97f42c39b4 100644 --- a/x-pack/plugins/fleet/common/services/output_helpers.ts +++ b/x-pack/plugins/fleet/common/services/output_helpers.ts @@ -52,7 +52,10 @@ export function outputYmlIncludesReservedPerformanceKey( const parsedYml = safeLoad(configYml); if (!isObject(parsedYml)) { - return RESERVED_CONFIG_YML_KEYS.some((key) => parsedYml.includes(key)); + if (typeof parsedYml === 'string') { + return RESERVED_CONFIG_YML_KEYS.some((key) => parsedYml.includes(key)); + } + return false; } const flattenedYml = isObject(parsedYml) ? getFlattenedObject(parsedYml) : {}; diff --git a/x-pack/plugins/fleet/server/services/output.test.ts b/x-pack/plugins/fleet/server/services/output.test.ts index 6e7df5c7d4e50..c17cf9d3af210 100644 --- a/x-pack/plugins/fleet/server/services/output.test.ts +++ b/x-pack/plugins/fleet/server/services/output.test.ts @@ -1841,4 +1841,66 @@ describe('Output Service', () => { }); }); }); + + describe('backfillAllOutputPresets', () => { + it('should update non-preconfigured output', async () => { + const soClient = getMockedSoClient({}); + + soClient.find.mockResolvedValue({ + saved_objects: [ + { + ...mockOutputSO('non-preconfigured-output', { + is_preconfigured: false, + type: 'elasticsearch', + }), + score: 0, + }, + ], + total: 1, + per_page: 1, + page: 1, + }); + + soClient.get.mockResolvedValue({ + ...mockOutputSO('non-preconfigured-output', { + is_preconfigured: false, + type: 'elasticsearch', + }), + }); + + const promise = outputService.backfillAllOutputPresets(soClient, esClientMock); + + await expect(promise).resolves.not.toThrow(); + }); + + it('should update preconfigured output', async () => { + const soClient = getMockedSoClient({}); + + soClient.find.mockResolvedValue({ + saved_objects: [ + { + ...mockOutputSO('preconfigured-output', { + is_preconfigured: true, + type: 'elasticsearch', + }), + score: 0, + }, + ], + total: 1, + per_page: 1, + page: 1, + }); + + soClient.get.mockResolvedValue({ + ...mockOutputSO('preconfigured-output', { + is_preconfigured: true, + type: 'elasticsearch', + }), + }); + + const promise = outputService.backfillAllOutputPresets(soClient, esClientMock); + + await expect(promise).resolves.not.toThrow(); + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/output.ts b/x-pack/plugins/fleet/server/services/output.ts index 32784a94f6729..f2d17b0187274 100644 --- a/x-pack/plugins/fleet/server/services/output.ts +++ b/x-pack/plugins/fleet/server/services/output.ts @@ -1023,7 +1023,13 @@ class OutputService { async (output) => { const preset = getDefaultPresetForEsOutput(output.config_yaml ?? '', safeLoad); - await outputService.update(soClient, esClient, output.id, { preset }); + await outputService.update( + soClient, + esClient, + output.id, + { preset }, + { fromPreconfiguration: true } + ); await agentPolicyService.bumpAllAgentPoliciesForOutput(soClient, esClient, output.id); }, { From a1e0236e122a381189e9016d0c031de3c50351de Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 12 Dec 2023 00:42:38 +0000 Subject: [PATCH 19/39] skip flaky suite (#172941) --- .../functional_with_es_ssl/apps/triggers_actions_ui/details.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts index 2d5c8a1815214..e2c9c8f70dda0 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts @@ -315,7 +315,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - describe('Edit rule button', function () { + // FLAKY: https://github.com/elastic/kibana/issues/172941 + describe.skip('Edit rule button', function () { const ruleName = uuidv4(); const updatedRuleName = `Changed Rule Name ${ruleName}`; From 8a94baca5d1584a3abc99fb3ab02c86988b27c61 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 12 Dec 2023 00:44:01 +0000 Subject: [PATCH 20/39] skip flaky suite (#172611) --- .../detection_alerts/assignments/assignments.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts index 42ca93f26587b..5b7749fee9733 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts @@ -42,7 +42,8 @@ import { } from '../../../../../tasks/alert_assignments'; import { ALERTS_COUNT } from '../../../../../screens/alerts'; -describe('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { +// FLAKY: https://github.com/elastic/kibana/issues/172611 +describe.skip('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); From 53c97fb562f3f6648464a2948881984e080e0e02 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 12 Dec 2023 00:45:44 +0000 Subject: [PATCH 21/39] skip flaky suite (#172623) --- .../detection_alerts/assignments/assignments.cy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts index 5b7749fee9733..18933bbcde2a7 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts @@ -43,6 +43,7 @@ import { import { ALERTS_COUNT } from '../../../../../screens/alerts'; // FLAKY: https://github.com/elastic/kibana/issues/172611 +// FLAKY: https://github.com/elastic/kibana/issues/172623 describe.skip('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); From 1b0b024a04209760fc0774a9bc6736891159a8ef Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 12 Dec 2023 00:47:07 +0000 Subject: [PATCH 22/39] skip flaky suite (#173008) --- .../functional_with_es_ssl/apps/triggers_actions_ui/details.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts index e2c9c8f70dda0..c7dc220e96723 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts @@ -316,6 +316,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); // FLAKY: https://github.com/elastic/kibana/issues/172941 + // FLAKY: https://github.com/elastic/kibana/issues/173008 describe.skip('Edit rule button', function () { const ruleName = uuidv4(); const updatedRuleName = `Changed Rule Name ${ruleName}`; From e6e10b5e3af6d5f5954b717ee57c6e5800a1786a Mon Sep 17 00:00:00 2001 From: Maurizio Branca Date: Tue, 12 Dec 2023 05:17:01 +0100 Subject: [PATCH 23/39] Fleet: add support for subobjects: false (#171826) ## Summary Update the Fleet plugin to support the [subobjects](https://www.elastic.co/guide/en/elasticsearch/reference/current/subobjects.html) setting on the `object` type mapping. This PR supports the `subobjects` setting on a per-field basis. We will add support for `subobjects` setting at the data stream level when Elasticsearch will automatically flatten the mappings in elastic/elasticsearch#99860. The PR add deals with the following [user cases](https://github.com/elastic/package-spec/issues/349#issuecomment-1820439710) found in the integration packages and add support for a few of them. ### ~~Case A~~ ```yaml - name: a.labels type: object subobjects: false ``` The use case A is invalid on package-spec v3 and it's not supported. ### Case B ```yaml - name: b.labels.* type: object object_type: keyword subobjects: false ``` that `_generateMappings()` should map to: ```js { dynamic_templates: [{ "b.labels.*": { path_match: "b.labels.*", match_mapping_type: "string", mapping: { type: "keyword" } } }], properties: { b: { type: 'object', dynamic: true, properties: { labels: { dynamic: true, type: 'object', subobjects: false, } } }, }, } ``` ### ~~Case C~~ ```yaml - name: prometheus.c.labels.* type: object subobjects: false ``` The use case C is considered invalid and it's not supported. ### Case D ```yaml - name: d.labels type: object object_type: keyword subobjects: false ``` that `_generateMappings()` should map to: ```js { dynamic_templates: [{ "d.labels": { path_match: "d.labels.*", match_mapping_type: "string", mapping: { type: "keyword" } } }], properties: { d: { type: 'object', dynamic: true, properties: { labels: { dynamic: true, type: 'object', subobjects: false, } } }, }, } ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../plugins/fleet/common/types/models/epm.ts | 1 + .../elasticsearch/template/template.test.ts | 78 +++++++++++++++++++ .../epm/elasticsearch/template/template.ts | 28 ++++++- .../fleet/server/services/epm/fields/field.ts | 1 + 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts index 826f608b65864..1a7c4cefca34d 100644 --- a/x-pack/plugins/fleet/common/types/models/epm.ts +++ b/x-pack/plugins/fleet/common/types/models/epm.ts @@ -618,6 +618,7 @@ export interface IndexTemplateMappings { properties: any; dynamic_templates?: any; runtime?: any; + subobjects?: boolean; } // This is an index template v2, see https://github.com/elastic/elasticsearch/issues/53101 diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts index a621df33062a8..670ba36ed6a8d 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts @@ -755,6 +755,84 @@ describe('EPM template', () => { expect(mappings).toEqual(objectFieldWithPropertyReversedMapping); }); + it('tests processing object field with subobjects set to false (case B)', () => { + const objectFieldWithPropertyReversedLiteralYml = ` +- name: b.labels.* + type: object + object_type: keyword + subobjects: false + `; + const objectFieldWithPropertyReversedMapping = { + dynamic_templates: [ + { + 'b.labels.*': { + path_match: 'b.labels.*', + match_mapping_type: 'string', + mapping: { + type: 'keyword', + }, + }, + }, + ], + properties: { + b: { + type: 'object', + dynamic: true, + properties: { + labels: { + dynamic: true, + type: 'object', + subobjects: false, + }, + }, + }, + }, + }; + const fields: Field[] = safeLoad(objectFieldWithPropertyReversedLiteralYml); + const processedFields = processFields(fields); + const mappings = generateMappings(processedFields); + expect(mappings).toEqual(objectFieldWithPropertyReversedMapping); + }); + + it('tests processing object field with subobjects set to false (case D)', () => { + const objectFieldWithPropertyReversedLiteralYml = ` +- name: d.labels + type: object + object_type: keyword + subobjects: false + `; + const objectFieldWithPropertyReversedMapping = { + dynamic_templates: [ + { + 'd.labels': { + path_match: 'd.labels.*', + match_mapping_type: 'string', + mapping: { + type: 'keyword', + }, + }, + }, + ], + properties: { + d: { + type: 'object', + dynamic: true, + properties: { + labels: { + dynamic: true, + type: 'object', + subobjects: false, + }, + }, + }, + }, + }; + const fields: Field[] = safeLoad(objectFieldWithPropertyReversedLiteralYml); + const processedFields = processFields(fields); + const mappings = generateMappings(processedFields); + expect(mappings).toEqual(objectFieldWithPropertyReversedMapping); + }); + it('tests processing nested field with property', () => { const nestedYaml = ` - name: a.b diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts index a26aa2c8e0114..a60e9dc0c7ced 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts @@ -222,9 +222,11 @@ function _generateMappings( properties: IndexTemplateMappings['properties']; hasNonDynamicTemplateMappings: boolean; hasDynamicTemplateMappings: boolean; + subobjects?: boolean; } { let hasNonDynamicTemplateMappings = false; let hasDynamicTemplateMappings = false; + let subobjects: boolean | undefined; const props: Properties = {}; function addParentObjectAsStaticProperty(field: Field) { @@ -237,6 +239,7 @@ function _generateMappings( const fieldProps = { type: 'object', dynamic: true, + ...(field.subobjects !== undefined && { subobjects: field.subobjects }), }; props[field.name] = fieldProps; @@ -435,6 +438,17 @@ function _generateMappings( ); } + // When a wildcard field specifies the subobjects setting, + // the parent intermediate object should set the subobjects + // setting. + // + // For example, if a wildcard field `foo.*` has subobjects, + // we should set subobjects on the intermediate object `foo`. + // + if (field.subobjects !== undefined && path.includes('*')) { + subobjects = field.subobjects; + } + if (dynProperties && matchingType) { addDynamicMappingWithIntermediateObjects(path, pathMatch, matchingType, dynProperties); @@ -476,6 +490,9 @@ function _generateMappings( } else { return; } + if (mappings.subobjects !== undefined) { + fieldProps.subobjects = mappings.subobjects; + } break; case 'group-nested': fieldProps = { @@ -583,6 +600,10 @@ function _generateMappings( fieldProps.time_series_dimension = field.dimension; } + if (field.subobjects !== undefined) { + fieldProps.subobjects = field.subobjects; + } + // Even if we don't add the property because it has a wildcard, notify // the parent that there is some kind of property, so the intermediate object // is still created. @@ -601,7 +622,12 @@ function _generateMappings( }); } - return { properties: props, hasNonDynamicTemplateMappings, hasDynamicTemplateMappings }; + return { + properties: props, + hasNonDynamicTemplateMappings, + hasDynamicTemplateMappings, + subobjects, + }; } function generateDynamicAndEnabled(field: Field) { diff --git a/x-pack/plugins/fleet/server/services/epm/fields/field.ts b/x-pack/plugins/fleet/server/services/epm/fields/field.ts index 437eed7c64192..495c0ddcaaf8a 100644 --- a/x-pack/plugins/fleet/server/services/epm/fields/field.ts +++ b/x-pack/plugins/fleet/server/services/epm/fields/field.ts @@ -40,6 +40,7 @@ export interface Field { dimension?: boolean; default_field?: boolean; runtime?: boolean | string; + subobjects?: boolean; // Fields specific of the aggregate_metric_double type metrics?: string[]; From 1cfe94c70d36745438ec35b9678d8bcf3b07a1d9 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 12 Dec 2023 04:59:14 +0000 Subject: [PATCH 24/39] skip flaky suite (#172663) --- .../detection_alerts/assignments/assignments.cy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts index 18933bbcde2a7..1d94d2a2870c7 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts @@ -44,6 +44,7 @@ import { ALERTS_COUNT } from '../../../../../screens/alerts'; // FLAKY: https://github.com/elastic/kibana/issues/172611 // FLAKY: https://github.com/elastic/kibana/issues/172623 +// FLAKY: https://github.com/elastic/kibana/issues/172663 describe.skip('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); From 778edc22e0cc2b8275d4aa1b0cf9233aa036b0e0 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 12 Dec 2023 01:14:09 -0500 Subject: [PATCH 25/39] [api-docs] 2023-12-12 Daily api_docs build (#173128) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/549 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_observability.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 4 + api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.devdocs.json | 8 - api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 431 +--- api_docs/data.mdx | 4 +- api_docs/data_query.mdx | 4 +- api_docs/data_search.devdocs.json | 607 +---- api_docs/data_search.mdx | 4 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.devdocs.json | 8 - api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.devdocs.json | 8 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 10 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.devdocs.json | 8 - api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.devdocs.json | 8 - api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.devdocs.json | 24 - api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.devdocs.json | 8 - api_docs/expression_image.mdx | 2 +- .../expression_legacy_metric_vis.devdocs.json | 8 - api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.devdocs.json | 8 - api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.devdocs.json | 16 - api_docs/expression_metric_vis.mdx | 2 +- .../expression_partition_vis.devdocs.json | 48 - api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.devdocs.json | 8 - api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.devdocs.json | 32 - api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.devdocs.json | 8 - api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.devdocs.json | 80 - api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.devdocs.json | 471 +--- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 8 + api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- .../kbn_deeplinks_observability.devdocs.json | 75 +- api_docs/kbn_deeplinks_observability.mdx | 4 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.devdocs.json | 4 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.devdocs.json | 99 + api_docs/kbn_es_query.mdx | 4 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.devdocs.json | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.devdocs.json | 4 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- .../kbn_search_index_documents.devdocs.json | 8 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_url_state.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.devdocs.json | 17 + api_docs/kbn_xstate_utils.mdx | 4 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/log_explorer.devdocs.json | 2125 ++++++++++++++--- api_docs/log_explorer.mdx | 22 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- .../observability_log_explorer.devdocs.json | 54 +- api_docs/observability_log_explorer.mdx | 10 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 16 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.devdocs.json | 140 +- api_docs/visualizations.mdx | 2 +- 663 files changed, 2853 insertions(+), 2806 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index bd1a1a3696652..0e55af13ae05e 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-12-11 +date: 2023-12-12 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 f3884e40ccc84..ccc49e7614e82 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index cd1bb87d4455a..7d0f7d4627a2a 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 813047c497fee..2336a371fe8ab 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2023-12-11 +date: 2023-12-12 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 78909a8e7e9cf..c393fad5df666 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-12-11 +date: 2023-12-12 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 106f1e26f709a..b18468b7545fc 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3489,6 +3489,10 @@ "plugin": "observability", "path": "x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts" }, + { + "plugin": "observability", + "path": "x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts" diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 04c9f5cc98acc..3843d60dae5ab 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 820170ec86548..3d35e4f55c5bb 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-12-11 +date: 2023-12-12 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 285e3cafba09d..6d8e7bcd38c10 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-12-11 +date: 2023-12-12 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 1dd41329301d7..f48389fde277b 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-12-11 +date: 2023-12-12 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 f156ece1627e5..3251ac065dc5e 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-12-11 +date: 2023-12-12 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 2264e4b207a7a..56fa553d48183 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-12-11 +date: 2023-12-12 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 f5037c869da21..fe16ef4ee210b 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-12-11 +date: 2023-12-12 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 092e38c088303..55eeb1fe1123e 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.devdocs.json b/api_docs/charts.devdocs.json index 613f12198c69b..08ffd55cf4e6c 100644 --- a/api_docs/charts.devdocs.json +++ b/api_docs/charts.devdocs.json @@ -3575,14 +3575,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/charts/common/expressions/palette/types.ts", diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 4ca143b11e5f8..7b76b154fef37 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-12-11 +date: 2023-12-12 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 4333a0caa8f39..9d38665c852fd 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-12-11 +date: 2023-12-12 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 551746974d5a1..4c3de01c6261c 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-12-11 +date: 2023-12-12 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 a50fe3976ae95..06d187931aa8e 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-12-11 +date: 2023-12-12 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 42b5566ac4ac9..e57392b6305c5 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-12-11 +date: 2023-12-12 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 da891450a1f05..15df1889fd1d4 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index d8d9c570c003e..00950ad1fe233 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-12-11 +date: 2023-12-12 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 8d7499de07416..df2412db9acbd 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 f7e03e6df188d..1a98bdcb6a151 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-12-11 +date: 2023-12-12 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 ec9460f44158c..3411924fe3f7e 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-12-11 +date: 2023-12-12 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 237f818ee48fa..b8ef5e53bdbb3 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index af41328c1a6dc..5a6a9cfe1168c 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-12-11 +date: 2023-12-12 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 0e999dd6572d4..a1bb897ebee3a 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -5214,14 +5214,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5267,14 +5259,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5320,14 +5304,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5373,14 +5349,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5426,14 +5394,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5479,14 +5439,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5532,14 +5484,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5585,14 +5529,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5638,14 +5574,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5691,14 +5619,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5744,14 +5664,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5797,14 +5709,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5850,14 +5754,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5903,14 +5799,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -5956,14 +5844,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6009,14 +5889,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6062,14 +5934,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6115,14 +5979,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6168,14 +6024,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6221,14 +6069,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6274,14 +6114,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6327,14 +6159,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6380,14 +6204,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6433,14 +6249,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6486,14 +6294,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6539,14 +6339,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6592,14 +6384,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6645,14 +6429,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6698,14 +6474,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6751,14 +6519,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6804,14 +6564,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6857,14 +6609,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6910,14 +6654,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -6963,14 +6699,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7016,14 +6744,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7069,14 +6789,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7122,14 +6834,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7175,14 +6879,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7228,14 +6924,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -7281,14 +6969,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -9799,14 +9479,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts", @@ -9853,53 +9525,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-public.ExecutionContextSearch", - "type": "Type", - "tags": [], - "label": "ExecutionContextSearch", - "description": [], - "signature": [ - "{ filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - "[] | undefined; timeRange?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; disableWarningToasts?: boolean | undefined; }" - ], - "path": "src/plugins/data/common/search/expressions/kibana_context_type.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-public.ExpressionFunctionKibana", @@ -9947,14 +9572,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kibana.ts", @@ -10009,14 +9626,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kibana_context.ts", @@ -10063,14 +9672,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kql.ts", @@ -10117,14 +9718,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/lucene.ts", @@ -10142,9 +9735,9 @@ "signature": [ "{ type: \"kibana_context\"; } & ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataSearchPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.ExecutionContextSearch", "text": "ExecutionContextSearch" } @@ -10332,14 +9925,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts", @@ -10705,9 +10290,9 @@ "signature": [ "{ type: \"kibana_context\"; } & ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataSearchPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.ExecutionContextSearch", "text": "ExecutionContextSearch" } @@ -25479,14 +25064,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 80e8a317a44f2..a52bae56c01f6 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-12-11 +date: 2023-12-12 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 | |-------------------|-----------|------------------------|-----------------| -| 3190 | 31 | 2539 | 22 | +| 3188 | 31 | 2537 | 22 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 3ef12c4fb9f4c..a4be15aa20150 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-12-11 +date: 2023-12-12 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 | |-------------------|-----------|------------------------|-----------------| -| 3190 | 31 | 2539 | 22 | +| 3188 | 31 | 2537 | 22 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 788e55e908cbf..632c5c0c65c92 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -12879,14 +12879,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">) => any" ], "path": "src/plugins/data/common/search/expressions/utils/function_wrapper.ts", @@ -17274,14 +17266,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17327,14 +17311,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17380,14 +17356,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17433,14 +17401,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17486,14 +17446,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17539,14 +17491,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17592,14 +17536,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17645,14 +17581,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17698,14 +17626,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17751,14 +17671,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17804,14 +17716,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17857,14 +17761,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17910,14 +17806,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -17963,14 +17851,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18016,14 +17896,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18069,14 +17941,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18122,14 +17986,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18175,14 +18031,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18228,14 +18076,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18281,14 +18121,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18334,14 +18166,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18387,14 +18211,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18440,14 +18256,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18493,14 +18301,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18546,14 +18346,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18599,14 +18391,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18652,14 +18436,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18705,14 +18481,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18758,14 +18526,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18811,14 +18571,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18864,14 +18616,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18917,14 +18661,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -18970,14 +18706,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19023,14 +18751,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19076,14 +18796,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19129,14 +18841,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19182,14 +18886,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19235,14 +18931,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19288,14 +18976,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -19341,14 +19021,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/aggs/types.ts", @@ -31811,18 +31483,10 @@ "<", { "pluginId": "inspector", - "scope": "common", - "docId": "kibInspectorPluginApi", - "section": "def-common.Adapters", - "text": "Adapters" - }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" }, ">>" ], @@ -31952,14 +31616,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/esaggs/esaggs_fn.ts", @@ -31998,14 +31654,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/esdsl.ts", @@ -32105,53 +31753,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.ExecutionContextSearch", - "type": "Type", - "tags": [], - "label": "ExecutionContextSearch", - "description": [], - "signature": [ - "{ filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - "[] | undefined; timeRange?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; disableWarningToasts?: boolean | undefined; }" - ], - "path": "src/plugins/data/common/search/expressions/kibana_context_type.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.ExpressionFunctionCidr", @@ -32199,14 +31800,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/cidr.ts", @@ -32261,14 +31854,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/date_range.ts", @@ -32315,14 +31900,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/exists_filter.ts", @@ -32377,14 +31954,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/extended_bounds.ts", @@ -32431,14 +32000,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/field.ts", @@ -32485,14 +32046,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/geo_bounding_box.ts", @@ -32539,14 +32092,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/geo_point.ts", @@ -32601,14 +32146,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/ip_range.ts", @@ -32663,14 +32200,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kibana.ts", @@ -32725,14 +32254,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kibana_context.ts", @@ -32779,14 +32300,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kibana_filter.ts", @@ -32841,14 +32354,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/timerange.ts", @@ -32895,14 +32400,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/kql.ts", @@ -32949,14 +32446,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/lucene.ts", @@ -33011,14 +32500,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/numerical_range.ts", @@ -33065,14 +32546,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/phrase_filter.ts", @@ -33119,14 +32592,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/query_filter.ts", @@ -33173,14 +32638,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/range.ts", @@ -33227,14 +32684,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/range_filter.ts", @@ -33289,14 +32738,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/remove_filter.ts", @@ -33351,14 +32792,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data/common/search/expressions/select_filter.ts", @@ -33376,9 +32809,9 @@ "signature": [ "{ type: \"kibana_context\"; } & ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataSearchPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.ExecutionContextSearch", "text": "ExecutionContextSearch" } @@ -34374,9 +33807,9 @@ "signature": [ "{ type: \"kibana_context\"; } & ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataSearchPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.ExecutionContextSearch", "text": "ExecutionContextSearch" } @@ -37429,14 +36862,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">) => ", { "pluginId": "data", @@ -37510,14 +36935,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ExecutionContextSearch", - "text": "ExecutionContextSearch" - }, ">" ], "path": "src/plugins/data/common/search/expressions/kibana.ts", @@ -40439,9 +39856,9 @@ }, "[] | undefined; timeRange?: ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataQueryPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.TimeRange", "text": "TimeRange" }, @@ -40782,9 +40199,9 @@ }, "[] | undefined; timeRange?: ", { - "pluginId": "data", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataQueryPluginApi", + "docId": "kibKbnEsQueryPluginApi", "section": "def-common.TimeRange", "text": "TimeRange" }, diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 4d525d31fd31c..2ba1f5e9b77ca 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-12-11 +date: 2023-12-12 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 | |-------------------|-----------|------------------------|-----------------| -| 3190 | 31 | 2539 | 22 | +| 3188 | 31 | 2537 | 22 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index d5efdee8f39b4..65973b007863b 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-12-11 +date: 2023-12-12 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 c9066151743f3..aeb31d7bf11a9 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-12-11 +date: 2023-12-12 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 60465fbc5ee2d..b2e1d21935e85 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 1f7e5f674a006..d3ccdff224917 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -20722,14 +20722,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 87bb11e7d4598..8206ab38fa583 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index e7bd59e5137c3..8d0eba8c72ba8 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-12-11 +date: 2023-12-12 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 a31a46b97abb8..5aa8c615ce8b0 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -100,7 +100,7 @@ "label": "APIClientRequestParamsOf", "description": [], "signature": [ - "{ \"GET /internal/dataset_quality/data_streams/malformed_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/malformed_docs\"; params?: ", + "{ \"GET /internal/dataset_quality/data_streams/degraded_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/degraded_docs\"; params?: ", "TypeC", "<{ query: ", "IntersectionC", @@ -130,7 +130,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"metrics\" | \"synthetics\" | \"profiling\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ malformedDocs: { dataset: string; percentage: number; }[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { type?: \"metrics\" | \"synthetics\" | \"profiling\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; percentage: number; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/stats\": { endpoint: \"GET /internal/dataset_quality/data_streams/stats\"; params?: ", "TypeC", @@ -187,7 +187,7 @@ "label": "APIReturnType", "description": [], "signature": [ - "{ \"GET /internal/dataset_quality/data_streams/malformed_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/malformed_docs\"; params?: ", + "{ \"GET /internal/dataset_quality/data_streams/degraded_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/degraded_docs\"; params?: ", "TypeC", "<{ query: ", "IntersectionC", @@ -217,7 +217,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"metrics\" | \"synthetics\" | \"profiling\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ malformedDocs: { dataset: string; percentage: number; }[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { type?: \"metrics\" | \"synthetics\" | \"profiling\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; percentage: number; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/stats\": { endpoint: \"GET /internal/dataset_quality/data_streams/stats\"; params?: ", "TypeC", diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index f37f76be67a26..7bb79b57d38cb 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2023-12-11 +date: 2023-12-12 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 e2d80084c96fc..725967e8463a7 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 234710c5c76d7..895006b1e19f8 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1134,7 +1134,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts#:~:text=alertFactory), [executor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.test.ts#:~:text=alertFactory) | - | +| | [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts#:~:text=alertFactory), [executor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.test.ts#:~:text=alertFactory) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/plugin.ts#:~:text=license%24) | 8.8.0 | | | [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/slo/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps), [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/slo/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 21979ccda4fdc..d1782f2e74ad0 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 87fb847db40ef..15db951498e46 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 9df15292c2bc5..e1cc13f2bb13d 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -1526,7 +1526,15 @@ "section": "def-public.CustomizationCallback", "text": "CustomizationCallback" }, - "[]; }" + "[]; stateStorageContainer?: ", + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.IKbnUrlStateStorage", + "text": "IKbnUrlStateStorage" + }, + " | undefined; }" ], "path": "src/plugins/discover/public/components/discover_container/index.ts", "deprecated": false, diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 7e73604c47b01..e6aa4ddb0745e 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-12-11 +date: 2023-12-12 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 1669abfe81e42..e1583c8297dfc 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-12-11 +date: 2023-12-12 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 feb6147c4b620..c9b7e96ef7dee 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index a810f1c076c43..20b3c1d11c5a1 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index a49dc9b17b7b9..e47cbdd483c88 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-12-11 +date: 2023-12-12 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 52e2f1d53ffb7..c3310258888da 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-12-11 +date: 2023-12-12 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 916f76e299d16..e105222244738 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-12-11 +date: 2023-12-12 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 45e54d9910ee7..cda16a38aecdb 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-12-11 +date: 2023-12-12 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 47f4fd6abd556..dafda6cb910ca 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.devdocs.json b/api_docs/event_annotation.devdocs.json index c4f90f98b9a1a..1f5334176836c 100644 --- a/api_docs/event_annotation.devdocs.json +++ b/api_docs/event_annotation.devdocs.json @@ -804,14 +804,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/event_annotation/common/event_annotation_group/index.ts", diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 51a3b553f6e1b..a28dd01697ec5 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-12-11 +date: 2023-12-12 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 39a6fa4f4e23b..87d44eeb75bbd 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-12-11 +date: 2023-12-12 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 05a0b5da4b776..6da2224f16b00 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index e63f9017b78f1..5f4bfacac2878 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-12-11 +date: 2023-12-12 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 597b9aaa2c5cf..9d768382a753a 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.devdocs.json b/api_docs/expression_gauge.devdocs.json index 4ffb246b88599..77364b73eed1f 100644 --- a/api_docs/expression_gauge.devdocs.json +++ b/api_docs/expression_gauge.devdocs.json @@ -1132,14 +1132,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_gauge/common/types/expression_functions.ts", diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 62c1d1b1975e4..22e781abe7951 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.devdocs.json b/api_docs/expression_heatmap.devdocs.json index d131c0eec50a3..d11837f817ccd 100644 --- a/api_docs/expression_heatmap.devdocs.json +++ b/api_docs/expression_heatmap.devdocs.json @@ -687,14 +687,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_heatmap/common/types/expression_functions.ts", @@ -759,14 +751,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_heatmap/common/types/expression_functions.ts", @@ -831,14 +815,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_heatmap/common/types/expression_functions.ts", diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index ce2b164d9e99f..4c7255040887a 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.devdocs.json b/api_docs/expression_image.devdocs.json index 9d01073c26d1f..e51a1a08b9d44 100644 --- a/api_docs/expression_image.devdocs.json +++ b/api_docs/expression_image.devdocs.json @@ -406,14 +406,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_image/common/types/expression_functions.ts", diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 6eccd137896aa..6b50d51965fda 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.devdocs.json b/api_docs/expression_legacy_metric_vis.devdocs.json index e75f85673b794..59c68ce444a54 100644 --- a/api_docs/expression_legacy_metric_vis.devdocs.json +++ b/api_docs/expression_legacy_metric_vis.devdocs.json @@ -872,14 +872,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_legacy_metric/common/types/expression_functions.ts", diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 2282ed6024c55..7715127de8052 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.devdocs.json b/api_docs/expression_metric.devdocs.json index 5c1c8610709fa..674dd738fe29d 100644 --- a/api_docs/expression_metric.devdocs.json +++ b/api_docs/expression_metric.devdocs.json @@ -529,14 +529,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_metric/common/types/expression_functions.ts", diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index e7ff8fe4ae780..7e9c5a4108543 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.devdocs.json b/api_docs/expression_metric_vis.devdocs.json index 02dbf6469ed48..f8dd939d5f389 100644 --- a/api_docs/expression_metric_vis.devdocs.json +++ b/api_docs/expression_metric_vis.devdocs.json @@ -1135,14 +1135,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_metric/common/types/expression_functions.ts", @@ -1223,14 +1215,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_metric/common/types/expression_functions.ts", diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 35e9d36bdd535..ca7e829c0b7b7 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.devdocs.json b/api_docs/expression_partition_vis.devdocs.json index 908097245f11f..7079babb4610f 100644 --- a/api_docs/expression_partition_vis.devdocs.json +++ b/api_docs/expression_partition_vis.devdocs.json @@ -140,14 +140,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/expression_functions/partition_labels_function.ts", @@ -1196,14 +1188,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts", @@ -1290,14 +1274,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts", @@ -1377,14 +1353,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts", @@ -1494,14 +1462,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts", @@ -1581,14 +1541,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_partition_vis/common/types/expression_functions.ts", diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index be8696376a1ea..c3f0b22bb618a 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.devdocs.json b/api_docs/expression_repeat_image.devdocs.json index dcd0d54c1296c..4cab6fe3a0829 100644 --- a/api_docs/expression_repeat_image.devdocs.json +++ b/api_docs/expression_repeat_image.devdocs.json @@ -453,14 +453,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_repeat_image/common/types/expression_functions.ts", diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index ea73c81c06b97..2f8c1e48a7145 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-12-11 +date: 2023-12-12 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 81333a9ae7497..62787996c2674 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.devdocs.json b/api_docs/expression_shape.devdocs.json index 3c6d97d7ce0f4..63d5a0c2ce2f2 100644 --- a/api_docs/expression_shape.devdocs.json +++ b/api_docs/expression_shape.devdocs.json @@ -1517,14 +1517,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_shape/common/types/expression_functions.ts", @@ -1574,14 +1566,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_shape/common/types/expression_functions.ts", @@ -2521,14 +2505,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_shape/common/types/expression_functions.ts", @@ -2578,14 +2554,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expression_shape/common/types/expression_functions.ts", diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index d3e08a9b549cc..a804579b74835 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.devdocs.json b/api_docs/expression_tagcloud.devdocs.json index 0c7cd3c404232..8c6b4a77e81c1 100644 --- a/api_docs/expression_tagcloud.devdocs.json +++ b/api_docs/expression_tagcloud.devdocs.json @@ -104,14 +104,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_tagcloud/common/types/expression_functions.ts", diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index b50e4c653211e..836c9081c1b30 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.devdocs.json b/api_docs/expression_x_y.devdocs.json index ef1d580422e20..da16d0b24133a 100644 --- a/api_docs/expression_x_y.devdocs.json +++ b/api_docs/expression_x_y.devdocs.json @@ -2522,14 +2522,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -2688,14 +2680,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -2766,14 +2750,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -2863,14 +2839,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -2972,14 +2940,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -3049,14 +3009,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -3178,14 +3130,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -3331,14 +3275,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -3423,14 +3359,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", @@ -3599,14 +3527,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 1e5048b8f6dbf..926b2937aa75d 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index 147e417c0ce6d..d3440d35400cd 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -127,15 +127,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/execution.ts", "deprecated": false, @@ -7068,7 +7060,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -7084,7 +7076,14 @@ "\nGet search context of the expression." ], "signature": [ - "() => ExecutionContextSearch" + "() => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExecutionContextSearch", + "text": "ExecutionContextSearch" + } ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -8608,14 +8607,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8669,14 +8660,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8714,14 +8697,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8759,14 +8734,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8804,14 +8771,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8873,14 +8832,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -8942,14 +8893,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -9011,14 +8954,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -9080,14 +9015,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -10655,11 +10582,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/utility-types", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExecutionContextSearch", + "text": "ExecutionContextSearch" }, " | undefined" ], @@ -11861,14 +11788,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -13647,15 +13566,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/execution.ts", "deprecated": false, @@ -18475,7 +18386,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -18491,7 +18402,14 @@ "\nGet search context of the expression." ], "signature": [ - "() => ExecutionContextSearch" + "() => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExecutionContextSearch", + "text": "ExecutionContextSearch" + } ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -19984,14 +19902,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20045,14 +19955,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20090,14 +19992,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20135,14 +20029,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20180,14 +20066,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20249,14 +20127,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20318,14 +20188,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20387,14 +20249,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -20456,14 +20310,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -21769,14 +21615,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -22814,15 +22652,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/execution.ts", "deprecated": false, @@ -28967,14 +28797,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">" ], "path": "src/plugins/expressions/common/util/test_utils.ts", @@ -30542,7 +30364,7 @@ "section": "def-common.ExecutionContext", "text": "ExecutionContext" }, - "" + "" ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -30558,7 +30380,14 @@ "\nGet search context of the expression." ], "signature": [ - "() => ExecutionContextSearch" + "() => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExecutionContextSearch", + "text": "ExecutionContextSearch" + } ], "path": "src/plugins/expressions/common/execution/types.ts", "deprecated": false, @@ -32269,11 +32098,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/utility-types", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExecutionContextSearch", + "text": "ExecutionContextSearch" }, " | undefined" ], @@ -32872,14 +32701,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -32933,14 +32754,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -32978,14 +32791,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33023,14 +32828,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33068,14 +32865,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33137,14 +32926,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33206,14 +32987,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33275,14 +33048,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -33344,14 +33109,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -36454,14 +36211,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/types.ts", @@ -36853,14 +36602,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/clog.ts", @@ -36923,14 +36664,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/cumulative_sum.ts", @@ -36993,14 +36726,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/derivative.ts", @@ -37055,14 +36780,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/font.ts", @@ -37125,14 +36842,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/moving_average.ts", @@ -37195,14 +36904,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/overall_metric.ts", @@ -37241,14 +36942,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/theme.ts", @@ -37303,14 +36996,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/ui_setting.ts", @@ -37349,14 +37034,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/var.ts", @@ -37395,14 +37072,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/expressions/common/expression_functions/specs/var_set.ts", @@ -42551,14 +42220,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">) => Promise<", { "pluginId": "expressions", @@ -42638,14 +42299,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">" ], "path": "src/plugins/expressions/common/expression_functions/specs/math_column.ts", @@ -45399,14 +45052,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">) => any" ], "path": "src/plugins/expressions/common/expression_functions/specs/theme.ts", @@ -45466,14 +45111,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">" ], "path": "src/plugins/expressions/common/expression_functions/specs/theme.ts", @@ -45912,14 +45549,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">) => unknown" ], "path": "src/plugins/expressions/common/expression_functions/specs/var.ts", @@ -45979,14 +45608,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">" ], "path": "src/plugins/expressions/common/expression_functions/specs/var.ts", @@ -46205,14 +45826,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">) => unknown" ], "path": "src/plugins/expressions/common/expression_functions/specs/var_set.ts", @@ -46272,14 +45885,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">" ], "path": "src/plugins/expressions/common/expression_functions/specs/var_set.ts", diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index b723bf32fcc89..cfe4ea58f381e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-12-11 +date: 2023-12-12 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 c5a23c3a48441..566cc96d781f7 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-12-11 +date: 2023-12-12 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 14ab13317809f..100c572fe8c8f 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-12-11 +date: 2023-12-12 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 71ca1b643eda0..08260099b3b86 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-12-11 +date: 2023-12-12 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 53e16a428592e..4731b3ad0b821 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-12-11 +date: 2023-12-12 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 c17566da77181..db2167254ffa0 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 46ad1548783fe..2f4faa6e4e17f 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-12-11 +date: 2023-12-12 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 81980fa72d75c..33bf8e4673759 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-12-11 +date: 2023-12-12 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 85cb668502fba..0292e236f5398 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-12-11 +date: 2023-12-12 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 4a89942a99e08..b746d6eed7f71 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-12-11 +date: 2023-12-12 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 dd010425abbde..71d1b7bd10e93 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-12-11 +date: 2023-12-12 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 22f59d7770010..d107d4cfb5f3e 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 d13cf9464fcb3..3a5090647ab44 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 50464e8963d54..3f10ac8bd3649 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index a724ae0abb78f..1544e8d654d6d 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-12-11 +date: 2023-12-12 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 399bbf98dff7c..6887887dc9058 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-12-11 +date: 2023-12-12 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 256a96d9d404a..2302207aca0e6 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-12-11 +date: 2023-12-12 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 9016140d35640..354873e153dbf 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2023-12-11 +date: 2023-12-12 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 5f94d8faee572..a87a4e5a6c028 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index b0b5d18ba17d4..8cb3a590718ec 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 325831f492235..05b3830248bdc 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-12-11 +date: 2023-12-12 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 5cf0a33f10c9b..1952240755837 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-12-11 +date: 2023-12-12 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 3c02573c118be..c071dfac3c9fd 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2023-12-11 +date: 2023-12-12 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 fceaf2b2c151a..df52eed6c876a 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 22da117ee2994..ddac85173c245 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 184ef7f1ea256..5f1e403d497d7 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index cdbc52666e86b..3b82c6ff13123 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-12-11 +date: 2023-12-12 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 860cbc03cd3bd..2d3689c149365 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 fa22b51c0478a..421b17ca183c9 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 734f88e1c9e6e..3e0f22c5dca2c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-12-11 +date: 2023-12-12 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 959a6cd76cbe0..59679f1d85775 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-12-11 +date: 2023-12-12 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 ff6c37c628bf4..65db88c49f863 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index dbcf9ad0cc1f3..1d15a66d96b2b 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 4c743df95c33b..0932763d11762 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 97001cde05ace..240ee46e9d2fd 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-12-11 +date: 2023-12-12 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 d747905fc37b7..97c9f01f502da 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-12-11 +date: 2023-12-12 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 52394dac734a2..cd469aa6f45ff 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 0b1019b9dee35..d01fa8d0ea71e 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-12-11 +date: 2023-12-12 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 fd15261335406..8907001aa4341 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2023-12-11 +date: 2023-12-12 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 8575220eca32f..494e496bf5e63 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2023-12-11 +date: 2023-12-12 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 fc0026ac2cafe..f02e1f3db646c 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2023-12-11 +date: 2023-12-12 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 49dfefaba1781..28f1aa3b00e09 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-12-11 +date: 2023-12-12 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 dfa7a94b1a4a9..ecb78e12e9ab7 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-12-11 +date: 2023-12-12 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 57764a6ae16b7..ddb3fd93325ce 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-12-11 +date: 2023-12-12 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 60c6cd7e585f2..fb16a11cda9fb 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-12-11 +date: 2023-12-12 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 5ccf16121b9ae..1dc2df9ab446f 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-12-11 +date: 2023-12-12 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 c08c547d94cc8..d8dfe9a617e02 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-12-11 +date: 2023-12-12 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 1c0732b2b906f..1221b264e4d36 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-12-11 +date: 2023-12-12 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 08af565c8f6fd..e344405f4c7fd 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-12-11 +date: 2023-12-12 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 7d39145f29da6..2ec55cde02446 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 9868d1b9259ec..d09ae4f83d753 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-12-11 +date: 2023-12-12 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 8b8a13c62b562..91bc2597527ba 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-12-11 +date: 2023-12-12 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 0c82b4d44a174..41a3f194a0dc0 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 9491684a54e97..23ad2faa3f71c 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 272976f29c84e..1c5f0fc953da7 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-12-11 +date: 2023-12-12 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 4517a31434332..b37bfde10dd52 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-12-11 +date: 2023-12-12 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 109716bc23df0..059126a20f4e0 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-12-11 +date: 2023-12-12 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 f11af96261817..9289efd15b499 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2023-12-11 +date: 2023-12-12 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 c9dc82d0067a4..eab99828a72f9 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-12-11 +date: 2023-12-12 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 cc643f029274a..6fdb7c03c5b7a 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 9f67a580a5b17..95b6475fd6249 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 4228bd842eb54..15c220d39354a 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 f747c7ca10fa5..a23d5b7486b84 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 8b96ae27da336..2180bf1a04e63 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-12-11 +date: 2023-12-12 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 1fe70661a91b5..622fcd98cdc63 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 2a29da41d883e..910092c052e41 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 1e24488bd5d8c..54b6ebdd529cc 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 b23de57221402..b5b74fd1e7746 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 eadcf03358bd0..2af634ccc5b09 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 9e2ba7528ed32..e74708a0db06a 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-12-11 +date: 2023-12-12 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 c327d23e09b16..ee660f2d2c6cd 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 185f213b1ca1d..adf94918bdf22 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 433e43918dd81..f3e5483a5f8cb 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 14a0a4d2e385a..ae91936d4c4f2 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 11bcc26bf861c..47a271f85fe3a 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-12-11 +date: 2023-12-12 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 da86954c15c81..a1082ca9ee9b6 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 246269c02991f..23704f9f4a0db 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 6882fff3c7a67..a68c168caea9b 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 fe9c90d223695..de18699194e4d 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-12-11 +date: 2023-12-12 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 60e9b8d77e1a1..55a4d45a82567 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-12-11 +date: 2023-12-12 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 6971504a39b67..34434d47124ac 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 27c7880293197..e98f82e46cf82 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 113b2a36296e6..79775682bdc5e 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 f64457477239d..5cbe440550582 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 96e8d2a7f2577..452004538837b 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 606710802976f..70b08c45b89e7 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 f4b981b94580c..20228ce57709d 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 fe1c53b872fb6..f67ba2e727d6a 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-12-11 +date: 2023-12-12 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 c88b8cdf2c823..2b7a02a138966 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-12-11 +date: 2023-12-12 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 33fe75c62cf55..e01d2b85cc939 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 a27962d6a95fd..d1ec987d75643 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 8a3c157c18313..3d06e307f6f71 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 99c36cc493eba..12224995c9a08 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 7634911f7da2d..ebca0cc1ba88e 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 98f4bd656512e..30496e0525a39 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-12-11 +date: 2023-12-12 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 5b6e283879874..5116f70c3184d 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-12-11 +date: 2023-12-12 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 16015c985d5f2..453f29d8ffd1a 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 05d87c49dd964..fe14f185bd386 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 945bed2c9fd25..5a61ea45dc345 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 eb6f68ff3d762..5bb5b43ba3510 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 4e6ba277b629a..a86d2a17c7e59 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-12-11 +date: 2023-12-12 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 9f997fff374b5..fa6d91f3b87ab 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 405d85278833b..e51c8f622c655 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 2195ef38e5960..15d502ad1879c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 4d1238a631af1..0a04a66241d2b 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-12-11 +date: 2023-12-12 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 15617c65acb4d..56cdad74fe198 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 024320701d1f0..3c8e095e994dc 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 2a583d6565829..a95aa3748509d 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 38ad894811a7c..6e150f2098d86 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 42e9c17d9d0a0..181b74fb963ba 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 748b08bf30714..0ecad616046de 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 7dbbc6a68c23d..053e34e0fcfd6 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 da54da361c864..1b5bf42d6543b 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-12-11 +date: 2023-12-12 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 7758a962f7cd5..e8bddc790df20 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-12-11 +date: 2023-12-12 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 bbd9359e89641..01c1facc7ff90 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 97d6e078f442d..7363f60077358 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 b77e418ba8fd1..036977a374338 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 ac9ccb065df5b..b0174331fc87d 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 517e05ee69b98..fe0bb2d0bd114 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 4737d5dd81031..eab7db70afd34 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 d45cc42a3e000..de0af8d622748 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 1d40c656dcf3d..7041c5cf40a86 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-12-11 +date: 2023-12-12 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 a84147fcf1832..52de9292f6fcc 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 439289645a4dc..a8643bc8d3c59 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-12-11 +date: 2023-12-12 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 d574788c1d6a4..4f01352ac7e60 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-12-11 +date: 2023-12-12 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 efa26010378c7..090235f33cf44 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 c7340d844eee6..aa010260afc3c 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index e4bb1e238d637..40712f23f295e 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 058e8d83ce1d3..6f7e6d755261b 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 958d073075f2f..975a532fe4dcb 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4420,6 +4420,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/mapping_routes.ts" + }, { "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/app.ts" @@ -6818,6 +6822,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" + }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index acd21412eb0e2..3939ed264c7eb 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index dbb1ad7f98762..5ae32c0d2843a 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 454c6e665ae5c..7d54b959e348b 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 625b2a510d8ed..b98097af10a24 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 505eb1c7dedf0..b355d45e7284c 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 68119af31abf5..38e3e3e471e71 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-12-11 +date: 2023-12-12 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 0f3f2ddebd6bd..2507294ff8960 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 e3b9709c82e97..33376294f27db 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 15d74a20bca28..4f43c9bc77da6 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 3b7f622752840..9c6eedaf65619 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 cd9630fa66a2c..6e3b858524cd3 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 5961b646953fe..b2bda15dc61d7 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 0786c00b7e5a6..783f165a389ed 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 f2537134fc2a5..83b578128cbf4 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index dc52f713209ad..1ab10da1125f0 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 16cb3e4ad0a8b..bb89b591b8ffb 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 3d3bad5aed8d1..7822fbebcba21 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 b150ac130e02a..edc29346cbb91 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-12-11 +date: 2023-12-12 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 1f841bf2e65b2..eac674232d4f4 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 c6fb17099bc81..df0d40acf008a 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 9d95bc2e4df2b..f63656487b1a1 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 fabf3fd409fc0..9989ebf99a4d9 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 55a1a74c40547..f6006a6643d7e 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-12-11 +date: 2023-12-12 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 8ac3a31590495..7bbe75d26d8a3 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 0174019af9948..ddd58c41ad3df 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 d590a7658b571..b336db0c52286 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 d789a162b0ff9..6bc75e053d647 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-12-11 +date: 2023-12-12 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 62b4905c3bac8..9373c7d7a9c51 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 457b2ad14190e..16d3e1ca8dada 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 f95a3dcd2af4c..889aa5c78592b 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 0545037e412bc..ff73e061d1f4e 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 57088c15c53c7..4539da21f8468 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 0f48ee9d5c3b2..042b70779720c 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 b0eb1229d4d63..31841fd4e2d38 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 e39c9a7fb7477..55b09641b483b 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 7ebcf6288f632..acacbd7698bec 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 ab6bc555c6b96..6e1c9297339ae 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 f144aa1f5cd02..90e922ec0c857 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 b7aeef187c5a5..ac979502f9ed4 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2023-12-11 +date: 2023-12-12 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 2a5c4da1402bd..eda4def4ae150 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-12-11 +date: 2023-12-12 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 abb4e850c9c5b..501c2577572e9 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 fa77628c36b4d..8d73b28faa90a 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-12-11 +date: 2023-12-12 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 75f69ac30b29f..1f610d886afce 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 05740043de205..0527400b7a0cf 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 261b63b5d5e67..bb121f7dee855 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 da18db146c024..47a863e38ad17 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index b64b38aeb165f..4869d67e79510 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index bcf3733f1bd99..4c62522a49a7c 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 3632f6489453d..99ee67df558e1 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-12-11 +date: 2023-12-12 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 a9327a0d70a61..57b84ecfd7e82 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 9e5970aaa03fd..64e7d2094613f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 6aa62c2c6bff3..f097039de4bad 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 ec36dfac7a153..9b75ac9281c96 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 035e49e5cf967..78c4ee07fec82 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 28a824b417ec5..ff4acf367e1ee 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 e939c053a9726..9c78d5a55ec3c 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-12-11 +date: 2023-12-12 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 66ccc2f3cb4f2..9f9ffce5d3643 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 5e2656faf68a4..d8a10178e496f 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 2332dee2a6238..5ffa36b3709ff 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 559aa1d0394ca..d1142e62dd8bb 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 3c52679b2f29f..f14c9b0375626 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 2d2c7c98289e9..dc8d80c20955f 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 9270f2f002a39..04d639700db3f 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 de9170aa1acf1..d5c766190401f 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 0448348dab7d7..fc74f20c5775f 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-12-11 +date: 2023-12-12 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 f7ebb5d84f4f3..1f6de8bbdda75 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 fa00897ef512d..4d20d4d4d59be 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-12-11 +date: 2023-12-12 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 a68813516249d..b90bb3d1ee4e5 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 627828a0890d6..2471aa7e06b2e 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 bf760554f8c4d..280afa3ebb6a2 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-12-11 +date: 2023-12-12 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 be92d3373fb86..2a450bb5512fa 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 ec60d7c97c039..76f195d054ec8 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-12-11 +date: 2023-12-12 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 add2d00f923d9..07c02b0544cff 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2023-12-11 +date: 2023-12-12 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 283727bda1167..65f8ed63bb5af 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-12-11 +date: 2023-12-12 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 5d4b2ba15a8ec..9dff6305fda52 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 078085a4894ae..765af9ba87ae9 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 c6319fd1e1ff2..516b52f17fbd3 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 0dfdda030b8f4..9cef0b6ba62d8 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 1f4392ff7de44..0e0567261ec1b 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 630fd2a4cb18e..f04395675b823 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 367623436a8fd..d341cca07d19c 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-12-11 +date: 2023-12-12 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 72b5985b27840..8c6cf6ad663cf 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-12-11 +date: 2023-12-12 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 05bf709a52f7b..b0061ed042ffb 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 26c25833be896..56969835894ac 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 b5e76d62b4da5..646334e44b84a 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-12-11 +date: 2023-12-12 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 decc4190350e1..e107187634ae3 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 31753166cf980..99409be574dcf 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 c56819b738b0d..820bfec20c564 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-12-11 +date: 2023-12-12 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 ace6b53be3143..d478db5e1a8a7 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-12-11 +date: 2023-12-12 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 7442006c6fb36..4692846f8ef0d 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 df7af88f563a5..4f53ca8deef74 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-12-11 +date: 2023-12-12 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 1805d43604d2c..93e8bab29aeaf 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 d39fbb62114ee..d15abdb08d49c 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2023-12-11 +date: 2023-12-12 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 9f33616ba6790..d4e7e288f079e 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-12-11 +date: 2023-12-12 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 1678cfc0215a6..81b0ab3f4918b 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 68365638ccb4f..c4e8d3456ac8a 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 5a33e449c5453..a78411ff912a9 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-12-11 +date: 2023-12-12 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 c257c4b5f7b54..0c779e45809ac 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-12-11 +date: 2023-12-12 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 3907f63ac977d..995b538722cf7 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 397c8dfd8c91d..720d15b49a454 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-12-11 +date: 2023-12-12 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 05314ffced08a..cb7f344b942f6 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.devdocs.json b/api_docs/kbn_deeplinks_observability.devdocs.json index ad8191373165a..c1148395fe4d8 100644 --- a/api_docs/kbn_deeplinks_observability.devdocs.json +++ b/api_docs/kbn_deeplinks_observability.devdocs.json @@ -190,15 +190,22 @@ }, { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.LogExplorerNavigationParams.sort", + "id": "def-common.LogExplorerNavigationParams.filters", "type": "Array", "tags": [], - "label": "sort", + "label": "filters", "description": [ - "\nArray of the used sorting [[field,direction],...]" + "\nOptionally apply free-form filters." ], "signature": [ - "string[][] | undefined" + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined" ], "path": "packages/deeplinks/observability/locators/log_explorer.ts", "deprecated": false, @@ -206,22 +213,22 @@ }, { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.LogExplorerNavigationParams.filters", - "type": "Array", + "id": "def-common.LogExplorerNavigationParams.filterControls", + "type": "Object", "tags": [], - "label": "filters", + "label": "filterControls", "description": [ - "\nOptionally apply filters." + "\nOptionally apply curated filter controls" ], "signature": [ { - "pluginId": "@kbn/es-query", + "pluginId": "@kbn/deeplinks-observability", "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.FilterControls", + "text": "FilterControls" }, - "[] | undefined" + " | undefined" ], "path": "packages/deeplinks/observability/locators/log_explorer.ts", "deprecated": false, @@ -495,6 +502,44 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.FilterControls", + "type": "Type", + "tags": [], + "label": "FilterControls", + "description": [], + "signature": [ + "{ namespace?: ", + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.ListFilterControl", + "text": "ListFilterControl" + }, + " | undefined; }" + ], + "path": "packages/deeplinks/observability/locators/log_explorer.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.ListFilterControl", + "type": "Type", + "tags": [], + "label": "ListFilterControl", + "description": [], + "signature": [ + "{ mode: \"include\"; values: string[]; }" + ], + "path": "packages/deeplinks/observability/locators/log_explorer.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-observability", "id": "def-common.LOG_EXPLORER_LOCATOR_ID", @@ -527,10 +572,10 @@ }, { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.OBSERVABILITY_LOG_EXPLORER", + "id": "def-common.OBSERVABILITY_LOG_EXPLORER_APP_ID", "type": "string", "tags": [], - "label": "OBSERVABILITY_LOG_EXPLORER", + "label": "OBSERVABILITY_LOG_EXPLORER_APP_ID", "description": [], "signature": [ "\"observability-log-explorer\"" diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 25b5ecf685783..613b2cb08e6e4 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 19 | 0 | +| 31 | 0 | 21 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index ac550838a54cc..22e1f696ae6f8 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index ebb43e291448e..6ebf7d7df07d0 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-12-11 +date: 2023-12-12 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 689032669f946..2df90e25f2c80 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-12-11 +date: 2023-12-12 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 2f23b5d06cdcd..c3f30817b61c7 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-12-11 +date: 2023-12-12 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 d3f49bf2b59aa..d1a5d70524ced 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-12-11 +date: 2023-12-12 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 3f160e535849e..63c3f7277445b 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-12-11 +date: 2023-12-12 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 1eeb41e6d574c..fbce5ed30e184 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-12-11 +date: 2023-12-12 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 95c842ec10543..d4aa20c562b71 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-12-11 +date: 2023-12-12 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 b8be817157c30..8da298f082846 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 c19dbb42b05d1..5b0bb30cca0f5 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 da4bde4036142..831beab59eed5 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-12-11 +date: 2023-12-12 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 1941d0258d146..b5adca53677c2 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 cbbaf47e00708..de041a3889ea4 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 385c421e1806a..711754d3fcaff 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 6ff9ba238ce68..018bfc79a70a7 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index c000f65be0322..ebca836b058bb 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-12-11 +date: 2023-12-12 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.devdocs.json b/api_docs/kbn_elastic_agent_utils.devdocs.json index 66197d89c54ba..9814a2afd0fa3 100644 --- a/api_docs/kbn_elastic_agent_utils.devdocs.json +++ b/api_docs/kbn_elastic_agent_utils.devdocs.json @@ -431,7 +431,7 @@ "label": "AgentName", "description": [], "signature": [ - "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\"" + "\"java\" | \"ruby\" | \"go\" | \"dotnet\" | \"php\" | \"otlp\" | \"android/java\" | \"iOS/swift\" | \"rum-js\" | \"js-base\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"nodejs\" | \"python\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\"" ], "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", "deprecated": false, @@ -544,7 +544,7 @@ "label": "OpenTelemetryAgentName", "description": [], "signature": [ - "\"otlp\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\"" + "\"otlp\" | \"opentelemetry/webjs\" | \"opentelemetry/java\" | \"opentelemetry/cpp\" | \"opentelemetry/dotnet\" | \"opentelemetry/erlang\" | \"opentelemetry/go\" | \"opentelemetry/nodejs\" | \"opentelemetry/php\" | \"opentelemetry/python\" | \"opentelemetry/ruby\" | \"opentelemetry/rust\" | \"opentelemetry/swift\" | \"opentelemetry/android\"" ], "path": "packages/kbn-elastic-agent-utils/src/agent_names.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 5e9eb73b602af..629be0fb7db7f 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 239490e69998f..f475233b39807 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 0199bbd77e444..2a74de23d651f 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 155f73f21a1fe..83f3b088265f2 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-12-11 +date: 2023-12-12 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 f9f8a4edb9953..80be29420365d 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-12-11 +date: 2023-12-12 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 475951b938517..c379b92c68f84 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.devdocs.json b/api_docs/kbn_es_query.devdocs.json index 2ae012946a9ce..60ee58badf7ce 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -5394,6 +5394,105 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch", + "type": "Interface", + "tags": [], + "label": "ExecutionContextSearch", + "description": [], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch.filters", + "type": "Array", + "tags": [], + "label": "filters", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined" + ], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch.query", + "type": "CompoundType", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + "[] | undefined" + ], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch.timeRange", + "type": "Object", + "tags": [], + "label": "timeRange", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined" + ], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch.disableWarningToasts", + "type": "CompoundType", + "tags": [], + "label": "disableWarningToasts", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.FilterCompareOptions", diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index e168f1ff74b83..36b99ac40f238 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.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 | |-------------------|-----------|------------------------|-----------------| -| 261 | 1 | 201 | 15 | +| 266 | 1 | 206 | 15 | ## Common diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index ab6d6d0e46ae6..8e6a87f19d053 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-12-11 +date: 2023-12-12 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 f550993800f82..2c3402784fc96 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 3cc19c254bccd..5571bbc6770ea 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-12-11 +date: 2023-12-12 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 9ec29d71521b4..b68e03536e519 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-12-11 +date: 2023-12-12 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 bb5c23aceb0c2..8c1a0d47b5c27 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-12-11 +date: 2023-12-12 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 98dacc1265c4c..74c60fb08b8f2 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-12-11 +date: 2023-12-12 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 9d7a4289b469d..235632b0e615a 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 720a0a4b25d7d..bbde227274f15 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 7975e4d7e061f..ba9f6674753fd 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index f5b7d9ee56691..095d5427e2fc6 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-12-11 +date: 2023-12-12 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 8c3045cc27328..64ab54508c402 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-12-11 +date: 2023-12-12 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 274ae1d241315..f355fe37a6879 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-12-11 +date: 2023-12-12 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 990cb6538926e..cdbf44da5ffaa 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-12-11 +date: 2023-12-12 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 4ed8a7270f9eb..7b41e1fafbb45 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-12-11 +date: 2023-12-12 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 9b14f3995e341..4f06d19fceb75 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 ac9bb7652acf4..1f5d24c46a899 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-12-11 +date: 2023-12-12 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 adf643bf22d2c..db2a016772a3d 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-12-11 +date: 2023-12-12 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 c9badf77f06a5..32e3b36072e36 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-12-11 +date: 2023-12-12 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 eb671ba4bfd52..daa40cad1fa48 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-12-11 +date: 2023-12-12 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 44eea17f762c8..89c6c67cce414 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-12-11 +date: 2023-12-12 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 1fb2be425f2ab..407589284b77b 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 81537dfa0eaab..5b292fb6a6b1f 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-12-11 +date: 2023-12-12 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 355c107b2f6a8..ff4b2789f5bf7 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-12-11 +date: 2023-12-12 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 3d99ffdfa3113..fc144dd777e80 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c57a364a187a1..eda882b378b54 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-12-11 +date: 2023-12-12 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 3c0a2f6456906..e514993254875 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-12-11 +date: 2023-12-12 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 f4e1315f9d809..8c0657447be3a 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-12-11 +date: 2023-12-12 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 7d54ac99b9dd0..5049441112588 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-12-11 +date: 2023-12-12 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 e2bf953d5d604..ff6284a945286 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-12-11 +date: 2023-12-12 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 1fdbb1119c2a8..58a2a61450d35 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 5fc24f74d620f..fba9c7e9895cf 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-12-11 +date: 2023-12-12 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 9933fe7c1c2b9..5451dd3e3b537 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index df621391ae0b2..eeaa474c776f5 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-12-11 +date: 2023-12-12 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 31b0fc3f55e15..b229b43999fa4 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-12-11 +date: 2023-12-12 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 b2d405e587cec..bb7d536da6ea2 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2023-12-11 +date: 2023-12-12 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 9738b1538b299..b18ff0a36a0af 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2023-12-11 +date: 2023-12-12 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 478f13d3a8755..c967837542ccd 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-12-11 +date: 2023-12-12 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 d322fe9a38f53..500648b0618b6 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-12-11 +date: 2023-12-12 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 ee7af0e3e8258..3530184d03bab 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2023-12-11 +date: 2023-12-12 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 221dac51dd562..80f17d46e34e7 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-12-11 +date: 2023-12-12 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 716bce360cdea..a2c1856580b5c 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-12-11 +date: 2023-12-12 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 9edc65d0d2455..c97a250a3529c 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-12-11 +date: 2023-12-12 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 2b793b02c671a..014bfdf7569d9 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-12-11 +date: 2023-12-12 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 d074661081ac4..df781997049dd 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-12-11 +date: 2023-12-12 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 7bfd964b63a12..bd1a04bea2cdb 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-12-11 +date: 2023-12-12 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.devdocs.json b/api_docs/kbn_mapbox_gl.devdocs.json index 838e1f65579ce..b3517dd00c74b 100644 --- a/api_docs/kbn_mapbox_gl.devdocs.json +++ b/api_docs/kbn_mapbox_gl.devdocs.json @@ -9592,7 +9592,7 @@ "label": "MapEvent", "description": [], "signature": [ - "\"error\" | \"remove\" | \"data\" | \"render\" | \"rotate\" | \"resize\" | \"zoom\" | \"load\" | \"move\" | \"idle\" | \"mousedown\" | \"mouseup\" | \"mouseover\" | \"mousemove\" | \"click\" | \"dblclick\" | \"mouseenter\" | \"mouseleave\" | \"mouseout\" | \"contextmenu\" | \"wheel\" | \"touchstart\" | \"touchend\" | \"touchmove\" | \"touchcancel\" | \"movestart\" | \"moveend\" | \"dragstart\" | \"drag\" | \"dragend\" | \"zoomstart\" | \"zoomend\" | \"rotatestart\" | \"rotateend\" | \"pitchstart\" | \"pitch\" | \"pitchend\" | \"boxzoomstart\" | \"boxzoomend\" | \"boxzoomcancel\" | \"webglcontextlost\" | \"webglcontextrestored\" | \"styledata\" | \"sourcedata\" | \"dataloading\" | \"styledataloading\" | \"sourcedataloading\" | \"styleimagemissing\" | \"style.load\" | \"terrain\" | \"dataabort\" | \"sourcedataabort\"" + "\"error\" | \"remove\" | \"data\" | \"render\" | \"rotate\" | \"resize\" | \"idle\" | \"zoom\" | \"load\" | \"move\" | \"mousedown\" | \"mouseup\" | \"mouseover\" | \"mousemove\" | \"click\" | \"dblclick\" | \"mouseenter\" | \"mouseleave\" | \"mouseout\" | \"contextmenu\" | \"wheel\" | \"touchstart\" | \"touchend\" | \"touchmove\" | \"touchcancel\" | \"movestart\" | \"moveend\" | \"dragstart\" | \"drag\" | \"dragend\" | \"zoomstart\" | \"zoomend\" | \"rotatestart\" | \"rotateend\" | \"pitchstart\" | \"pitch\" | \"pitchend\" | \"boxzoomstart\" | \"boxzoomend\" | \"boxzoomcancel\" | \"webglcontextlost\" | \"webglcontextrestored\" | \"styledata\" | \"sourcedata\" | \"dataloading\" | \"styledataloading\" | \"sourcedataloading\" | \"styleimagemissing\" | \"style.load\" | \"terrain\" | \"dataabort\" | \"sourcedataabort\"" ], "path": "node_modules/maplibre-gl/dist/maplibre-gl.d.ts", "deprecated": false, diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index b83302b749443..15b832bf028cb 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-12-11 +date: 2023-12-12 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 7185b391ef2a2..13bb2fdc2fc51 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 6014440f35cfe..57ebaa4d4ed60 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 937b1bd96716f..2eab090e4f105 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 7822a23f5d7a9..2132f936d47f6 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-12-11 +date: 2023-12-12 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 cb0e4a61bc556..8814b0a9108f3 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2023-12-11 +date: 2023-12-12 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 ceb353a3afc5f..73e20f921c20e 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 e2daa37387c45..f3233e19805f1 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-12-11 +date: 2023-12-12 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 0586763726dec..fe13d266e779a 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-12-11 +date: 2023-12-12 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 fa08cece6ede8..5c619a5171fdf 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 f7b98bc3d4463..7410c198da7db 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 4aa13de222e85..98b5b92dcd45a 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-12-11 +date: 2023-12-12 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 97ab61f68504f..fe76c0aad1432 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-12-11 +date: 2023-12-12 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 ffd6b077ee699..8a32c3ac83226 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-12-11 +date: 2023-12-12 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 43ccd08792425..c84ed03ca16f7 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-12-11 +date: 2023-12-12 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 e74cc84dee6af..77c3cad274d5a 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-12-11 +date: 2023-12-12 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 6d45c46267528..69d01d31adfa0 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-12-11 +date: 2023-12-12 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 a0d6df4bb8e53..b62882f7664d6 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 31884bf6dd4f7..631caf0120627 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 252a09343e00a..f8137bf131b00 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 54fe44e52f4db..879b7f13dd17d 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 0ea59afd8cf51..c9f1503079aec 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 f0c6e88d80d4e..f384d3477cdbc 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index b3d6ec6f8aace..45961ad07fb1a 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 6d533d6266489..05ed9b2c8277d 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2023-12-11 +date: 2023-12-12 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 922b47399909e..bf153aead8730 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index f140d31f8adbb..f5611cdcc4f74 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 13cd6a6a433fa..1ffdb777bf0c8 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-12-11 +date: 2023-12-12 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 8c7756883b4a2..b9f5574570022 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-12-11 +date: 2023-12-12 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 a7ad95048dcae..8f96452eddd9c 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2023-12-11 +date: 2023-12-12 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 c732bc1ab7672..babe1a375e61b 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2023-12-11 +date: 2023-12-12 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 4687429864bbc..2b8e8e3295602 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2023-12-11 +date: 2023-12-12 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 9b99bd38e0b23..3adf8d5efa186 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-12-11 +date: 2023-12-12 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 af757b4b72195..6072302aa3e00 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-12-11 +date: 2023-12-12 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 8aa08d1ff5b28..363b55ef385cc 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-12-11 +date: 2023-12-12 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 9a8e49f303aa7..5490aab1c4a10 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-12-11 +date: 2023-12-12 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 cdef97bc7afa2..e6e208c8992eb 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2023-12-11 +date: 2023-12-12 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 976c828cd0423..f5ad1c54d790a 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index d66b347eed3b7..7a2439de0a668 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-12-11 +date: 2023-12-12 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 b81489b293b5f..cb8258a2eff47 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 8f36b4665ca45..3a4baac3be23a 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 76921d66a904b..7d7289ec9349f 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-12-11 +date: 2023-12-12 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 73ceee48b18a4..302bc7262e4ee 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-12-11 +date: 2023-12-12 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 13665090344a1..7a6e2d918c7aa 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-12-11 +date: 2023-12-12 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 16ef8cea47c48..ef9f7304e9eb6 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-12-11 +date: 2023-12-12 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 3da7fe5d474db..5594040e720b8 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-12-11 +date: 2023-12-12 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 49a8fadae0e70..04595eec266f7 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-12-11 +date: 2023-12-12 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 acc284ff57879..0cabfec07ab6e 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-12-11 +date: 2023-12-12 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 8c7895acce7a7..16f6752760485 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-12-11 +date: 2023-12-12 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 ea1642c62ca2c..54b50624473a7 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-12-11 +date: 2023-12-12 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 9ecdca0bad09b..317169cdb0c91 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-12-11 +date: 2023-12-12 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 7ffdf4ace8919..ab16d0fb5f6e2 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-12-11 +date: 2023-12-12 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 49d96296f0428..fa14117a0cfc0 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-12-11 +date: 2023-12-12 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 dfb2f15721c68..56de2afd5b321 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index d899ca49867bd..3252395821c03 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2023-12-11 +date: 2023-12-12 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 92b6dd80220c9..d5330fb160b06 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2023-12-11 +date: 2023-12-12 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 18e7f5e545aee..9eb19d7cbb62f 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2023-12-11 +date: 2023-12-12 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 91920c45fa18f..b9a033adb2abe 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2023-12-11 +date: 2023-12-12 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 2b35b7d4ebbda..2607053e6efc1 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2023-12-11 +date: 2023-12-12 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 42c2742a2fe67..1bd8e06a601e8 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2023-12-11 +date: 2023-12-12 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 1e11fd77f18d8..fc76787e83f59 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 05d5a7ac1f682..5410480ac95b8 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2023-12-11 +date: 2023-12-12 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 a8ba6295f5710..9d741aa43a8e3 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2023-12-11 +date: 2023-12-12 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 c26679cccfc63..aa51ddcc3f7a3 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2023-12-11 +date: 2023-12-12 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 cb06927e423b5..c1440fb9b7aa4 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 563db58f32f2c..ade560d4e4afa 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 025c396ff5a16..fa0def76edd80 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 967bcf7a0f783..1114435462551 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-12-11 +date: 2023-12-12 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 bb81fd738140d..51f17012abb6f 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 13dd7f3406959..a6acd12d30d6a 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -4922,7 +4922,7 @@ "section": "def-common.ConnectorStatus", "text": "ConnectorStatus" }, - "; language: string | null; index_name: string | null; configuration: ", + "; language: string | null; configuration: ", { "pluginId": "@kbn/search-connectors", "scope": "common", @@ -4930,7 +4930,7 @@ "section": "def-common.ConnectorConfiguration", "text": "ConnectorConfiguration" }, - "; pipeline?: ", + "; index_name: string | null; pipeline?: ", { "pluginId": "@kbn/search-connectors", "scope": "common", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 032455012f2a3..592a3446f3e60 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-12-11 +date: 2023-12-12 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 0fcde33d0bb7c..2b87383ad22b0 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2023-12-11 +date: 2023-12-12 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.devdocs.json b/api_docs/kbn_search_index_documents.devdocs.json index a19264cf15a01..a68dcae8b5ffd 100644 --- a/api_docs/kbn_search_index_documents.devdocs.json +++ b/api_docs/kbn_search_index_documents.devdocs.json @@ -98,8 +98,8 @@ "pluginId": "@kbn/core-elasticsearch-server", "scope": "common", "docId": "kibKbnCoreElasticsearchServerPluginApi", - "section": "def-common.IScopedClusterClient", - "text": "IScopedClusterClient" + "section": "def-common.ElasticsearchClient", + "text": "ElasticsearchClient" }, ", indexName: string, query?: string | undefined, from?: number, size?: number) => Promise<", { @@ -129,8 +129,8 @@ "pluginId": "@kbn/core-elasticsearch-server", "scope": "common", "docId": "kibKbnCoreElasticsearchServerPluginApi", - "section": "def-common.IScopedClusterClient", - "text": "IScopedClusterClient" + "section": "def-common.ElasticsearchClient", + "text": "ElasticsearchClient" } ], "path": "packages/kbn-search-index-documents/lib/fetch_search_results.ts", diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index a607f1fd20212..8168c3857cd63 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2023-12-11 +date: 2023-12-12 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 530d79a36ce64..fa2f234524ef7 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index ea12af91a212f..a82d7127ec570 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2023-12-11 +date: 2023-12-12 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 d18874b278d93..6b84cbe4f733d 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2023-12-11 +date: 2023-12-12 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 14e05981bc06c..bdf75e5adc772 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2023-12-11 +date: 2023-12-12 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 94ee0edaf1041..e78eb9abc1fa5 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-12-11 +date: 2023-12-12 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 08f5ce9728fbc..ab324ca0c2aa1 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-12-11 +date: 2023-12-12 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 f255baa1c6538..58b4cd095c019 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-12-11 +date: 2023-12-12 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 5896ae48ffcfd..b44a7dafe277b 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index fa62f6e3f8d44..663fb1e743c15 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-12-11 +date: 2023-12-12 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 b7441b997c3db..87de4f7c4bff9 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-12-11 +date: 2023-12-12 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 16b6de085beac..31fb371d1cecb 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-12-11 +date: 2023-12-12 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 e3aa86dbcce2e..6e5e00b346e5b 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 fcce85ec344e3..f1bfdabb7672f 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-12-11 +date: 2023-12-12 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 2a3530da93174..51bec1c044d9f 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-12-11 +date: 2023-12-12 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 f6c7705b1ed4f..028b9a969ca85 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 cf03defaa93c1..27cf0a02b695c 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-12-11 +date: 2023-12-12 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 8fe024ad4ffe8..d34861dc9512b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-12-11 +date: 2023-12-12 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 eaa8ab8c83330..04bbfdbf960f2 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-12-11 +date: 2023-12-12 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 f8f166553783a..419ab3de1cdc0 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 722661517047d..95a65588992ac 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-12-11 +date: 2023-12-12 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 7e690cce7e293..56c25428bb123 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-12-11 +date: 2023-12-12 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 93b2a69cf8fac..21d5709c35b87 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-12-11 +date: 2023-12-12 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 38c2f291bcd03..0d5e44689388c 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-12-11 +date: 2023-12-12 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 796bc69d7488e..ad23af11d2655 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-12-11 +date: 2023-12-12 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 d414a0462a991..9f10828932051 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index d74572143a3ca..6258145d26aa5 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index aa9d6ed7be6c1..04831bfdbe87b 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-12-11 +date: 2023-12-12 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 f5a647c3a246d..b6ee499b097cf 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-12-11 +date: 2023-12-12 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 a169d0b825ee3..027a8c1411c2e 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-12-11 +date: 2023-12-12 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 2f5adc3760589..e15062918c614 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-12-11 +date: 2023-12-12 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 fa14acbebc0ce..abf2c96bfc646 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-12-11 +date: 2023-12-12 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 0a538b7f00e21..b8a7faf1523fe 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-12-11 +date: 2023-12-12 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 d30f9f72b2854..82a92bb0360f5 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-12-11 +date: 2023-12-12 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 f985ad69bdca5..910a5bdb256d2 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-12-11 +date: 2023-12-12 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 1916e742ec2f0..00bc76f5c1935 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-12-11 +date: 2023-12-12 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 a47a190f2c3b0..7faffbe3b587d 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-12-11 +date: 2023-12-12 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 6b5f6577c17b2..2d66ba8139b44 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-12-11 +date: 2023-12-12 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 cbe2a33bb876d..433955c8dafca 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-12-11 +date: 2023-12-12 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 12aa34545d677..4230e1a453c5e 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-12-11 +date: 2023-12-12 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 5633a5e21fc12..66d3f762c605f 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 eab9970cb004e..bb466928188f8 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-12-11 +date: 2023-12-12 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 8f9203abe025f..21da8a53e7f3f 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2023-12-11 +date: 2023-12-12 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 fdf80692bb3aa..83a742dee023d 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-12-11 +date: 2023-12-12 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 28c12c47e75ee..30be098172f8d 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-12-11 +date: 2023-12-12 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 88f659a051c4b..5c169d98f57b7 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 21e674547d3db..ff2549cc08e55 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 e71fbc84eb9dc..5707fae06e12c 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-12-11 +date: 2023-12-12 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 e2f12c1bb1a5c..061ae07a73c40 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-12-11 +date: 2023-12-12 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 20ef2b2c58cc5..a821fa2600199 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-12-11 +date: 2023-12-12 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 baf3969f66cb6..f439d53184e50 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-12-11 +date: 2023-12-12 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 c2f514aadeb53..80416b4f2fa19 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-12-11 +date: 2023-12-12 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 a65e8c42af7cd..1c741e25b054e 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 92a72a6a12254..e3ada17b9faf9 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-12-11 +date: 2023-12-12 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 f4310239b0869..70c10679d7f4d 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 130c905de3488..a050a361c31dd 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-12-11 +date: 2023-12-12 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 b71f806d5b8d9..db5c9b210d1e6 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 2575cb85057d0..c920fac4ce6ec 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-12-11 +date: 2023-12-12 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 4f69aa288e36a..5c53bf3060813 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 921e8a73a560d..45b5ace79cddc 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-12-11 +date: 2023-12-12 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 0cc77f6fd463f..22ff3d61a11e1 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 3d2681616d536..b5e512eb00002 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-12-11 +date: 2023-12-12 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 9575a965aeca9..81c863c81c313 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-12-11 +date: 2023-12-12 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 be5764924c8f6..2f628f017168f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 b52eeff6e7966..36e87fb69e44b 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 b10c2f0267c11..765e3e4f8ba58 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-12-11 +date: 2023-12-12 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 2caeb034ef1a7..e1edf806d8504 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-12-11 +date: 2023-12-12 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 3b5c7756cfe8f..f6bce04207438 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 2844d1b3843df..2b2c1ad421b07 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-12-11 +date: 2023-12-12 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 30ddaa853878a..3a6e25deab0e4 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-12-11 +date: 2023-12-12 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 3b33b579abb03..90419cba88a13 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-12-11 +date: 2023-12-12 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 2529d6406eb4b..58d3f2425d64f 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-12-11 +date: 2023-12-12 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 7d55ab27e9179..dd2e1c4f0dc79 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c58eb915038f2..ed8654c772edc 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 07f9c708cb572..a666afe7756aa 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 786a014b1ef62..7dfbd608767b9 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 933e0f0c9acbc..50ab43038968a 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-12-11 +date: 2023-12-12 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 38867c4cdcd13..318204cc768ed 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-12-11 +date: 2023-12-12 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 a16fa466d3a88..40ca34678f0b4 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-12-11 +date: 2023-12-12 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 1bca903be1779..409f823c47a37 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 35aadfba86540..d63e79947ae92 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 17ed6755b5395..e0325f0c9d856 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-12-11 +date: 2023-12-12 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 d424b2666739e..067615b56f9aa 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-12-11 +date: 2023-12-12 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 b2a296333bcad..ac5b89d415e90 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index c64829ae9cb66..b9d99725ba8ee 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-12-11 +date: 2023-12-12 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 14cbdb3f7ed94..1b22e9b042b3b 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2023-12-11 +date: 2023-12-12 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 573912ac59027..8c11f46dd6e85 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-12-11 +date: 2023-12-12 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 53f6b0c824922..1b5845f1a04d1 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-12-11 +date: 2023-12-12 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 53cf08338eb97..82dc69b8f75d5 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-12-11 +date: 2023-12-12 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 4009bfe83840a..fad8af204ec27 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-12-11 +date: 2023-12-12 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 dfda2111360ab..fc994e9da81ff 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index f2f8ed9bace26..e45bdecb5b8a0 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index c754da85b131a..fe025ffef0a79 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-12-11 +date: 2023-12-12 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 d36839f1cdc6f..9bee99774af9b 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-12-11 +date: 2023-12-12 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 cd1b07e475b79..dee42ac47be25 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index fda79f6c189a0..a99a08e76ebfe 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 75f42566173a3..979863ab2821e 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-12-11 +date: 2023-12-12 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 50f417ebafdb4..4bc9dac01ba2e 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-12-11 +date: 2023-12-12 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 43e4bfef4b4ed..fc220462e9d19 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-12-11 +date: 2023-12-12 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 514fb0f6a088f..8d6a2f9d19164 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-12-11 +date: 2023-12-12 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 425f82c162946..33bb2f0ced1c0 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-12-11 +date: 2023-12-12 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 eb5585555019f..130a2da8b93aa 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-12-11 +date: 2023-12-12 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 7e69951cad306..b894706a15c26 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.devdocs.json b/api_docs/kbn_xstate_utils.devdocs.json index b67854e217961..7c3dbf7d10fdc 100644 --- a/api_docs/kbn_xstate_utils.devdocs.json +++ b/api_docs/kbn_xstate_utils.devdocs.json @@ -62,6 +62,23 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.getDevToolsOptions", + "type": "Function", + "tags": [], + "label": "getDevToolsOptions", + "description": [], + "signature": [ + "() => boolean | object" + ], + "path": "packages/kbn-xstate-utils/src/dev_tools.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/xstate-utils", "id": "def-common.isDevMode", diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index fe17c8e4f1e22..ac12938557568 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 12 | 0 | 12 | 0 | +| 13 | 0 | 13 | 0 | ## Common diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index a3c0dcf3510d3..5ce6e7b48fea5 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-12-11 +date: 2023-12-12 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 a2e3f4f1adc04..9c3cb95e66949 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2023-12-11 +date: 2023-12-12 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 07212120179c4..fb6a6bf2d9758 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 2b6db0390ce2e..2bd874705659f 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-12-11 +date: 2023-12-12 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 804ae354612b3..5323c75df5963 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-12-11 +date: 2023-12-12 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 c880dac3e35ba..7bbce351704eb 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 32844076176f7..f0645cfff0727 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 47dc85c8dd873..20cc4ded379fc 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-12-11 +date: 2023-12-12 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 d9cf9d49e1566..1f6bd63c44379 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 0b4cbe893cdef..4b9f4ed0531f0 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-12-11 +date: 2023-12-12 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 cce59837d0108..84e45ad7b56d1 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2023-12-11 +date: 2023-12-12 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 bbc81c5768a2c..980da84e620b5 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.devdocs.json b/api_docs/log_explorer.devdocs.json index 783b558b4505e..3ee4d7802eefa 100644 --- a/api_docs/log_explorer.devdocs.json +++ b/api_docs/log_explorer.devdocs.json @@ -2,494 +2,1975 @@ "id": "logExplorer", "client": { "classes": [], - "functions": [], - "interfaces": [ + "functions": [ { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerCustomizations", - "type": "Interface", + "id": "def-public.getDiscoverColumnsFromDisplayOptions", + "type": "Function", "tags": [], - "label": "LogExplorerCustomizations", + "label": "getDiscoverColumnsFromDisplayOptions", "description": [], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/types.ts", + "signature": [ + "(displayOptions: ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + ") => string[] | undefined" + ], + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerCustomizations.flyout", + "id": "def-public.getDiscoverColumnsFromDisplayOptions.$1", "type": "Object", "tags": [], - "label": "flyout", + "label": "displayOptions", "description": [], "signature": [ - "{ renderContent?: ", - "FlyoutRenderContent", - " | undefined; } | undefined" + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + } ], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/types.ts", + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true } ], + "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerFlyoutContentProps", - "type": "Interface", + "id": "def-public.getDiscoverGridFromDisplayOptions", + "type": "Function", "tags": [], - "label": "LogExplorerFlyoutContentProps", + "label": "getDiscoverGridFromDisplayOptions", "description": [], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/types.ts", + "signature": [ + "(displayOptions: ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + ") => ", + { + "pluginId": "@kbn/unified-data-table", + "scope": "common", + "docId": "kibKbnUnifiedDataTablePluginApi", + "section": "def-common.UnifiedDataTableSettings", + "text": "UnifiedDataTableSettings" + }, + " | undefined" + ], + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerFlyoutContentProps.doc", + "id": "def-public.getDiscoverGridFromDisplayOptions.$1", "type": "Object", "tags": [], - "label": "doc", + "label": "displayOptions", "description": [], "signature": [ - "DataTableRecord" + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + } ], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/types.ts", + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true } ], + "returnComment": [], "initialIsOpen": false - }, + } + ], + "interfaces": [ { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerStateContainer", + "id": "def-public.LogExplorerController", "type": "Interface", "tags": [], - "label": "LogExplorerStateContainer", + "label": "LogExplorerController", "description": [], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/log_explorer.tsx", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerStateContainer.appState", + "id": "def-public.LogExplorerController.actions", "type": "Object", "tags": [], - "label": "appState", + "label": "actions", "description": [], "signature": [ - { - "pluginId": "discover", - "scope": "public", - "docId": "kibDiscoverPluginApi", - "section": "def-public.DiscoverAppState", - "text": "DiscoverAppState" - }, - " | undefined" + "{}" ], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/log_explorer.tsx", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerStateContainer.logExplorerState", - "type": "CompoundType", + "id": "def-public.LogExplorerController.customizations", + "type": "Object", "tags": [], - "label": "logExplorerState", + "label": "customizations", "description": [], "signature": [ - "Partial<", - "WithDatasetSelection", - " | (", - "WithDatasetSelection", - " & ", - "WithControlPanels", - ") | (", - "WithDatasetSelection", - " & ", - "WithControlPanelGroupAPI", - " & ", - "WithControlPanels", - ")> | undefined" + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerCustomizations", + "text": "LogExplorerCustomizations" + } ], - "path": "x-pack/plugins/log_explorer/public/components/log_explorer/log_explorer.tsx", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - } - ], - "enums": [], - "misc": [], - "objects": [], - "setup": { - "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerPluginSetup", - "type": "Interface", - "tags": [], - "label": "LogExplorerPluginSetup", - "description": [], - "path": "x-pack/plugins/log_explorer/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerPluginSetup.locators", - "type": "Object", - "tags": [], - "label": "locators", - "description": [], - "signature": [ - "LogExplorerLocators" - ], - "path": "x-pack/plugins/log_explorer/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "lifecycle": "setup", - "initialIsOpen": true - }, - "start": { - "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerPluginStart", - "type": "Interface", - "tags": [], - "label": "LogExplorerPluginStart", - "description": [], - "path": "x-pack/plugins/log_explorer/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "logExplorer", - "id": "def-public.LogExplorerPluginStart.LogExplorer", - "type": "CompoundType", - "tags": [], - "label": "LogExplorer", - "description": [], - "signature": [ - "React.ComponentClass<", - "LogExplorerProps", - ", any> | React.FunctionComponent<", - "LogExplorerProps", - ">" - ], - "path": "x-pack/plugins/log_explorer/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "lifecycle": "start", - "initialIsOpen": true - } - }, - "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { - "classes": [ - { - "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection", - "type": "Class", - "tags": [], - "label": "AllDatasetSelection", - "description": [], - "signature": [ - { - "pluginId": "logExplorer", - "scope": "common", - "docId": "kibLogExplorerPluginApi", - "section": "def-common.AllDatasetSelection", - "text": "AllDatasetSelection" }, - " implements ", - "DatasetSelectionStrategy" - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ { "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection.selectionType", - "type": "string", + "id": "def-public.LogExplorerController.datasetsClient", + "type": "Object", "tags": [], - "label": "selectionType", + "label": "datasetsClient", "description": [], "signature": [ - "\"all\"" + "IDatasetsClient" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection.selection", - "type": "Object", + "id": "def-public.LogExplorerController.discoverServices", + "type": "CompoundType", "tags": [], - "label": "selection", + "label": "discoverServices", "description": [], "signature": [ - "{ dataset: ", - "Dataset", + "Pick>, \"data\" | \"history\" | \"uiSettings\" | \"timefilter\" | \"filterManager\"> & { urlStateStorage: ", + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.IKbnUrlStateStorage", + "text": "IKbnUrlStateStorage" + }, "; }" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection.toDataviewSpec", - "type": "Function", + "id": "def-public.LogExplorerController.event$", + "type": "Object", "tags": [], - "label": "toDataviewSpec", + "label": "event$", "description": [], "signature": [ - "() => { id: string; name: string | undefined; title: string | undefined; }" + "Observable", + "" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection.toURLSelectionId", - "type": "Function", + "id": "def-public.LogExplorerController.service", + "type": "Object", "tags": [], - "label": "toURLSelectionId", + "label": "service", "description": [], "signature": [ - "() => string" + "Interpreter", + "<(", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanelGroupAPI", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + "), any, ", + "LogExplorerControllerEvent", + ", ", + "LogExplorerControllerTypeState", + ", ", + "ResolveTypegenMeta", + "<", + "TypegenDisabled", + ", ", + "LogExplorerControllerEvent", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ">>" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-common.AllDatasetSelection.create", - "type": "Function", + "id": "def-public.LogExplorerController.state$", + "type": "Object", "tags": [], - "label": "create", + "label": "state$", "description": [], "signature": [ - "() => ", + "Observable", + "<", { "pluginId": "logExplorer", - "scope": "common", + "scope": "public", "docId": "kibLogExplorerPluginApi", - "section": "def-common.AllDatasetSelection", - "text": "AllDatasetSelection" - } + "section": "def-public.LogExplorerPublicState", + "text": "LogExplorerPublicState" + }, + ">" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerController.stateMachine", + "type": "Object", + "tags": [], + "label": "stateMachine", + "description": [], + "signature": [ + "StateMachine", + "<(", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanelGroupAPI", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + "), any, ", + "LogExplorerControllerEvent", + ", ", + "LogExplorerControllerTypeState", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ", ", + "ResolveTypegenMeta", + "<", + "TypegenDisabled", + ", ", + "LogExplorerControllerEvent", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ">>" + ], + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false }, { "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection", - "type": "Class", + "id": "def-public.LogExplorerCustomizations", + "type": "Interface", "tags": [], - "label": "UnresolvedDatasetSelection", + "label": "LogExplorerCustomizations", "description": [], - "signature": [ - { - "pluginId": "logExplorer", - "scope": "common", - "docId": "kibLogExplorerPluginApi", - "section": "def-common.UnresolvedDatasetSelection", - "text": "UnresolvedDatasetSelection" - }, - " implements ", - "DatasetSelectionStrategy" - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.selectionType", - "type": "string", + "id": "def-public.LogExplorerCustomizations.flyout", + "type": "Object", "tags": [], - "label": "selectionType", + "label": "flyout", "description": [], "signature": [ - "\"unresolved\"" + "{ renderContent?: ", + "RenderContentCustomization", + "<", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerFlyoutContentProps", + "text": "LogExplorerFlyoutContentProps" + }, + "> | undefined; } | undefined" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", "deprecated": false, "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerFlyoutContentProps", + "type": "Interface", + "tags": [], + "label": "LogExplorerFlyoutContentProps", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerFlyoutContentProps", + "text": "LogExplorerFlyoutContentProps" }, + " extends ", + { + "pluginId": "discover", + "scope": "public", + "docId": "kibDiscoverPluginApi", + "section": "def-public.FlyoutContentProps", + "text": "FlyoutContentProps" + } + ], + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.selection", + "id": "def-public.LogExplorerFlyoutContentProps.dataView", "type": "Object", "tags": [], - "label": "selection", + "label": "dataView", "description": [], "signature": [ - "{ name?: string | undefined; dataset: ", - "Dataset", - "; }" + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.toDataviewSpec", - "type": "Function", + "id": "def-public.LogExplorerFlyoutContentProps.doc", + "type": "Object", "tags": [], - "label": "toDataviewSpec", + "label": "doc", "description": [], "signature": [ - "() => { id: string; name: string | undefined; title: string | undefined; }" + "LogDocument" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.CreateLogExplorerController", + "type": "Type", + "tags": [], + "label": "CreateLogExplorerController", + "description": [], + "signature": [ + "({ customizations, initialState, }: { customizations?: ", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerCustomizations", + "text": "LogExplorerCustomizations" }, + " | undefined; initialState?: ", { - "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.toURLSelectionId", - "type": "Function", - "tags": [], - "label": "toURLSelectionId", - "description": [], - "signature": [ - "() => string" - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerPublicStateUpdate", + "text": "LogExplorerPublicStateUpdate" + }, + " | undefined; }) => Promise<", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerController", + "text": "LogExplorerController" }, + ">" + ], + "path": "x-pack/plugins/log_explorer/public/controller/create_controller.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ { "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.fromSelection", - "type": "Function", + "id": "def-public.CreateLogExplorerController.$1", + "type": "Object", "tags": [], - "label": "fromSelection", + "label": "__0", "description": [], "signature": [ - "(selection: { name?: string | undefined; } & { dataset: { name: ", - "Branded", - "; } & { title?: string | undefined; }; }) => ", + "{ customizations?: ", { "pluginId": "logExplorer", - "scope": "common", + "scope": "public", "docId": "kibLogExplorerPluginApi", - "section": "def-common.UnresolvedDatasetSelection", - "text": "UnresolvedDatasetSelection" - } - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.fromSelection.$1", - "type": "CompoundType", - "tags": [], - "label": "selection", - "description": [], - "signature": [ - "{ name?: string | undefined; } & { dataset: { name: ", - "Branded", - "; } & { title?: string | undefined; }; }" - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.create", - "type": "Function", - "tags": [], - "label": "create", - "description": [], - "signature": [ - "(dataset: ", - "Dataset", - ") => ", + "section": "def-public.LogExplorerCustomizations", + "text": "LogExplorerCustomizations" + }, + " | undefined; initialState?: ", { "pluginId": "logExplorer", - "scope": "common", + "scope": "public", "docId": "kibLogExplorerPluginApi", - "section": "def-common.UnresolvedDatasetSelection", - "text": "UnresolvedDatasetSelection" - } + "section": "def-public.LogExplorerPublicStateUpdate", + "text": "LogExplorerPublicStateUpdate" + }, + " | undefined; }" ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "path": "x-pack/plugins/log_explorer/public/controller/create_controller.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "logExplorer", - "id": "def-common.UnresolvedDatasetSelection.create.$1", - "type": "Object", - "tags": [], - "label": "dataset", - "description": [], - "signature": [ - "Dataset" - ], - "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "trackAdoption": false } ], "initialIsOpen": false - } - ], - "functions": [], - "interfaces": [], - "enums": [], + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerControllerContext", + "type": "Type", + "tags": [], + "label": "LogExplorerControllerContext", + "description": [], + "signature": [ + "(", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + ") | (", + "WithDatasetSelection", + " & ", + "WithControlPanelGroupAPI", + " & ", + "WithControlPanels", + " & ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & ", + "WithDiscoverStateContainer", + ")" + ], + "path": "x-pack/plugins/log_explorer/public/state_machines/log_explorer_controller/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPublicState", + "type": "Type", + "tags": [], + "label": "LogExplorerPublicState", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.DisplayOptions", + "text": "DisplayOptions" + }, + " & { controls: ", + "ControlOptions", + "; datasetSelection: { selectionType: \"all\"; } | { selectionType: \"single\"; selection: { name?: string | undefined; } & { title?: string | undefined; } & { version?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | { selectionType: \"unresolved\"; selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; }; }" + ], + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPublicStateUpdate", + "type": "Type", + "tags": [], + "label": "LogExplorerPublicStateUpdate", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataQueryPluginApi", + "section": "def-common.QueryState", + "text": "QueryState" + }, + " & ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.PartialDisplayOptions", + "text": "PartialDisplayOptions" + }, + " & { controls?: ", + "ControlOptions", + " | undefined; datasetSelection?: { selectionType: \"all\"; } | { selectionType: \"single\"; selection: { name?: string | undefined; } & { title?: string | undefined; } & { version?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | { selectionType: \"unresolved\"; selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/public/controller/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [], + "setup": { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginSetup", + "type": "Interface", + "tags": [], + "label": "LogExplorerPluginSetup", + "description": [], + "path": "x-pack/plugins/log_explorer/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginSetup.locators", + "type": "Object", + "tags": [], + "label": "locators", + "description": [], + "signature": [ + "LogExplorerLocators" + ], + "path": "x-pack/plugins/log_explorer/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginStart", + "type": "Interface", + "tags": [], + "label": "LogExplorerPluginStart", + "description": [], + "path": "x-pack/plugins/log_explorer/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginStart.LogExplorer", + "type": "CompoundType", + "tags": [], + "label": "LogExplorer", + "description": [], + "signature": [ + "React.ComponentClass<", + "LogExplorerProps", + ", any> | React.FunctionComponent<", + "LogExplorerProps", + ">" + ], + "path": "x-pack/plugins/log_explorer/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginStart.createLogExplorerController", + "type": "Function", + "tags": [], + "label": "createLogExplorerController", + "description": [], + "signature": [ + "({ customizations, initialState, }: { customizations?: ", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerCustomizations", + "text": "LogExplorerCustomizations" + }, + " | undefined; initialState?: ", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerPublicStateUpdate", + "text": "LogExplorerPublicStateUpdate" + }, + " | undefined; }) => Promise<", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerController", + "text": "LogExplorerController" + }, + ">" + ], + "path": "x-pack/plugins/log_explorer/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerPluginStart.createLogExplorerController.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "{ customizations?: ", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerCustomizations", + "text": "LogExplorerCustomizations" + }, + " | undefined; initialState?: ", + { + "pluginId": "logExplorer", + "scope": "public", + "docId": "kibLogExplorerPluginApi", + "section": "def-public.LogExplorerPublicStateUpdate", + "text": "LogExplorerPublicStateUpdate" + }, + " | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/public/controller/create_controller.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], "misc": [], "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection", + "type": "Class", + "tags": [], + "label": "AllDatasetSelection", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + }, + " implements ", + "DatasetSelectionStrategy" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection.selectionType", + "type": "string", + "tags": [], + "label": "selectionType", + "description": [], + "signature": [ + "\"all\"" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection.selection", + "type": "Object", + "tags": [], + "label": "selection", + "description": [], + "signature": [ + "{ dataset: ", + "Dataset", + "; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection.toDataviewSpec", + "type": "Function", + "tags": [], + "label": "toDataviewSpec", + "description": [], + "signature": [ + "() => ", + "DataViewSpecWithId" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection.toPlainSelection", + "type": "Function", + "tags": [], + "label": "toPlainSelection", + "description": [], + "signature": [ + "() => { selectionType: \"all\"; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.AllDatasetSelection.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + } + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/all_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection", + "type": "Class", + "tags": [], + "label": "UnresolvedDatasetSelection", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.UnresolvedDatasetSelection", + "text": "UnresolvedDatasetSelection" + }, + " implements ", + "DatasetSelectionStrategy" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.selectionType", + "type": "string", + "tags": [], + "label": "selectionType", + "description": [], + "signature": [ + "\"unresolved\"" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.selection", + "type": "Object", + "tags": [], + "label": "selection", + "description": [], + "signature": [ + "{ name?: string | undefined; dataset: ", + "Dataset", + "; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.toDataviewSpec", + "type": "Function", + "tags": [], + "label": "toDataviewSpec", + "description": [], + "signature": [ + "() => ", + "DataViewSpecWithId" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.toPlainSelection", + "type": "Function", + "tags": [], + "label": "toPlainSelection", + "description": [], + "signature": [ + "() => { selectionType: \"unresolved\"; selection: { name: string | undefined; dataset: { name: ", + "Branded", + "; title: string; }; }; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.fromSelection", + "type": "Function", + "tags": [], + "label": "fromSelection", + "description": [], + "signature": [ + "(selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }) => ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.UnresolvedDatasetSelection", + "text": "UnresolvedDatasetSelection" + } + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.fromSelection.$1", + "type": "CompoundType", + "tags": [], + "label": "selection", + "description": [], + "signature": [ + "{ name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "(dataset: ", + "Dataset", + ") => ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.UnresolvedDatasetSelection", + "text": "UnresolvedDatasetSelection" + } + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.UnresolvedDatasetSelection.create.$1", + "type": "Object", + "tags": [], + "label": "dataset", + "description": [], + "signature": [ + "Dataset" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/unresolved_dataset_selection.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.hydrateDatasetSelection", + "type": "Function", + "tags": [], + "label": "hydrateDatasetSelection", + "description": [], + "signature": [ + "(datasetSelection: { selectionType: \"all\"; } | { selectionType: \"single\"; selection: { name?: string | undefined; } & { title?: string | undefined; } & { version?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | { selectionType: \"unresolved\"; selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; }) => ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.AllDatasetSelection", + "text": "AllDatasetSelection" + }, + " | ", + "SingleDatasetSelection", + " | ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.UnresolvedDatasetSelection", + "text": "UnresolvedDatasetSelection" + } + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/hydrate_dataset_selection.ts.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.hydrateDatasetSelection.$1", + "type": "CompoundType", + "tags": [], + "label": "datasetSelection", + "description": [], + "signature": [ + "{ selectionType: \"all\"; } | { selectionType: \"single\"; selection: { name?: string | undefined; } & { title?: string | undefined; } & { version?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | { selectionType: \"unresolved\"; selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/hydrate_dataset_selection.ts.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.ChartDisplayOptions", + "type": "Interface", + "tags": [], + "label": "ChartDisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.ChartDisplayOptions.breakdownField", + "type": "CompoundType", + "tags": [], + "label": "breakdownField", + "description": [], + "signature": [ + "string | null" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.DisplayOptions", + "type": "Interface", + "tags": [], + "label": "DisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.DisplayOptions.grid", + "type": "Object", + "tags": [], + "label": "grid", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridDisplayOptions", + "text": "GridDisplayOptions" + } + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.DisplayOptions.chart", + "type": "Object", + "tags": [], + "label": "chart", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.ChartDisplayOptions", + "text": "ChartDisplayOptions" + } + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridColumnDisplayOptions", + "type": "Interface", + "tags": [], + "label": "GridColumnDisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.GridColumnDisplayOptions.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridColumnDisplayOptions.width", + "type": "number", + "tags": [], + "label": "width", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridDisplayOptions", + "type": "Interface", + "tags": [], + "label": "GridDisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.GridDisplayOptions.columns", + "type": "Array", + "tags": [], + "label": "columns", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridColumnDisplayOptions", + "text": "GridColumnDisplayOptions" + }, + "[]" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridDisplayOptions.rows", + "type": "Object", + "tags": [], + "label": "rows", + "description": [], + "signature": [ + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridRowsDisplayOptions", + "text": "GridRowsDisplayOptions" + } + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridRowsDisplayOptions", + "type": "Interface", + "tags": [], + "label": "GridRowsDisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.GridRowsDisplayOptions.rowHeight", + "type": "number", + "tags": [], + "label": "rowHeight", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.GridRowsDisplayOptions.rowsPerPage", + "type": "number", + "tags": [], + "label": "rowsPerPage", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialDisplayOptions", + "type": "Interface", + "tags": [], + "label": "PartialDisplayOptions", + "description": [], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialDisplayOptions.grid", + "type": "Object", + "tags": [], + "label": "grid", + "description": [], + "signature": [ + "Partial & { rows?: Partial<", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridRowsDisplayOptions", + "text": "GridRowsDisplayOptions" + }, + "> | undefined; }> | undefined" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialDisplayOptions.chart", + "type": "Object", + "tags": [], + "label": "chart", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.ChartDisplayOptions", + "text": "ChartDisplayOptions" + }, + "> | undefined" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.availableControlPanelFields", + "type": "Array", + "tags": [], + "label": "availableControlPanelFields", + "description": [], + "signature": [ + "\"data_stream.namespace\"[]" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.AvailableControlPanels", + "type": "Type", + "tags": [], + "label": "AvailableControlPanels", + "description": [], + "signature": [ + "{ readonly NAMESPACE: \"data_stream.namespace\"; }" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.ControlPanels", + "type": "Type", + "tags": [], + "label": "ControlPanels", + "description": [], + "signature": [ + "{ [x: string]: { order: number; width: \"small\" | \"medium\" | \"large\"; grow: boolean; type: string; explicitInput: { id: string; } & { dataViewId?: string | undefined; exclude?: boolean | undefined; existsSelected?: boolean | undefined; fieldName?: string | undefined; selectedOptions?: string[] | undefined; title?: string | undefined; }; }; }" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.DatasetSelectionPlain", + "type": "Type", + "tags": [], + "label": "DatasetSelectionPlain", + "description": [], + "signature": [ + "{ selectionType: \"all\"; } | { selectionType: \"single\"; selection: { name?: string | undefined; } & { title?: string | undefined; } & { version?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; } | { selectionType: \"unresolved\"; selection: { name?: string | undefined; } & { dataset: { name: ", + "Branded", + "; } & { title?: string | undefined; }; }; }" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialChartDisplayOptions", + "type": "Type", + "tags": [], + "label": "PartialChartDisplayOptions", + "description": [], + "signature": [ + "{ breakdownField?: string | null | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialGridDisplayOptions", + "type": "Type", + "tags": [], + "label": "PartialGridDisplayOptions", + "description": [], + "signature": [ + "{ columns?: ", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridColumnDisplayOptions", + "text": "GridColumnDisplayOptions" + }, + "[] | undefined; rows?: Partial<", + { + "pluginId": "logExplorer", + "scope": "common", + "docId": "kibLogExplorerPluginApi", + "section": "def-common.GridRowsDisplayOptions", + "text": "GridRowsDisplayOptions" + }, + "> | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.PartialGridRowsDisplayOptions", + "type": "Type", + "tags": [], + "label": "PartialGridRowsDisplayOptions", + "description": [], + "signature": [ + "{ rowHeight?: number | undefined; rowsPerPage?: number | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/common/display_options/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.availableControlsPanels", + "type": "Object", + "tags": [], + "label": "availableControlsPanels", + "description": [], + "signature": [ + "{ readonly NAMESPACE: \"data_stream.namespace\"; }" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs", + "type": "Object", + "tags": [], + "label": "controlPanelConfigs", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE", + "type": "Object", + "tags": [], + "label": "[availableControlsPanels.NAMESPACE]", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.width", + "type": "string", + "tags": [], + "label": "width", + "description": [], + "signature": [ + "\"medium\"" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.grow", + "type": "boolean", + "tags": [], + "label": "grow", + "description": [], + "signature": [ + "false" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput", + "type": "Object", + "tags": [], + "label": "explicitInput", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"data_stream.namespace\"" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.fieldName", + "type": "string", + "tags": [], + "label": "fieldName", + "description": [], + "signature": [ + "\"data_stream.namespace\"" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.controlPanelConfigs.availableControlsPanels.NAMESPACE.explicitInput.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "x-pack/plugins/log_explorer/common/control_panels/available_control_panels.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.ControlPanelRT", + "type": "Object", + "tags": [], + "label": "ControlPanelRT", + "description": [], + "signature": [ + "RecordC", + "<", + "StringC", + ", ", + "TypeC", + "<{ order: ", + "NumberC", + "; width: ", + "UnionC", + "<[", + "LiteralC", + "<\"medium\">, ", + "LiteralC", + "<\"small\">, ", + "LiteralC", + "<\"large\">]>; grow: ", + "BooleanC", + "; type: ", + "StringC", + "; explicitInput: ", + "IntersectionC", + "<[", + "TypeC", + "<{ id: ", + "StringC", + "; }>, ", + "PartialC", + "<{ dataViewId: ", + "StringC", + "; exclude: ", + "BooleanC", + "; existsSelected: ", + "BooleanC", + "; fieldName: ", + "StringC", + "; selectedOptions: ", + "ArrayC", + "<", + "StringC", + ">; title: ", + "UnionC", + "<[", + "StringC", + ", ", + "UndefinedC", + "]>; }>]>; }>>" + ], + "path": "x-pack/plugins/log_explorer/common/control_panels/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "logExplorer", + "id": "def-common.datasetSelectionPlainRT", + "type": "Object", + "tags": [], + "label": "datasetSelectionPlainRT", + "description": [], + "signature": [ + "UnionC", + "<[", + "TypeC", + "<{ selectionType: ", + "LiteralC", + "<\"all\">; }>, ", + "TypeC", + "<{ selectionType: ", + "LiteralC", + "<\"single\">; selection: ", + "IntersectionC", + "<[", + "PartialC", + "<{ name: ", + "StringC", + "; }>, ", + "PartialC", + "<{ title: ", + "StringC", + "; }>, ", + "PartialC", + "<{ version: ", + "StringC", + "; }>, ", + "TypeC", + "<{ dataset: ", + "ExactC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "BrandC", + "<", + "StringC", + ", ", + "IndexPatternBrand", + ">; }>, ", + "PartialC", + "<{ title: ", + "StringC", + "; }>]>>; }>]>; }>, ", + "TypeC", + "<{ selectionType: ", + "LiteralC", + "<\"unresolved\">; selection: ", + "IntersectionC", + "<[", + "PartialC", + "<{ name: ", + "StringC", + "; }>, ", + "TypeC", + "<{ dataset: ", + "ExactC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "BrandC", + "<", + "StringC", + ", ", + "IndexPatternBrand", + ">; }>, ", + "PartialC", + "<{ title: ", + "StringC", + "; }>]>>; }>]>; }>]>" + ], + "path": "x-pack/plugins/log_explorer/common/dataset_selection/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 1ddd66ef92a51..feb63b78cca66 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 26 | 0 | 26 | 8 | +| 83 | 0 | 83 | 16 | ## Client @@ -31,11 +31,29 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux ### Start +### Functions + + ### Interfaces +### Consts, variables and types + + ## Common +### Objects + + +### Functions + + ### Classes +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 9e6f756d5b43c..4331309050423 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 14a7e76b5c182..64c9199c5fcad 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-12-11 +date: 2023-12-12 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 73bab403f1749..388eba40bb42b 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-12-11 +date: 2023-12-12 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 956a6a23ca8f1..b1cad805c2640 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-12-11 +date: 2023-12-12 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 90ccd67d5b273..82f3d077905ba 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-12-11 +date: 2023-12-12 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 bcc60ab664da1..3a40b68ca787a 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-12-11 +date: 2023-12-12 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 df32e3a72fd0d..f4ab1a345e083 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2023-12-11 +date: 2023-12-12 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 485700922d15f..022fbfcb957e7 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-12-11 +date: 2023-12-12 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 d0e21208051fc..243e03eee0d85 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 99b909dd42d4d..17338b007aaa3 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 241ea21a57303..55339d01f3324 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-12-11 +date: 2023-12-12 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 e22d9077755cf..88400e8460137 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-12-11 +date: 2023-12-12 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 4a76833fa4711..eb369dd29489d 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index b8ef390746de3..baf5a08612c64 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 40d4e460f1dd8..aa71136564b9f 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.devdocs.json b/api_docs/observability_log_explorer.devdocs.json index cbf4d68df4200..d53269feabf30 100644 --- a/api_docs/observability_log_explorer.devdocs.json +++ b/api_docs/observability_log_explorer.devdocs.json @@ -283,7 +283,41 @@ "initialIsOpen": false } ], - "functions": [], + "functions": [ + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.deepCompactObject", + "type": "Function", + "tags": [], + "label": "deepCompactObject", + "description": [], + "signature": [ + ">(obj: Value) => Value" + ], + "path": "x-pack/plugins/observability_log_explorer/common/utils/deep_compact_object.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.deepCompactObject.$1", + "type": "Uncategorized", + "tags": [], + "label": "obj", + "description": [], + "signature": [ + "Value" + ], + "path": "x-pack/plugins/observability_log_explorer/common/utils/deep_compact_object.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], "interfaces": [ { "parentPluginId": "observabilityLogExplorer", @@ -359,7 +393,23 @@ } ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.OBSERVABILITY_LOG_EXPLORER_URL_STATE_KEY", + "type": "string", + "tags": [], + "label": "OBSERVABILITY_LOG_EXPLORER_URL_STATE_KEY", + "description": [], + "signature": [ + "\"pageState\"" + ], + "path": "x-pack/plugins/observability_log_explorer/common/url_schema/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [] } } \ No newline at end of file diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 6db9d51e1a8c6..0a083e1df4dff 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; @@ -21,13 +21,19 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 15 | 0 | 15 | 1 | +| 18 | 0 | 18 | 1 | ## Common +### Functions + + ### Classes ### Interfaces +### Consts, variables and types + + diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 965dbb7137f89..e092153ffaa9a 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index b79661c5ebcaf..67f86e79f8b59 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index a5d5578c2247a..8726d34530569 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-12-11 +date: 2023-12-12 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 8fdf7d78e6bfd..1ffafc171a826 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-12-11 +date: 2023-12-12 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 e2167d33acedf..dc96c61bd5286 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 77579 | 235 | 66304 | 1624 | +| 77645 | 235 | 66370 | 1632 | ## Plugin Directory @@ -58,7 +58,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 109 | 0 | 106 | 11 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3190 | 31 | 2539 | 22 | +| | [@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. | 3188 | 31 | 2537 | 22 | | | [@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 | @@ -126,7 +126,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 57 | 0 | 57 | 6 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 224 | 0 | 96 | 51 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 26 | 0 | 26 | 8 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 83 | 0 | 83 | 16 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 289 | 11 | 274 | 27 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 45 | 7 | @@ -143,7 +143,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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) | - | 599 | 2 | 590 | 17 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 91 | 0 | 86 | 12 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 15 | 0 | 15 | 1 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 18 | 0 | 18 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 307 | 1 | 303 | 15 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | @@ -435,7 +435,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 5 | 0 | 5 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 3 | 0 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 29 | 0 | 19 | 0 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 31 | 0 | 21 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 8 | 0 | 8 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | @@ -458,7 +458,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 48 | 0 | 33 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 261 | 1 | 201 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 266 | 1 | 206 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 39 | 0 | @@ -678,7 +678,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 24 | 0 | 14 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 154 | 0 | 151 | 3 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 12 | 0 | 12 | 0 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 13 | 0 | 13 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 2 | 0 | | | [@elastic/security-detection-rule-management](https://github.com/orgs/elastic/teams/security-detection-rule-management) | - | 18 | 0 | 9 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 84db823d8b410..b87a4261273b0 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index ab91c77a5f3e1..38e0290ab3d53 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index f2d9388bfdd69..b967b28840ff6 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-12-11 +date: 2023-12-12 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 311105e33ccad..270da85d20152 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-12-11 +date: 2023-12-12 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 b7c936d92db50..a253ab3c4f5d3 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-12-11 +date: 2023-12-12 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 9d0104f711930..a5692455eb0da 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-12-11 +date: 2023-12-12 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 00d01dbbcb1d5..27a07ef1a1bde 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-12-11 +date: 2023-12-12 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 e3d5877a75ff7..e4ab448202ea7 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-12-11 +date: 2023-12-12 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 00ce61aaf0d3c..31f02f28e964d 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-12-11 +date: 2023-12-12 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 7de11d87fe2d4..ae850aa22f7b4 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-12-11 +date: 2023-12-12 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 2850dcd4043f2..1e161cf113e76 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-12-11 +date: 2023-12-12 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 c4f25f05d3638..05c27d6b4ec69 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-12-11 +date: 2023-12-12 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 06e122d7e74bb..f8fb4cbb94228 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-12-11 +date: 2023-12-12 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 8fb1d45bcb78a..9e4b5009cdb04 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-12-11 +date: 2023-12-12 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 0c7f370e8ee8d..0967766e1373b 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-12-11 +date: 2023-12-12 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 b0fc480041a8c..78d682dded423 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 8718086f76318..19c5aed49e868 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 5e9d4708bf0f8..adc5cbf7a813e 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 2f41e970bcc06..cb06973b86516 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-12-11 +date: 2023-12-12 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 059c5b0e08d95..25f0cb0540462 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-12-11 +date: 2023-12-12 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 3ebb1c51a3adf..c617f6b7995d9 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-12-11 +date: 2023-12-12 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 26d3bbf861a86..abdd7bd77e71a 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-12-11 +date: 2023-12-12 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 0812649be766d..588c0695d512a 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 70e3015ba0d29..c2a43855d4a90 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 7653f6793b16c..9705679dcc486 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index ab876c54aa411..2f7ec94ad9ae8 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-12-11 +date: 2023-12-12 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 dc4cd24f78cb1..d940ab171c7cb 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-12-11 +date: 2023-12-12 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 6d9559c132603..0f9dff40f0535 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-12-11 +date: 2023-12-12 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 35be2dfa0d4da..c1a11e161c61b 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-12-11 +date: 2023-12-12 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 71ef45aec4e47..9998f4168ffaa 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-12-11 +date: 2023-12-12 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 6a854b9d5066b..f525144a06e31 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-12-11 +date: 2023-12-12 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 d7536274dbabf..d581904745312 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-12-11 +date: 2023-12-12 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 42cf726a16d44..583ccd42f2f10 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-12-11 +date: 2023-12-12 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 fb67a4c3b30ac..9835cac4f487f 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-12-11 +date: 2023-12-12 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 06967a3245739..a3dba771e1c0f 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-12-11 +date: 2023-12-12 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 8abedf84ca010..a62d7936ee287 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-12-11 +date: 2023-12-12 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 8baa72ed91c03..15e0d1e44b1f5 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-12-11 +date: 2023-12-12 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 266d27237a545..4022dd9cac77c 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index cab22e4fc8e62..1d0bb9d20abb0 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index bc893a7f3a78f..8f969282e3b87 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-12-11 +date: 2023-12-12 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 4b0bc32b7b8a8..58cea0ec01e3f 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-12-11 +date: 2023-12-12 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 679ac3766fe59..7fb4f2d099c2d 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 39be26ae66418..b847573385d24 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 4ab716839f3ff..2ffc63097eed0 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-12-11 +date: 2023-12-12 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 6f4996358a392..822281e69b874 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-12-11 +date: 2023-12-12 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 e0f570d86e3ca..9793e67790295 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-12-11 +date: 2023-12-12 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 afbcc6c5b1920..28c70be8b2d5e 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-12-11 +date: 2023-12-12 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 bf63166ab506f..9c6e6f5ccd920 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-12-11 +date: 2023-12-12 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 29496537414cb..7bd6280c4f677 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-12-11 +date: 2023-12-12 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 08468c5a5b0f4..2f711a2750005 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-12-11 +date: 2023-12-12 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 a1963bf0cceba..23cd7ac542130 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-12-11 +date: 2023-12-12 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 288dd8ede204f..c52738a68c773 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-12-11 +date: 2023-12-12 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 68554bfad6143..1d6ce54d0762b 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-12-11 +date: 2023-12-12 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 3caed81673a09..da2009b3d06d8 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-12-11 +date: 2023-12-12 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 03d616d4b0bb3..b8993f1e2abad 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-12-11 +date: 2023-12-12 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 13bfa4c8dd6ab..24ab468403b68 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-12-11 +date: 2023-12-12 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 13d41ea7d9d80..7fac6e9964c34 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-12-11 +date: 2023-12-12 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 f53af6c62c45b..cfd6e62dde05b 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-12-11 +date: 2023-12-12 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 f06284e15001d..37771240973ff 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-12-11 +date: 2023-12-12 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 afb31e9580446..a3d45a2b139d9 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -6718,49 +6718,7 @@ "section": "def-common.OverlayRef", "text": "OverlayRef" }, - " | undefined; render: (domNode: HTMLElement) => Promise; getFilters: () => Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[]>; reportsEmbeddableLoad: () => boolean; getVis: () => ", - { - "pluginId": "visualizations", - "scope": "public", - "docId": "kibVisualizationsPluginApi", - "section": "def-public.Vis", - "text": "Vis" - }, - "<", - { - "pluginId": "visualizations", - "scope": "common", - "docId": "kibVisualizationsPluginApi", - "section": "def-common.VisParams", - "text": "VisParams" - }, - ">; getInspectorAdapters: () => ", - { - "pluginId": "inspector", - "scope": "common", - "docId": "kibInspectorPluginApi", - "section": "def-common.Adapters", - "text": "Adapters" - }, - " | undefined; transferCustomizationsToUiState: () => void; hasInspector: () => boolean; onContainerLoading: () => void; onContainerData: () => void; onContainerRender: () => void; onContainerError: (error: ", - { - "pluginId": "expressions", - "scope": "public", - "docId": "kibExpressionsPluginApi", - "section": "def-public.ExpressionRenderError", - "text": "ExpressionRenderError" - }, - ") => void; reload: () => Promise; supportedTriggers: () => string[]; getExpressionVariables$: () => ", - "Observable", - " | undefined>; getExpressionVariables: () => Record | undefined; inputIsRefType: (input: ", + " | undefined; render: (domNode: HTMLElement) => Promise; readonly isContainer: boolean; reload: () => Promise; getExplicitInputIsEqual: (lastExplicitInput: Partial<", { "pluginId": "visualizations", "scope": "public", @@ -6768,13 +6726,7 @@ "section": "def-public.VisualizeInput", "text": "VisualizeInput" }, - ") => input is ", - "VisualizeByReferenceInput", - "; getInputAsValueType: () => Promise<", - "VisualizeByValueInput", - ">; getInputAsRefType: () => Promise<", - "VisualizeByReferenceInput", - ">; readonly runtimeId: number; readonly isContainer: boolean; readonly deferEmbeddableLoad: boolean; catchError?: ((error: ", + ">) => Promise; readonly runtimeId: number; readonly deferEmbeddableLoad: boolean; catchError?: ((error: ", { "pluginId": "expressions", "scope": "common", @@ -6790,7 +6742,7 @@ "section": "def-public.EmbeddableAppContext", "text": "EmbeddableAppContext" }, - " | undefined; refreshInputFromParent: () => void; getIsContainer: () => this is ", + " | undefined; reportsEmbeddableLoad: () => boolean; refreshInputFromParent: () => void; getIsContainer: () => this is ", { "pluginId": "embeddable", "scope": "public", @@ -6842,15 +6794,7 @@ "VisualizeOutput", ">>; getOutput: () => Readonly<", "VisualizeOutput", - ">; getExplicitInputIsEqual: (lastExplicitInput: Partial<", - { - "pluginId": "visualizations", - "scope": "public", - "docId": "kibVisualizationsPluginApi", - "section": "def-public.VisualizeInput", - "text": "VisualizeInput" - }, - ">) => Promise; getPersistableInput: () => ", + ">; getPersistableInput: () => ", { "pluginId": "visualizations", "scope": "public", @@ -6922,9 +6866,65 @@ "section": "def-public.VisualizeInput", "text": "VisualizeInput" }, - ">) => void; updateOutput: (outputChanges: Partial<", + ">) => void; getInspectorAdapters: () => ", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + " | undefined; updateOutput: (outputChanges: Partial<", "VisualizeOutput", - ">) => void; }" + ">) => void; supportedTriggers: () => string[]; getFilters: () => Promise<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[]>; getVis: () => ", + { + "pluginId": "visualizations", + "scope": "public", + "docId": "kibVisualizationsPluginApi", + "section": "def-public.Vis", + "text": "Vis" + }, + "<", + { + "pluginId": "visualizations", + "scope": "common", + "docId": "kibVisualizationsPluginApi", + "section": "def-common.VisParams", + "text": "VisParams" + }, + ">; transferCustomizationsToUiState: () => void; hasInspector: () => boolean; onContainerLoading: () => void; onContainerData: () => void; onContainerRender: () => void; onContainerError: (error: ", + { + "pluginId": "expressions", + "scope": "public", + "docId": "kibExpressionsPluginApi", + "section": "def-public.ExpressionRenderError", + "text": "ExpressionRenderError" + }, + ") => void; getExpressionVariables$: () => ", + "Observable", + " | undefined>; getExpressionVariables: () => Record | undefined; inputIsRefType: (input: ", + { + "pluginId": "visualizations", + "scope": "public", + "docId": "kibVisualizationsPluginApi", + "section": "def-public.VisualizeInput", + "text": "VisualizeInput" + }, + ") => input is ", + "VisualizeByReferenceInput", + "; getInputAsValueType: () => Promise<", + "VisualizeByValueInput", + ">; getInputAsRefType: () => Promise<", + "VisualizeByReferenceInput", + ">; }" ], "path": "src/plugins/visualizations/public/index.ts", "deprecated": false, @@ -8585,14 +8585,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/visualizations/common/expression_functions/range.ts", @@ -14644,14 +14636,6 @@ "section": "def-common.Adapters", "text": "Adapters" }, - ", ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, ">>" ], "path": "src/plugins/visualizations/common/expression_functions/vis_dimension.ts", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index d363195b1d1bc..e155644ee2e1e 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-12-11 +date: 2023-12-12 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From a0631cf8bd0ce820c1a3768f02e8384afc922b27 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Tue, 12 Dec 2023 10:14:57 +0100 Subject: [PATCH 26/39] [Security Solution] Exceptions flyout refreshes when it regains focus, causing configured fields to get cleared (#166550) (#172666) ## Summary Addresses https://github.com/elastic/kibana/issues/166550 These changes fix the issue where user can experience data loss while adding rule exceptions. The main issue is that we keep conditions state inside the child component `ExceptionsConditions` which is rendered conditionally based on `isLoading` flag. This flag changes when `useQuery` data gets stale and refetching is triggered. In this case we would remove `ExceptionsConditions` component while loading data and re-create it after. Since conditions state stored inside `ExceptionsConditions` we will lose it. This is a quick fix to make sure our users are not frustrated. The state refactoring will come separately in the next release when we are going to address the main issue https://github.com/elastic/security-team/issues/8197 To reproduce: 1. Open "add rule exception" flyout 2. Add exception conditions 3. Wait for 5 minutes (to avoid waiting this long you can use [this approach](https://github.com/elastic/kibana/issues/166550#issuecomment-1802941467)) 4. Remove focus from the page (by switching to another app or navigating to a different tab in a browser) 5. Focus on the page again When you are back to the page all exception conditions should still be there. --------- Co-authored-by: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> --- .../components/add_exception_flyout/index.tsx | 200 +++++++++--------- .../edit_exception_flyout/index.tsx | 2 +- 2 files changed, 104 insertions(+), 98 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx index 9eefb96be62c9..1533e3d0a2a56 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx @@ -500,106 +500,112 @@ export const AddExceptionFlyout = memo(function AddExceptionFlyout({ - - - {errorSubmitting != null && ( - <> - } + {errorSubmitting != null && ( + <> + + {i18n.SUBMIT_ERROR_DISMISS_MESSAGE} + + - {i18n.SUBMIT_ERROR_DISMISS_MESSAGE} - - - {i18n.SUBMIT_ERROR_DISMISS_BUTTON} - - - - - )} - - - - - {listType !== ExceptionListTypeEnum.ENDPOINT && !sharedListToAddTo?.length && ( - <> - - - - )} - - -

{i18n.COMMENTS_SECTION_TITLE(newComment ? 1 : 0)}

- - } - initialIsOpen={!!newComment} - newCommentValue={newComment} - newCommentOnChange={setComment} - setCommentError={setCommentError} - /> - {listType !== ExceptionListTypeEnum.ENDPOINT && ( - <> - - - - )} - {showAlertCloseOptions && ( - <> - - - - )} -
+ {i18n.SUBMIT_ERROR_DISMISS_BUTTON} + + + + + )} + + + + + {listType !== ExceptionListTypeEnum.ENDPOINT && !sharedListToAddTo?.length && ( + <> + + + + )} + + +

{i18n.COMMENTS_SECTION_TITLE(newComment ? 1 : 0)}

+ + } + initialIsOpen={!!newComment} + newCommentValue={newComment} + newCommentOnChange={setComment} + setCommentError={setCommentError} + /> + {listType !== ExceptionListTypeEnum.ENDPOINT && ( + <> + + + + )} + {showAlertCloseOptions && ( + <> + + + + )}
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/edit_exception_flyout/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/edit_exception_flyout/index.tsx index 6d2526cdbf239..8c27b5da22450 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/edit_exception_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/edit_exception_flyout/index.tsx @@ -370,8 +370,8 @@ const EditExceptionFlyoutComponent: React.FC = ({ - {isLoading && } + {isLoading && } Date: Tue, 12 Dec 2023 10:23:24 +0100 Subject: [PATCH 27/39] [Lens] Various fixes for Heatmap (#172602) ## Summary Fixes #172433 Fixes #172574 Fixes #170240 For #172433 the bands values are now passing thru the value formatter to match users' expectations: Screenshot 2023-12-05 at 16 52 39 When the default formatter is selected something complex happens there, which might look wrong but it is still respecting Kibana's advanced settings formatter pattern (in this example `0.[000]`): Screenshot 2023-12-05 at 16 52 57 As for #170240 the problem was due to an unnecessary safe guard which was forcing the first bucket to be `1` when it was open: Screenshot 2023-12-05 at 16 52 11 As for #172574 I just fixed at root level the problem... ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../buttons/toolbar_button/toolbar_button.tsx | 4 +- .../components/heatmap_component.test.tsx | 57 +++++++++ .../public/components/heatmap_component.tsx | 12 +- .../functional/apps/lens/group4/chart_data.ts | 38 +++--- .../test/functional/apps/lens/group4/tsdb.ts | 34 +++--- .../functional/apps/lens/group5/heatmap.ts | 108 +++++++++--------- .../lens/open_in_lens/agg_based/heatmap.ts | 70 +++--------- .../test/functional/page_objects/lens_page.ts | 5 +- .../group2/open_in_lens/agg_based/heatmap.ts | 36 +----- 9 files changed, 172 insertions(+), 192 deletions(-) diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx b/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx index 84039857d0891..1e005d110e6cf 100644 --- a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx +++ b/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx @@ -23,7 +23,7 @@ type ButtonRenderStyle = 'standard' | 'iconButton'; interface ToolbarButtonCommonProps extends Pick< EuiButtonPropsForButton, - 'onClick' | 'iconType' | 'size' | 'data-test-subj' | 'isDisabled' + 'onClick' | 'iconType' | 'size' | 'data-test-subj' | 'isDisabled' | 'aria-label' > { /** * Render style of the toolbar button @@ -162,7 +162,7 @@ const ToolbarIconButton = ({ { + const newData: Datatable = { + type: 'datatable', + rows: [{ 'col-0-1': -3 }], + columns: [{ id: 'col-0-1', name: 'Count', meta: { type: 'number' } }], + }; + const newProps = { + ...wrapperProps, + data: newData, + args: { + ...wrapperProps.args, + palette: { + params: { + colors: ['#6092c0', '#a8bfda', '#ebeff5', '#ecb385', '#e7664c'], + stops: [1, 2, 3, 4, 5], + range: 'number', + gradient: true, + continuity: 'above', + rangeMin: -Infinity, + rangeMax: null, + }, + }, + }, + } as unknown as HeatmapRenderProps; + const component = mountWithIntl(); + expect(component.find(Heatmap).prop('colorScale')).toEqual({ + bands: [ + { + start: -Infinity, + end: 1, + color: '#6092c0', + }, + { + start: 1, + end: 2, + color: '#a8bfda', + }, + { + start: 2, + end: 3, + color: '#ebeff5', + }, + { + start: 3, + end: 4, + color: '#ecb385', + }, + { + start: 4, + end: Infinity, + color: '#e7664c', + }, + ], + type: 'bands', + }); + }); + it('renders the axis titles', () => { const component = shallowWithIntl(); expect(component.find(Heatmap).prop('xAxisTitle')).toEqual('Dest'); diff --git a/src/plugins/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx b/src/plugins/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx index f0794318e6001..e541918801b59 100644 --- a/src/plugins/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx +++ b/src/plugins/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx @@ -97,11 +97,7 @@ function shiftAndNormalizeStops( if (params.range === 'percent') { result = min + ((max - min) * value) / 100; } - // a division by zero safeguard - if (!Number.isFinite(result)) { - return 1; - } - return Number(result.toFixed(2)); + return result; } ); } @@ -515,11 +511,9 @@ export const HeatmapComponent: FC = memo( let overwriteArrayIdx; if (endValue === Number.POSITIVE_INFINITY) { - overwriteArrayIdx = `≥ ${metricFormatter.convert(startValue)}`; + overwriteArrayIdx = `≥ ${valueFormatter(startValue)}`; } else { - overwriteArrayIdx = `${metricFormatter.convert(start)} - ${metricFormatter.convert( - endValue - )}`; + overwriteArrayIdx = `${valueFormatter(start)} - ${valueFormatter(endValue)}`; } const overwriteColor = overwriteColors?.[overwriteArrayIdx]; diff --git a/x-pack/test/functional/apps/lens/group4/chart_data.ts b/x-pack/test/functional/apps/lens/group4/chart_data.ts index 9bcd237306920..9d43abd4ac650 100644 --- a/x-pack/test/functional/apps/lens/group4/chart_data.ts +++ b/x-pack/test/functional/apps/lens/group4/chart_data.ts @@ -52,19 +52,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { name: '__other__', value: 5722.77 }, ]; - function assertMatchesExpectedData(state: DebugState) { + function assertMatchesExpectedData(state: DebugState | undefined) { expect( - state.bars![0].bars.map((bar) => ({ + state?.bars![0].bars.map((bar) => ({ x: bar.x, y: Math.floor(bar.y * 100) / 100, })) ).to.eql(expectedData); } - function assertMatchesExpectedPieData(state: DebugState) { + function assertMatchesExpectedPieData(state: DebugState | undefined) { expect( state - .partition![0].partitions.map((partition) => ({ + ?.partition![0].partitions.map((partition) => ({ name: partition.name, value: Math.floor(partition.value * 100) / 100, })) @@ -74,37 +74,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should render xy chart', async () => { const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - assertMatchesExpectedData(data!); + assertMatchesExpectedData(data); }); it('should render pie chart', async () => { await PageObjects.lens.switchToVisualization('pie'); const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); - assertMatchesExpectedPieData(data!); + assertMatchesExpectedPieData(data); }); it('should render donut chart', async () => { await PageObjects.lens.switchToVisualization('donut'); const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); - assertMatchesExpectedPieData(data!); + assertMatchesExpectedPieData(data); }); it('should render treemap chart', async () => { await PageObjects.lens.switchToVisualization('treemap', 'treemap'); const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); - assertMatchesExpectedPieData(data!); + assertMatchesExpectedPieData(data); }); it('should render heatmap chart', async () => { await PageObjects.lens.switchToVisualization('heatmap', 'heat'); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert axes - expect(debugState.axes!.x[0].labels).to.eql([ + expect(debugState?.axes!.x[0].labels).to.eql([ '97.220.3.248', '169.228.188.120', '78.83.247.30', @@ -112,18 +108,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '93.28.27.24', 'Other', ]); - expect(debugState.axes!.y[0].labels).to.eql(['']); + expect(debugState?.axes!.y[0].labels).to.eql(['']); // assert cells - expect(debugState.heatmap!.cells.length).to.eql(6); + expect(debugState?.heatmap!.cells.length).to.eql(6); // assert legend - expect(debugState.legend!.items).to.eql([ - { color: '#6092c0', key: '5,722.77 - 8,529.22', name: '5,722.77 - 8,529.22' }, - { color: '#a8bfda', key: '8,529.22 - 11,335.66', name: '8,529.22 - 11,335.66' }, - { color: '#ebeff5', key: '11,335.66 - 14,142.11', name: '11,335.66 - 14,142.11' }, - { color: '#ecb385', key: '14,142.11 - 16,948.55', name: '14,142.11 - 16,948.55' }, - { color: '#e7664c', key: '≥ 16,948.55', name: '≥ 16,948.55' }, + expect(debugState?.legend!.items).to.eql([ + { key: '5,722.775 - 8,529.22', name: '5,722.775 - 8,529.22', color: '#6092c0' }, + { key: '8,529.22 - 11,335.665', name: '8,529.22 - 11,335.665', color: '#a8bfda' }, + { key: '11,335.665 - 14,142.11', name: '11,335.665 - 14,142.11', color: '#ebeff5' }, + { key: '14,142.11 - 16,948.555', name: '14,142.11 - 16,948.555', color: '#ecb385' }, + { key: '≥ 16,948.555', name: '≥ 16,948.555', color: '#e7664c' }, ]); }); diff --git a/x-pack/test/functional/apps/lens/group4/tsdb.ts b/x-pack/test/functional/apps/lens/group4/tsdb.ts index 745592a02cb1d..730318f33db97 100644 --- a/x-pack/test/functional/apps/lens/group4/tsdb.ts +++ b/x-pack/test/functional/apps/lens/group4/tsdb.ts @@ -224,13 +224,13 @@ function getDataMapping( return dataStreamMapping; } -function sumFirstNValues(n: number, bars: Array<{ y: number }>): number { +function sumFirstNValues(n: number, bars: Array<{ y: number }> | undefined): number { const indexes = Array(n) .fill(1) .map((_, i) => i); let countSum = 0; for (const index of indexes) { - if (bars[index]) { + if (bars?.[index]) { countSum += bars[index].y; } } @@ -816,29 +816,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.waitForVisualization('xyVisChart'); const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - const counterBars = data.bars![0].bars; - const countBars = data.bars![1].bars; + const counterBars = data?.bars![0].bars; + const countBars = data?.bars![1].bars; log.info('Check counter data before the upgrade'); // check there's some data before the upgrade - expect(counterBars[0].y).to.eql(5000); + expect(counterBars?.[0].y).to.eql(5000); log.info('Check counter data after the upgrade'); // check there's some data after the upgrade - expect(counterBars[counterBars.length - 1].y).to.eql(5000); + expect(counterBars?.[counterBars.length - 1].y).to.eql(5000); // due to the flaky nature of exact check here, we're going to relax it // as long as there's data before and after it is ok log.info('Check count before the upgrade'); - const columnsToCheck = countBars.length / 2; + const columnsToCheck = countBars ? countBars.length / 2 : 0; // Before the upgrade the count is N times the indexes expect(sumFirstNValues(columnsToCheck, countBars)).to.be.greaterThan( indexes.length * TEST_DOC_COUNT - 1 ); log.info('Check count after the upgrade'); // later there are only documents for the upgraded stream - expect(sumFirstNValues(columnsToCheck, [...countBars].reverse())).to.be.greaterThan( - TEST_DOC_COUNT - 1 - ); + expect( + sumFirstNValues(columnsToCheck, [...(countBars ?? [])].reverse()) + ).to.be.greaterThan(TEST_DOC_COUNT - 1); }); }); }); @@ -911,8 +911,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.waitForVisualization('xyVisChart'); const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - const bars = data.bars![0].bars; - const columnsToCheck = bars.length / 2; + const bars = data?.bars![0].bars; + const columnsToCheck = bars ? bars.length / 2 : 0; // due to the flaky nature of exact check here, we're going to relax it // as long as there's data before and after it is ok log.info('Check count before the downgrade'); @@ -922,7 +922,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); log.info('Check count after the downgrade'); // later there are only documents for the upgraded stream - expect(sumFirstNValues(columnsToCheck, [...bars].reverse())).to.be.greaterThan( + expect(sumFirstNValues(columnsToCheck, [...(bars ?? [])].reverse())).to.be.greaterThan( TEST_DOC_COUNT - 1 ); }); @@ -952,8 +952,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.waitForVisualization('xyVisChart'); const dataBefore = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - const barsBefore = dataBefore.bars![0].bars; - expect(barsBefore.some(({ y }) => y)).to.eql(true); + const barsBefore = dataBefore?.bars![0].bars; + expect(barsBefore?.some(({ y }) => y)).to.eql(true); // check after the downgrade await PageObjects.lens.goToTimeRange( @@ -969,8 +969,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.waitForVisualization('xyVisChart'); const dataAfter = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - const barsAfter = dataAfter.bars![0].bars; - expect(barsAfter.some(({ y }) => y)).to.eql(true); + const barsAfter = dataAfter?.bars![0].bars; + expect(barsAfter?.some(({ y }) => y)).to.eql(true); }); }); }); diff --git a/x-pack/test/functional/apps/lens/group5/heatmap.ts b/x-pack/test/functional/apps/lens/group5/heatmap.ts index 3e37ce65cc5bc..26e77578f4545 100644 --- a/x-pack/test/functional/apps/lens/group5/heatmap.ts +++ b/x-pack/test/functional/apps/lens/group5/heatmap.ts @@ -40,12 +40,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.switchToVisualization('heatmap', 'heat'); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert axes - expect(debugState.axes!.x[0].labels).to.eql([ + expect(debugState?.axes!.x[0].labels).to.eql([ '97.220.3.248', '169.228.188.120', '78.83.247.30', @@ -53,18 +49,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '93.28.27.24', 'Other', ]); - expect(debugState.axes!.y[0].labels).to.eql(['']); + expect(debugState?.axes!.y[0].labels).to.eql(['']); // assert cells - expect(debugState.heatmap!.cells.length).to.eql(6); + expect(debugState?.heatmap!.cells.length).to.eql(6); // assert legend - expect(debugState.legend!.items).to.eql([ - { key: '5,722.77 - 8,529.22', name: '5,722.77 - 8,529.22', color: '#6092c0' }, - { key: '8,529.22 - 11,335.66', name: '8,529.22 - 11,335.66', color: '#a8bfda' }, - { key: '11,335.66 - 14,142.11', name: '11,335.66 - 14,142.11', color: '#ebeff5' }, - { key: '14,142.11 - 16,948.55', name: '14,142.11 - 16,948.55', color: '#ecb385' }, - { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#e7664c' }, + expect(debugState?.legend!.items).to.eql([ + { key: '5,722.775 - 8,529.22', name: '5,722.775 - 8,529.22', color: '#6092c0' }, + { key: '8,529.22 - 11,335.665', name: '8,529.22 - 11,335.665', color: '#a8bfda' }, + { key: '11,335.665 - 14,142.11', name: '11,335.665 - 14,142.11', color: '#ebeff5' }, + { key: '14,142.11 - 16,948.555', name: '14,142.11 - 16,948.555', color: '#ecb385' }, + { key: '≥ 16,948.555', name: '≥ 16,948.555', color: '#e7664c' }, ]); }); @@ -80,17 +76,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert legend has changed - expect(debugState.legend!.items).to.eql([ - { key: '7,126 - 8,529.22', name: '7,126 - 8,529.22', color: '#6092c0' }, - { key: '8,529.22 - 11,335.66', name: '8,529.22 - 11,335.66', color: '#a8bfda' }, - { key: '11,335.66 - 14,142.11', name: '11,335.66 - 14,142.11', color: '#ebeff5' }, - { key: '14,142.11 - 16,948.55', name: '14,142.11 - 16,948.55', color: '#ecb385' }, - { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#e7664c' }, + expect(debugState?.legend!.items).to.eql([ + { key: '7,125.997 - 8,529.22', name: '7,125.997 - 8,529.22', color: '#6092c0' }, + { key: '8,529.22 - 11,335.665', name: '8,529.22 - 11,335.665', color: '#a8bfda' }, + { key: '11,335.665 - 14,142.11', name: '11,335.665 - 14,142.11', color: '#ebeff5' }, + { key: '14,142.11 - 16,948.555', name: '14,142.11 - 16,948.555', color: '#ecb385' }, + { key: '≥ 16,948.555', name: '≥ 16,948.555', color: '#e7664c' }, ]); }); @@ -98,12 +90,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_number'); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert legend has changed - expect(debugState.legend!.items).to.eql([ + expect(debugState?.legend!.items).to.eql([ { key: '7,125.99 - 8,529.2', name: '7,125.99 - 8,529.2', color: '#6092c0' }, { key: '8,529.2 - 11,335.66', name: '8,529.2 - 11,335.66', color: '#a8bfda' }, { key: '11,335.66 - 14,142.1', name: '11,335.66 - 14,142.1', color: '#ebeff5' }, @@ -123,12 +111,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert legend has changed - expect(debugState.legend!.items).to.eql([ + expect(debugState?.legend!.items).to.eql([ { key: '0 - 8,529.2', name: '0 - 8,529.2', color: '#6092c0' }, { key: '8,529.2 - 11,335.66', name: '8,529.2 - 11,335.66', color: '#a8bfda' }, { key: '11,335.66 - 14,142.1', name: '11,335.66 - 14,142.1', color: '#ebeff5' }, @@ -137,22 +121,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); }); + it('should reflect the apply stop value without rounding', async () => { + // target item is 5722.774804505345 + // so set a value slightly lower which can be rounded + await testSubjects.setValue('lnsPalettePanel_dynamicColoring_range_value_0', '5722.7747', { + clearWithKeyboard: true, + }); + const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + + // assert legend has a rounded value + expect(debugState?.legend!.items).to.eql([ + { key: '5,722.775 - 8,529.2', name: '5,722.775 - 8,529.2', color: '#6092c0' }, + { key: '8,529.2 - 11,335.66', name: '8,529.2 - 11,335.66', color: '#a8bfda' }, + { key: '11,335.66 - 14,142.1', name: '11,335.66 - 14,142.1', color: '#ebeff5' }, + { key: '14,142.1 - 16,948.55', name: '14,142.1 - 16,948.55', color: '#ecb385' }, + { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#e7664c' }, + ]); + // assert the cell has the correct coloring despite the legend rounding + expect(debugState?.heatmap!.cells[debugState.heatmap!.cells.length - 1].fill).to.be( + 'rgba(96, 146, 192, 1)' // rgba version of #6092c0 + ); + }); + it('should reset stop numbers when changing palette', async () => { await PageObjects.lens.changePaletteTo('status'); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert legend has changed - expect(debugState.legend!.items).to.eql([ - { key: '5,722.77 - 8,529.22', name: '5,722.77 - 8,529.22', color: '#209280' }, - { key: '8,529.22 - 11,335.66', name: '8,529.22 - 11,335.66', color: '#54b399' }, - { key: '11,335.66 - 14,142.11', name: '11,335.66 - 14,142.11', color: '#d6bf57' }, - { key: '14,142.11 - 16,948.55', name: '14,142.11 - 16,948.55', color: '#e7664c' }, - { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#cc5642' }, + expect(debugState?.legend!.items).to.eql([ + { key: '5,722.775 - 8,529.22', name: '5,722.775 - 8,529.22', color: '#209280' }, + { key: '8,529.22 - 11,335.665', name: '8,529.22 - 11,335.665', color: '#54b399' }, + { key: '11,335.665 - 14,142.11', name: '11,335.665 - 14,142.11', color: '#d6bf57' }, + { key: '14,142.11 - 16,948.555', name: '14,142.11 - 16,948.555', color: '#e7664c' }, + { key: '≥ 16,948.555', name: '≥ 16,948.555', color: '#cc5642' }, ]); }); @@ -161,17 +163,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert legend has not changed - expect(debugState.legend!.items).to.eql([ - { key: '5,722.77 - 8,529.22', name: '5,722.77 - 8,529.22', color: '#209280' }, - { key: '8,529.22 - 11,335.66', name: '8,529.22 - 11,335.66', color: '#54b399' }, - { key: '11,335.66 - 14,142.11', name: '11,335.66 - 14,142.11', color: '#d6bf57' }, - { key: '14,142.11 - 16,948.55', name: '14,142.11 - 16,948.55', color: '#e7664c' }, - { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#cc5642' }, + expect(debugState?.legend!.items).to.eql([ + { key: '5,722.775 - 8,529.22', name: '5,722.775 - 8,529.22', color: '#209280' }, + { key: '8,529.22 - 11,335.665', name: '8,529.22 - 11,335.665', color: '#54b399' }, + { key: '11,335.665 - 14,142.11', name: '11,335.665 - 14,142.11', color: '#d6bf57' }, + { key: '14,142.11 - 16,948.555', name: '14,142.11 - 16,948.555', color: '#e7664c' }, + { key: '≥ 16,948.555', name: '≥ 16,948.555', color: '#cc5642' }, ]); }); @@ -183,9 +181,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.selectValue('lnsLeftAxisTitle-select', 'Auto'); const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } + expect(debugState?.axes?.y?.[0].title).to.eql('Average of bytes'); }); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts index ad4b1e123b554..f812b741bd440 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts @@ -56,15 +56,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - // assert axes - expect(debugState.axes!.x[0].labels).to.eql(['win 8', 'win xp', 'win 7', 'ios', 'osx']); - expect(debugState.axes!.y[0].labels).to.eql(['']); - expect(debugState.heatmap!.cells.length).to.eql(5); - expect(debugState.legend!.items).to.eql([ + expect(debugState?.axes!.x[0].labels).to.eql(['win 8', 'win xp', 'win 7', 'ios', 'osx']); + expect(debugState?.axes!.y[0].labels).to.eql(['']); + expect(debugState?.heatmap!.cells.length).to.eql(5); + expect(debugState?.legend!.items).to.eql([ { color: '#006837', key: '1,322 - 1,717.5', @@ -94,13 +90,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - - expect(debugState.axes!.x[0].labels).to.eql(['*']); - expect(debugState.axes!.y[0].labels).to.eql(['win 8', 'win xp', 'win 7', 'ios', 'osx']); - expect(debugState.heatmap!.cells.length).to.eql(5); + expect(debugState?.axes!.x[0].labels).to.eql(['*']); + expect(debugState?.axes!.y[0].labels).to.eql(['win 8', 'win xp', 'win 7', 'ios', 'osx']); + expect(debugState?.heatmap!.cells.length).to.eql(5); }); it('should respect heatmap colors number', async () => { @@ -118,41 +110,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - - expect(debugState.legend!.items).to.eql([ - { - color: '#006837', - key: '1,322 - 1,585.67', - name: '1,322 - 1,585.67', - }, - { - color: '#4CB15D', - key: '1,585.67 - 1,849.33', - name: '1,585.67 - 1,849.33', - }, - { - color: '#B7E075', - key: '1,849.33 - 2,113', - name: '1,849.33 - 2,113', - }, - { - color: '#FEFEBD', - key: '2,113 - 2,376.67', - name: '2,113 - 2,376.67', - }, - { - color: '#FDBF6F', - key: '2,376.67 - 2,640.33', - name: '2,376.67 - 2,640.33', - }, - { - color: '#EA5839', - key: '2,640.33 - 2,904', - name: '2,640.33 - 2,904', - }, + expect(debugState?.legend!.items).to.eql([ + { key: '1,322 - 1,585.667', name: '1,322 - 1,585.667', color: '#006837' }, + { key: '1,585.667 - 1,849.333', name: '1,585.667 - 1,849.333', color: '#4CB15D' }, + { key: '1,849.333 - 2,113', name: '1,849.333 - 2,113', color: '#B7E075' }, + { key: '2,113 - 2,376.667', name: '2,113 - 2,376.667', color: '#FEFEBD' }, + { key: '2,376.667 - 2,640.333', name: '2,376.667 - 2,640.333', color: '#FDBF6F' }, + { key: '2,640.333 - 2,904', name: '2,640.333 - 2,904', color: '#EA5839' }, ]); }); @@ -178,11 +142,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); - if (!debugState) { - throw new Error('Debug state is not available'); - } - - expect(debugState.legend!.items).to.eql([ + expect(debugState?.legend!.items).to.eql([ { color: '#006837', key: '0 - 100', diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index a08b582d98f12..5c7eef4cb9263 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -8,6 +8,7 @@ import expect from '@kbn/expect'; import { setTimeout as setTimeoutAsync } from 'timers/promises'; import type { FittingFunction, XYCurveType } from '@kbn/lens-plugin/public'; +import { DebugState } from '@elastic/charts'; import { WebElementWrapper } from '../../../../test/functional/services/lib/web_element_wrapper'; import { FtrProviderContext } from '../ftr_provider_context'; import { logWrapper } from './log_wrapper'; @@ -1093,9 +1094,9 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont ); }, - async getCurrentChartDebugState(visType: string) { + async getCurrentChartDebugState(visType: string): Promise { await this.waitForVisualization(visType); - return await elasticChart.getChartDebugData('lnsWorkspace'); + return (await elasticChart.getChartDebugData('lnsWorkspace'))!; }, /** diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts index f1c362838d77e..6e486d6d34e5d 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts @@ -102,36 +102,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(debugState).to.not.be.eql(null); expect(debugState.legend!.items).to.eql([ - { - color: '#006837', - key: '1,322 - 1,585.67', - name: '1,322 - 1,585.67', - }, - { - color: '#4CB15D', - key: '1,585.67 - 1,849.33', - name: '1,585.67 - 1,849.33', - }, - { - color: '#B7E075', - key: '1,849.33 - 2,113', - name: '1,849.33 - 2,113', - }, - { - color: '#FEFEBD', - key: '2,113 - 2,376.67', - name: '2,113 - 2,376.67', - }, - { - color: '#FDBF6F', - key: '2,376.67 - 2,640.33', - name: '2,376.67 - 2,640.33', - }, - { - color: '#EA5839', - key: '2,640.33 - 2,904', - name: '2,640.33 - 2,904', - }, + { key: '1,322 - 1,585.667', name: '1,322 - 1,585.667', color: '#006837' }, + { key: '1,585.667 - 1,849.333', name: '1,585.667 - 1,849.333', color: '#4CB15D' }, + { key: '1,849.333 - 2,113', name: '1,849.333 - 2,113', color: '#B7E075' }, + { key: '2,113 - 2,376.667', name: '2,113 - 2,376.667', color: '#FEFEBD' }, + { key: '2,376.667 - 2,640.333', name: '2,376.667 - 2,640.333', color: '#FDBF6F' }, + { key: '2,640.333 - 2,904', name: '2,640.333 - 2,904', color: '#EA5839' }, ]); }); From 48875f9cf72b475919f5dd7d26aa63886233f0e8 Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:07:53 +0530 Subject: [PATCH 28/39] Update design of warning status in rule details page (#173090) Resolves https://github.com/elastic/kibana/issues/172768 ### After update Screenshot 2023-12-11 at 23 17 26 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/pages/rule_details/helpers/get_health_color.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugins/observability/public/pages/rule_details/helpers/get_health_color.ts b/x-pack/plugins/observability/public/pages/rule_details/helpers/get_health_color.ts index 52aab86039a3c..32b81e6dd9263 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/helpers/get_health_color.ts +++ b/x-pack/plugins/observability/public/pages/rule_details/helpers/get_health_color.ts @@ -17,6 +17,8 @@ export function getHealthColor(status: RuleExecutionStatuses) { return 'primary'; case 'pending': return 'accent'; + case 'warning': + return 'warning'; default: return 'subdued'; } From c50f3d749ed9071bf4c0974ed4f71399627f088a Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 12 Dec 2023 10:59:41 +0100 Subject: [PATCH 29/39] [doclinks] propagate build flavor to `getDocLinks` (#172358) ## Summary Fix https://github.com/elastic/kibana/issues/167088 Add a new `buildFlavor` (`traditional` | `serverless`) parameter to `getDocLinks` and `getDocLinksMeta` so that the doc links generator logic can leverage the information --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/doc_links_service.test.ts | 7 ++++++- .../src/doc_links_service.ts | 8 ++++++-- .../core-doc-links-browser-internal/tsconfig.json | 2 ++ .../src/doc_links_service.mock.ts | 3 ++- .../core-doc-links-browser-mocks/tsconfig.json | 3 ++- .../src/doc_links_service.test.ts | 2 ++ .../src/doc_links_service.ts | 12 ++++++------ .../src/doc_links_service.mock.ts | 5 +++-- .../core-root-browser-internal/src/core_system.ts | 2 +- .../src/test_bed/test_kit.ts | 8 +++++--- packages/kbn-config/index.ts | 2 +- packages/kbn-config/src/config_service.ts | 5 ++++- packages/kbn-doc-links/src/get_doc_links.test.ts | 2 +- packages/kbn-doc-links/src/get_doc_links.ts | 7 ++++--- packages/kbn-doc-links/src/get_doc_meta.test.ts | 14 +++++++++----- packages/kbn-doc-links/src/get_doc_meta.ts | 8 ++++++-- packages/kbn-doc-links/src/types.ts | 2 ++ .../src/field_value_lists/index.tsx | 7 ++++++- .../migrations/kibana_migrator_test_kit.ts | 8 +++++--- .../saved_objects/migrations/test_utils.ts | 10 ++++++++-- .../rule_management/api/deprecation.ts | 3 ++- 21 files changed, 83 insertions(+), 37 deletions(-) diff --git a/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.test.ts b/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.test.ts index b30082e62c653..30e8188dd6af9 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.test.ts +++ b/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.test.ts @@ -7,11 +7,13 @@ */ import { getDocLinksMock, getDocLinksMetaMock } from './doc_links_service.test.mocks'; +import { coreContextMock } from '@kbn/core-base-browser-mocks'; import { DocLinksService } from './doc_links_service'; import { injectedMetadataServiceMock } from '@kbn/core-injected-metadata-browser-mocks'; describe('DocLinksService', () => { let injectedMetadata: ReturnType; + let coreContext: ReturnType; let service: DocLinksService; beforeEach(() => { @@ -26,7 +28,8 @@ describe('DocLinksService', () => { settings: 'http://settings.test.url', }); - service = new DocLinksService(); + coreContext = coreContextMock.create(); + service = new DocLinksService(coreContext); }); afterEach(() => { @@ -43,6 +46,7 @@ describe('DocLinksService', () => { expect(getDocLinksMetaMock).toHaveBeenCalledTimes(1); expect(getDocLinksMetaMock).toHaveBeenCalledWith({ kibanaBranch: 'test-branch', + buildFlavor: coreContext.env.packageInfo.buildFlavor, }); }); @@ -64,6 +68,7 @@ describe('DocLinksService', () => { expect(getDocLinksMock).toHaveBeenCalledTimes(1); expect(getDocLinksMock).toHaveBeenCalledWith({ kibanaBranch: 'test-branch', + buildFlavor: coreContext.env.packageInfo.buildFlavor, }); }); diff --git a/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.ts b/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.ts index 115d41e1ee930..a5d6fe17ddf63 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.ts +++ b/packages/core/doc-links/core-doc-links-browser-internal/src/doc_links_service.ts @@ -7,6 +7,7 @@ */ import { getDocLinks, getDocLinksMeta } from '@kbn/doc-links'; +import type { CoreContext } from '@kbn/core-base-browser-internal'; import type { InternalInjectedMetadataSetup } from '@kbn/core-injected-metadata-browser-internal'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; @@ -17,12 +18,15 @@ export interface DocLinksServiceStartDeps { /** @internal */ export class DocLinksService { + constructor(private readonly coreContext: CoreContext) {} + public setup() {} public start({ injectedMetadata }: DocLinksServiceStartDeps): DocLinksStart { const kibanaBranch = injectedMetadata.getKibanaBranch(); - const docMeta = getDocLinksMeta({ kibanaBranch }); - const docLinks = getDocLinks({ kibanaBranch }); + const buildFlavor = this.coreContext.env.packageInfo.buildFlavor; + const docMeta = getDocLinksMeta({ kibanaBranch, buildFlavor }); + const docLinks = getDocLinks({ kibanaBranch, buildFlavor }); return { DOC_LINK_VERSION: docMeta.version, diff --git a/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json b/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json index dda4c975120d7..45980da56c3da 100644 --- a/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-browser-internal/tsconfig.json @@ -15,6 +15,8 @@ "@kbn/core-injected-metadata-browser-internal", "@kbn/core-doc-links-browser", "@kbn/core-injected-metadata-browser-mocks", + "@kbn/core-base-browser-mocks", + "@kbn/core-base-browser-internal", ], "exclude": [ "target/**/*", diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/src/doc_links_service.mock.ts b/packages/core/doc-links/core-doc-links-browser-mocks/src/doc_links_service.mock.ts index 03c394aa926e8..ef62bd97eca19 100644 --- a/packages/core/doc-links/core-doc-links-browser-mocks/src/doc_links_service.mock.ts +++ b/packages/core/doc-links/core-doc-links-browser-mocks/src/doc_links_service.mock.ts @@ -7,6 +7,7 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; +import { coreContextMock } from '@kbn/core-base-browser-mocks'; import { injectedMetadataServiceMock } from '@kbn/core-injected-metadata-browser-mocks'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import { DocLinksService } from '@kbn/core-doc-links-browser-internal'; @@ -15,7 +16,7 @@ const createStartContractMock = (): DocLinksStart => { // This service is so simple that we actually use the real implementation const injectedMetadata = injectedMetadataServiceMock.createStartContract(); injectedMetadata.getKibanaBranch.mockReturnValue('mocked-test-branch'); - return new DocLinksService().start({ injectedMetadata }); + return new DocLinksService(coreContextMock.create()).start({ injectedMetadata }); }; type DocLinksServiceContract = PublicMethodsOf; diff --git a/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json b/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json index 473ae750e67ee..e60609b94a11b 100644 --- a/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json +++ b/packages/core/doc-links/core-doc-links-browser-mocks/tsconfig.json @@ -14,7 +14,8 @@ "@kbn/utility-types", "@kbn/core-injected-metadata-browser-mocks", "@kbn/core-doc-links-browser", - "@kbn/core-doc-links-browser-internal" + "@kbn/core-doc-links-browser-internal", + "@kbn/core-base-browser-mocks" ], "exclude": [ "target/**/*", diff --git a/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.test.ts b/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.test.ts index 6b7c7d3b33f3a..13c75fa0f6d25 100644 --- a/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.test.ts +++ b/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.test.ts @@ -41,6 +41,7 @@ describe('DocLinksService', () => { expect(getDocLinksMetaMock).toHaveBeenCalledTimes(1); expect(getDocLinksMetaMock).toHaveBeenCalledWith({ kibanaBranch: coreContext.env.packageInfo.branch, + buildFlavor: coreContext.env.packageInfo.buildFlavor, }); }); @@ -62,6 +63,7 @@ describe('DocLinksService', () => { expect(getDocLinksMock).toHaveBeenCalledTimes(1); expect(getDocLinksMock).toHaveBeenCalledWith({ kibanaBranch: coreContext.env.packageInfo.branch, + buildFlavor: coreContext.env.packageInfo.buildFlavor, }); }); diff --git a/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.ts b/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.ts index 3201bcd0256a4..ae11657666864 100644 --- a/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.ts +++ b/packages/core/doc-links/core-doc-links-server-internal/src/doc_links_service.ts @@ -12,16 +12,16 @@ import type { DocLinksServiceSetup, DocLinksServiceStart } from '@kbn/core-doc-l /** @internal */ export class DocLinksService { - private readonly kibanaBranch: string; private docLinks?: DocLinksServiceSetup; - constructor(core: CoreContext) { - this.kibanaBranch = core.env.packageInfo.branch; - } + constructor(private readonly coreContext: CoreContext) {} public setup(): DocLinksServiceSetup { - const docMeta = getDocLinksMeta({ kibanaBranch: this.kibanaBranch }); - const docLinks = getDocLinks({ kibanaBranch: this.kibanaBranch }); + const kibanaBranch = this.coreContext.env.packageInfo.branch; + const buildFlavor = this.coreContext.env.packageInfo.buildFlavor; + + const docMeta = getDocLinksMeta({ kibanaBranch, buildFlavor }); + const docLinks = getDocLinks({ kibanaBranch, buildFlavor }); this.docLinks = { ...docMeta, links: docLinks, diff --git a/packages/core/doc-links/core-doc-links-server-mocks/src/doc_links_service.mock.ts b/packages/core/doc-links/core-doc-links-server-mocks/src/doc_links_service.mock.ts index d43c14c7fe8c3..b0ed04298dd1c 100644 --- a/packages/core/doc-links/core-doc-links-server-mocks/src/doc_links_service.mock.ts +++ b/packages/core/doc-links/core-doc-links-server-mocks/src/doc_links_service.mock.ts @@ -15,9 +15,10 @@ type DocLinksServiceContract = PublicMethodsOf; const createSetupMock = (): DocLinksServiceSetup => { const branch = 'test-branch'; + const buildFlavor = 'traditional'; return { - ...getDocLinksMeta({ kibanaBranch: branch }), - links: getDocLinks({ kibanaBranch: branch }), + ...getDocLinksMeta({ kibanaBranch: branch, buildFlavor }), + links: getDocLinks({ kibanaBranch: branch, buildFlavor }), }; }; diff --git a/packages/core/root/core-root-browser-internal/src/core_system.ts b/packages/core/root/core-root-browser-internal/src/core_system.ts index 3dcef6e3858cd..4c50aaf640e2a 100644 --- a/packages/core/root/core-root-browser-internal/src/core_system.ts +++ b/packages/core/root/core-root-browser-internal/src/core_system.ts @@ -141,7 +141,7 @@ export class CoreSystem { browserSupportsCsp, kibanaVersion: injectedMetadata.version, }); - this.docLinks = new DocLinksService(); + this.docLinks = new DocLinksService(this.coreContext); this.rendering = new RenderingService(); this.application = new ApplicationService(); this.integrations = new IntegrationsService(); diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts index 93517ea3b33a6..ee33208d793c2 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts @@ -9,7 +9,7 @@ import fs from 'fs/promises'; import { defaultsDeep } from 'lodash'; import { BehaviorSubject, firstValueFrom, map } from 'rxjs'; -import { ConfigService, Env } from '@kbn/config'; +import { ConfigService, Env, BuildFlavor } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { REPO_ROOT } from '@kbn/repo-info'; import { KibanaMigrator } from '@kbn/core-saved-objects-migration-server-internal'; @@ -216,6 +216,7 @@ const getMigrator = async ({ loggerFactory, kibanaVersion, kibanaBranch, + buildFlavor = 'traditional', nodeRoles, }: { configService: ConfigService; @@ -226,6 +227,7 @@ const getMigrator = async ({ loggerFactory: LoggerFactory; kibanaVersion: string; kibanaBranch: string; + buildFlavor?: BuildFlavor; nodeRoles: NodeRoles; }) => { const savedObjectsConf = await firstValueFrom( @@ -237,8 +239,8 @@ const getMigrator = async ({ const soConfig = new SavedObjectConfig(savedObjectsConf, savedObjectsMigrationConf); const docLinks: DocLinksServiceStart = { - ...getDocLinksMeta({ kibanaBranch }), - links: getDocLinks({ kibanaBranch }), + ...getDocLinksMeta({ kibanaBranch, buildFlavor }), + links: getDocLinks({ kibanaBranch, buildFlavor }), }; const esCapabilities = await getCapabilitiesFromClient(client); diff --git a/packages/kbn-config/index.ts b/packages/kbn-config/index.ts index 4950e3f68beed..1b4c66702d9e8 100644 --- a/packages/kbn-config/index.ts +++ b/packages/kbn-config/index.ts @@ -30,4 +30,4 @@ export { isConfigPath, hasConfigPathIntersection } from './src/config'; export { ObjectToConfigAdapter } from './src/object_to_config_adapter'; export type { CliArgs, RawPackageInfo, EnvOptions } from './src/env'; export { Env } from './src/env'; -export type { EnvironmentMode, PackageInfo } from './src/types'; +export type { EnvironmentMode, PackageInfo, BuildFlavor } from './src/types'; diff --git a/packages/kbn-config/src/config_service.ts b/packages/kbn-config/src/config_service.ts index e1c4ccfb55fbe..56b6f1b7887cf 100644 --- a/packages/kbn-config/src/config_service.ts +++ b/packages/kbn-config/src/config_service.ts @@ -73,7 +73,10 @@ export class ConfigService { ) { this.log = logger.get('config'); this.deprecationLog = logger.get('config', 'deprecation'); - this.docLinks = getDocLinks({ kibanaBranch: env.packageInfo.branch }); + this.docLinks = getDocLinks({ + kibanaBranch: env.packageInfo.branch, + buildFlavor: env.packageInfo.buildFlavor, + }); this.config$ = combineLatest([ this.rawConfigProvider.getConfig$(), diff --git a/packages/kbn-doc-links/src/get_doc_links.test.ts b/packages/kbn-doc-links/src/get_doc_links.test.ts index 0fff33ebd3fe4..60ce89266afc4 100644 --- a/packages/kbn-doc-links/src/get_doc_links.test.ts +++ b/packages/kbn-doc-links/src/get_doc_links.test.ts @@ -10,7 +10,7 @@ import { getDocLinks } from './get_doc_links'; describe('getDocLinks', () => { it('returns an immutable object', () => { - const links = getDocLinks({ kibanaBranch: 'test.branch' }); + const links = getDocLinks({ kibanaBranch: 'test.branch', buildFlavor: 'traditional' }); expect(() => { (links as unknown as Record).settings = 'override'; diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index a55fcde870efe..c5c253af7717a 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -7,15 +7,16 @@ */ import { deepFreeze } from '@kbn/std'; -import type { DocLinks } from './types'; +import type { DocLinks, BuildFlavor } from './types'; import { getDocLinksMeta } from './get_doc_meta'; export interface GetDocLinkOptions { kibanaBranch: string; + buildFlavor: BuildFlavor; } -export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { - const meta = getDocLinksMeta({ kibanaBranch }); +export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): DocLinks => { + const meta = getDocLinksMeta({ kibanaBranch, buildFlavor }); const DOC_LINK_VERSION = meta.version; const ELASTIC_WEBSITE_URL = meta.elasticWebsiteUrl; diff --git a/packages/kbn-doc-links/src/get_doc_meta.test.ts b/packages/kbn-doc-links/src/get_doc_meta.test.ts index ec98fc5345a06..28685ee654a18 100644 --- a/packages/kbn-doc-links/src/get_doc_meta.test.ts +++ b/packages/kbn-doc-links/src/get_doc_meta.test.ts @@ -10,16 +10,20 @@ import { getDocLinksMeta } from './get_doc_meta'; describe('getDocLinksMeta', () => { it('returns the correct version for the `main` branch', () => { - expect(getDocLinksMeta({ kibanaBranch: 'main' }).version).toEqual('master'); + expect(getDocLinksMeta({ kibanaBranch: 'main', buildFlavor: 'traditional' }).version).toEqual( + 'master' + ); }); it('returns the correct version for other branches', () => { - expect(getDocLinksMeta({ kibanaBranch: '7.x' }).version).toEqual('7.x'); + expect(getDocLinksMeta({ kibanaBranch: '7.x', buildFlavor: 'traditional' }).version).toEqual( + '7.x' + ); }); it('returns the correct website url', () => { - expect(getDocLinksMeta({ kibanaBranch: '7.x' }).elasticWebsiteUrl).toEqual( - 'https://www.elastic.co/' - ); + expect( + getDocLinksMeta({ kibanaBranch: '7.x', buildFlavor: 'traditional' }).elasticWebsiteUrl + ).toEqual('https://www.elastic.co/'); }); }); diff --git a/packages/kbn-doc-links/src/get_doc_meta.ts b/packages/kbn-doc-links/src/get_doc_meta.ts index 10e144166d39f..6e36aef20471f 100644 --- a/packages/kbn-doc-links/src/get_doc_meta.ts +++ b/packages/kbn-doc-links/src/get_doc_meta.ts @@ -6,13 +6,17 @@ * Side Public License, v 1. */ -import { DocLinksMeta } from './types'; +import { DocLinksMeta, BuildFlavor } from './types'; export interface GetDocLinksMetaOptions { kibanaBranch: string; + buildFlavor: BuildFlavor; } -export const getDocLinksMeta = ({ kibanaBranch }: GetDocLinksMetaOptions): DocLinksMeta => { +export const getDocLinksMeta = ({ + kibanaBranch, + buildFlavor, +}: GetDocLinksMetaOptions): DocLinksMeta => { return { version: kibanaBranch === 'main' ? 'master' : kibanaBranch, elasticWebsiteUrl: 'https://www.elastic.co/', diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index f9e8699a06375..3b3b26be0426e 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -633,3 +633,5 @@ export interface DocLinks { readonly settings: string; }; } + +export type BuildFlavor = 'serverless' | 'traditional'; diff --git a/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx b/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx index 8a57f90e75ecc..a7b621979a5a8 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx +++ b/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx @@ -125,7 +125,12 @@ export const AutocompleteFieldListsComponent: React.FC {i18n.SEE_DOCUMENTATION} diff --git a/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.ts b/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.ts index 1f6e9a7a58c77..e88a876edbc63 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.ts @@ -12,7 +12,7 @@ import { SemVer } from 'semver'; import { defaultsDeep } from 'lodash'; import { BehaviorSubject, firstValueFrom, map } from 'rxjs'; -import { ConfigService, Env } from '@kbn/config'; +import { ConfigService, Env, BuildFlavor } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { REPO_ROOT } from '@kbn/repo-info'; import { KibanaMigrator } from '@kbn/core-saved-objects-migration-server-internal'; @@ -278,6 +278,7 @@ interface GetMigratorParams { loggerFactory: LoggerFactory; kibanaVersion: string; kibanaBranch: string; + buildFlavor?: BuildFlavor; nodeRoles: NodeRoles; } @@ -290,6 +291,7 @@ const getMigrator = async ({ loggerFactory, kibanaVersion, kibanaBranch, + buildFlavor = 'traditional', nodeRoles, }: GetMigratorParams) => { const savedObjectsConf = await firstValueFrom( @@ -301,8 +303,8 @@ const getMigrator = async ({ const soConfig = new SavedObjectConfig(savedObjectsConf, savedObjectsMigrationConf); const docLinks: DocLinksServiceStart = { - ...getDocLinksMeta({ kibanaBranch }), - links: getDocLinks({ kibanaBranch }), + ...getDocLinksMeta({ kibanaBranch, buildFlavor }), + links: getDocLinks({ kibanaBranch, buildFlavor }), }; const esCapabilities = await getCapabilitiesFromClient(client); diff --git a/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts b/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts index 610981bab56ab..85e2d7b318fc6 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/test_utils.ts @@ -17,12 +17,18 @@ import JSON5 from 'json5'; export const getDocVersion = () => { const env = Env.createDefault(REPO_ROOT, getEnvOptions()); - return getDocLinksMeta({ kibanaBranch: env.packageInfo.branch }).version; + return getDocLinksMeta({ + kibanaBranch: env.packageInfo.branch, + buildFlavor: env.packageInfo.buildFlavor, + }).version; }; export const getMigrationDocLink = () => { const env = Env.createDefault(REPO_ROOT, getEnvOptions()); - const docLinks = getDocLinks({ kibanaBranch: env.packageInfo.branch }); + const docLinks = getDocLinks({ + kibanaBranch: env.packageInfo.branch, + buildFlavor: env.packageInfo.buildFlavor, + }); return docLinks.kibanaUpgradeSavedObjects; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/deprecation.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/deprecation.ts index 8e956e0e48aa6..46a9af76da4f0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/deprecation.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/deprecation.ts @@ -16,7 +16,8 @@ import { DETECTION_ENGINE_RULES_BULK_ACTION } from '../../../../../common/consta * @returns string */ export const buildDeprecatedBulkEndpointMessage = (path: string) => { - const docsLink = getDocLinks({ kibanaBranch: 'main' }).siem.ruleApiOverview; + const docsLink = getDocLinks({ kibanaBranch: 'main', buildFlavor: 'traditional' }).siem + .ruleApiOverview; return `Deprecated endpoint: ${path} API is deprecated since v8.2. Please use the ${DETECTION_ENGINE_RULES_BULK_ACTION} API instead. See ${docsLink} for more detail.`; }; From 28d18e89fba53cc1ca5d46bd0b5d0964d0a7c75a Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Tue, 12 Dec 2023 11:29:50 +0100 Subject: [PATCH 30/39] [Security Solution] Default Risk score slide bar values are overlaid on Rule Creation page (#161456) (#172677) ## Summary Addresses https://github.com/elastic/kibana/issues/161456 These changes do workaround to display EuiRange component which is broken due to memoization (see more details in https://github.com/elastic/kibana/issues/160561 and https://github.com/elastic/eui/issues/6846) The fix is to forcibly remove/add EuiRange component on About step activation. Before the fix: Screenshot 2023-07-12 at 19 06 01 After the fix: Screenshot 2023-07-12 at 19 05 46 --- .../rules/risk_score_mapping/index.tsx | 58 +++++++++++-------- .../rules/step_about_rule/index.tsx | 1 + 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx index f022560f9f50c..fc55b8b60df5e 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx @@ -51,6 +51,7 @@ interface RiskScoreFieldProps { idAria: string; indices: DataViewBase; isDisabled: boolean; + isActive: boolean; placeholder?: string; } @@ -60,6 +61,7 @@ export const RiskScoreField = ({ idAria, indices, isDisabled, + isActive, placeholder, }: RiskScoreFieldProps) => { const { value, isMappingChecked, mapping } = field.value; @@ -147,29 +149,39 @@ export const RiskScoreField = ({ return ( - - - + { + // TODO: https://github.com/elastic/kibana/issues/161456 + // The About step page contains EuiRange component which does not work properly within memoized parents. + // EUI team suggested not to memoize EuiRange/EuiDualRange: https://github.com/elastic/eui/issues/6846 + // Workaround: We force EuiRange re-rendering by removing/adding it into the DOM. + // NOTE: We should remove this workaround once EUI team fixed EuiRange. + // Related ticket: https://github.com/elastic/kibana/issues/160561 + } + {isActive && ( + + + + )} = ({ dataTestSubj: 'detectionEngineStepAboutRuleRiskScore', idAria: 'detectionEngineStepAboutRuleRiskScore', isDisabled: isLoading || indexPatternLoading, + isActive, indices: indexPattern, }} /> From 6b6008b1c12ec486bfd1ea4f42ba36b420bea4ce Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Tue, 12 Dec 2023 12:04:07 +0100 Subject: [PATCH 31/39] [ES|QL] Add to_geopoint fn definition (#172834) ## Summary Same as #172815 but for the new grammar (with tests) ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../src/esql/lib/ast/definitions/functions.ts | 13 +++++++++++++ .../src/esql/lib/ast/validation/validation.test.ts | 1 + 2 files changed, 14 insertions(+) diff --git a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts index 135987c4b30b6..6cabc530883aa 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts @@ -250,6 +250,19 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ }, ], }, + { + name: 'to_geopoint', + description: i18n.translate('monaco.esql.definitions.toGeopointDoc', { + defaultMessage: 'Converts to geo_point.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'geo_point', + examples: [`from index | EVAL geopoint = to_geopoint(field)`], + }, + ], + }, { name: 'to_integer', alias: ['to_int'], diff --git a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts index 8da25c2b46b8a..0df20ac7d88f4 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts @@ -37,6 +37,7 @@ function getCallbackMocks() { name: `${type}Field`, type, })), + { name: 'geoPointField', type: 'geo_point' }, { name: 'any#Char$ field', type: 'number' }, { name: 'kubernetes.something.something', type: 'number' }, { From 508762e3b5c12311d539105184bfb2b9039bf3f3 Mon Sep 17 00:00:00 2001 From: Thom Heymann <190132+thomheymann@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:14:27 +0000 Subject: [PATCH 32/39] [synthtrace] Add usage examples and available options (#172833) ## Summary Minor DX improvements to `synthtrace` CLI: - Added list of available scenarios - Added list of available log levels - Added usage examples ## Screenshot Screenshot 2023-12-07 at 14 46 31 --- .../src/cli/run_synthtrace.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/kbn-apm-synthtrace/src/cli/run_synthtrace.ts b/packages/kbn-apm-synthtrace/src/cli/run_synthtrace.ts index 08fab85b04c0d..61b2995a03bc7 100644 --- a/packages/kbn-apm-synthtrace/src/cli/run_synthtrace.ts +++ b/packages/kbn-apm-synthtrace/src/cli/run_synthtrace.ts @@ -8,17 +8,25 @@ import datemath from '@kbn/datemath'; import { Argv } from 'yargs'; import yargs from 'yargs/yargs'; +import { readdirSync } from 'fs'; +import path from 'path'; import { intervalToMs } from './utils/interval_to_ms'; import { parseRunCliFlags } from './utils/parse_run_cli_flags'; import { startHistoricalDataUpload } from './utils/start_historical_data_upload'; import { startLiveDataUpload } from './utils/start_live_data_upload'; +function getBuiltinScenarios() { + return readdirSync(path.resolve(__dirname, '../scenarios')).map((s) => s.replace(/\.ts$/, '')); +} + function options(y: Argv) { return y + .usage('$0 ') .positional('file', { - describe: 'File that contains the trace scenario', + describe: 'Name of scenario', demandOption: true, string: true, + choices: getBuiltinScenarios(), }) .option('target', { describe: 'Elasticsearch target', @@ -54,6 +62,7 @@ function options(y: Argv) { }) .option('logLevel', { describe: 'Log level', + choices: ['trace', 'debug', 'info', 'error'], default: 'info', }) .option('scenarioOpts', { @@ -66,7 +75,14 @@ function options(y: Argv) { describe: 'Assumes passed package version to avoid calling Fleet API to install', string: true, }) - .showHelpOnFail(false); + .example( + '$0 simple_logs --target=http://admin:changeme@localhost:9200', + 'Ingest data to specific Elasticsearch cluster' + ) + .example('$0 simple_logs --live', 'Continuously ingest data to local development cluster') + .example('$0 simple_logs --from=now-24h --to=now', 'Ingest data for a fixed time window') + .showHelpOnFail(false) + .wrap(null); } async function run(argv: RunCliFlags) { From 50cc8b8c1f204ca1bfa0e35327f04107a404c0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20St=C3=BCrmer?= Date: Tue, 12 Dec 2023 12:57:11 +0100 Subject: [PATCH 33/39] [Logs Explorer] Disable the too-slow url check in functional test (#173092) --- .../page_objects/observability_log_explorer.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/x-pack/test/functional/page_objects/observability_log_explorer.ts b/x-pack/test/functional/page_objects/observability_log_explorer.ts index a992aeefd0541..a61682e62a8cb 100644 --- a/x-pack/test/functional/page_objects/observability_log_explorer.ts +++ b/x-pack/test/functional/page_objects/observability_log_explorer.ts @@ -226,7 +226,12 @@ export function ObservabilityLogExplorerPageObject({ return await PageObjects.common.navigateToUrlWithBrowserHistory( 'observabilityLogExplorer', '/', - queryStringParams + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } ); }, @@ -246,7 +251,12 @@ export function ObservabilityLogExplorerPageObject({ return await PageObjects.common.navigateToUrlWithBrowserHistory( 'observabilityLogExplorer', '/', - queryStringParams + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } ); }, From f2ca740f79240a9883f65f7443a2af0e3f6cd323 Mon Sep 17 00:00:00 2001 From: Francois-Clement Brossard Date: Tue, 12 Dec 2023 21:53:51 +0900 Subject: [PATCH 34/39] [SR] Prevent change to snapshot name / repository for managed SLM policies (#172291) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Managed SLM policies `Snapshot name` and `Repository` field values can be changed from the **Snapshot and Restore** UI. This is particularly an issue with the `cloud-snapshot-policy` as changes to the snapshot name or target repository will lead to plan failures on ESS. Besides having a warning message displayed for managed SLM policies: > This is a managed policy. Changing this policy might affect other systems that use it. Proceed with caution. field values being editable is prone to errors. This PR disable the `Snapshot name` and `Repository` field for managed SLM policies to prevent edits. **Example - Regular SLM policy:** ![Untitled2](https://github.com/elastic/kibana/assets/7076736/64d501d2-3ab5-462a-af64-e04c2bc7721e) **Example - Managed SLM policy:** ![Untitled](https://github.com/elastic/kibana/assets/7076736/abf9f2a0-c672-4317-b6e6-942c80769cff) I'm open to suggestions if there is a better way to do this. This PR fixes #124916 ### Checklist - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Yulia Čech <6585477+yuliacech@users.noreply.github.com> Co-authored-by: Yulia Cech --- .../client_integration/policy_edit.test.ts | 51 +++++++++++-------- .../policy_form/steps/step_logistics.tsx | 2 + 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts index 59e52d8cf6539..643b52202162b 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts @@ -7,7 +7,7 @@ import { act } from 'react-dom/test-utils'; -import { setupEnvironment, pageHelpers, nextTick } from './helpers'; +import { setupEnvironment, pageHelpers } from './helpers'; import { API_BASE_PATH } from '../../common'; import { PolicyForm } from '../../public/application/components/policy_form'; import { PolicyFormTestBed } from './helpers/policy_form.helpers'; @@ -39,12 +39,10 @@ describe('', () => { features: [{ name: 'kibana' }, { name: 'tasks' }], }); - testBed = await setup(httpSetup); - await act(async () => { - await nextTick(); - testBed.component.update(); + testBed = await setup(httpSetup); }); + testBed.component.update(); }); test('should set the correct page title', () => { @@ -64,12 +62,10 @@ describe('', () => { repositories: [{ name: 'this-is-a-new-repository' }], }); - testBed = await setup(httpSetup); - await act(async () => { - await nextTick(); - testBed.component.update(); + testBed = await setup(httpSetup); }); + testBed.component.update(); }); test('should show repository-not-found warning', () => { @@ -99,10 +95,7 @@ describe('', () => { test('should use the same Form component as the "" section', async () => { testBedPolicyAdd = await setupPolicyAdd(httpSetup); - await act(async () => { - await nextTick(); - testBedPolicyAdd.component.update(); - }); + testBedPolicyAdd.component.update(); const formEdit = testBed.component.find(PolicyForm); const formAdd = testBedPolicyAdd.component.find(PolicyForm); @@ -118,6 +111,28 @@ describe('', () => { expect(nameInput.props().disabled).toEqual(true); }); + test('should disable the repo and snapshot fields for managed policies', async () => { + httpRequestsMockHelpers.setGetPolicyResponse(POLICY_EDIT.name, { + policy: { + ...POLICY_EDIT, + isManagedPolicy: true, + }, + }); + + await act(async () => { + testBed = await setup(httpSetup); + }); + testBed.component.update(); + + const { find } = testBed; + + const snapshotInput = find('snapshotNameInput'); + expect(snapshotInput.props().disabled).toEqual(true); + + const repoSelect = find('repositorySelect'); + expect(repoSelect.props().disabled).toEqual(true); + }); + describe('form payload', () => { it('should send the correct payload with changed values', async () => { const { form, actions } = testBed; @@ -138,10 +153,7 @@ describe('', () => { form.setInputValue('expireAfterUnitSelect', EXPIRE_AFTER_UNIT); actions.clickNextButton(); - await act(async () => { - actions.clickSubmitButton(); - await nextTick(); - }); + actions.clickSubmitButton(); const { name, isManagedPolicy, schedule, repository, retention } = POLICY_EDIT; @@ -182,10 +194,7 @@ describe('', () => { form.setInputValue('expireAfterValueInput', EXPIRE_AFTER_VALUE); actions.clickNextButton(); - await act(async () => { - actions.clickSubmitButton(); - await nextTick(); - }); + actions.clickSubmitButton(); const { name, isManagedPolicy, schedule, repository, retention, snapshotName } = POLICY_EDIT; diff --git a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx index e98e0eaf52a8c..137296595dc43 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx @@ -273,6 +273,7 @@ export const PolicyStepLogistics: React.FunctionComponent = ({ }} fullWidth data-test-subj="repositorySelect" + disabled={policy?.isManagedPolicy && isEditing} /> ); }; @@ -342,6 +343,7 @@ export const PolicyStepLogistics: React.FunctionComponent = ({ } )} data-test-subj="snapshotNameInput" + disabled={policy?.isManagedPolicy && isEditing} /> From b51304f3f3c3e8510c44a235d0fc65c44fcce225 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Tue, 12 Dec 2023 08:45:12 -0500 Subject: [PATCH 35/39] feat(slo): new slo architecture (#172224) --- .../current_fields.json | 3 +- .../current_mappings.json | 3 + .../check_registered_types.test.ts | 2 +- x-pack/packages/kbn-slo-schema/index.ts | 1 + .../kbn-slo-schema/src/models/pagination.ts | 17 + .../kbn-slo-schema/src/rest_specs/slo.ts | 50 +- .../packages/kbn-slo-schema/src/schema/slo.ts | 1 + x-pack/packages/kbn-slo-schema/tsconfig.json | 3 +- .../journeys/many_fields_transform.ts | 4 +- .../observability/common/slo/constants.ts | 16 +- .../docs/openapi/slo/bundled.json | 336 ++++- .../docs/openapi/slo/bundled.yaml | 227 +++- .../find_slo_definitions_response.yaml | 18 + .../components/schemas/find_slo_response.yaml | 2 +- .../schemas/slo_definition_response.yaml | 85 ++ ...se.yaml => slo_with_summary_response.yaml} | 5 + .../docs/openapi/slo/entrypoint.yaml | 8 +- .../slo/paths/s@{spaceid}@api@slos.yaml | 4 +- .../s@{spaceid}@api@slos@_definitions.yaml | 62 + .../paths/s@{spaceid}@api@slos@{sloid}.yaml | 4 +- .../s@{spaceid}@api@slos@{sloid}@_reset.yaml | 43 + ...s@{spaceid}@api@slos@{sloid}@disable.yaml} | 0 ... s@{spaceid}@api@slos@{sloid}@enable.yaml} | 0 .../burn_rate_rule_editor/slo_selector.tsx | 10 +- .../observability/public/data/slo/slo.ts | 5 +- .../hooks/slo/use_fetch_slo_definitions.ts | 29 +- .../public/locators/slo_edit.test.ts | 2 +- .../pages/slo_details/slo_details.test.tsx | 1 + .../slo_mappings_template.ts | 63 +- .../slo_summary_mappings_template.ts | 52 +- .../ingest_templates/slo_pipeline_template.ts | 11 +- .../slo_summary_pipeline_template.ts | 203 ++- x-pack/plugins/observability/server/plugin.ts | 28 +- .../server/routes/register_routes.ts | 2 + .../observability/server/routes/slo/route.ts | 126 +- .../observability/server/saved_objects/slo.ts | 17 +- .../slo/__snapshots__/create_slo.test.ts.snap | 146 +- .../slo/__snapshots__/delete_slo.test.ts.snap | 177 +++ .../get_slo_instances.test.ts.snap | 2 +- .../slo/__snapshots__/manage_slo.test.ts.snap | 65 + .../slo/__snapshots__/reset_slo.test.ts.snap | 489 +++++++ .../summary_search_client.test.ts.snap | 2 +- .../slo/__snapshots__/update_slo.test.ts.snap | 125 +- .../server/services/slo/create_slo.test.ts | 78 +- .../server/services/slo/create_slo.ts | 75 +- .../server/services/slo/delete_slo.test.ts | 71 +- .../server/services/slo/delete_slo.ts | 21 +- .../services/slo/delete_slo_instances.test.ts | 4 +- .../server/services/slo/find_slo.test.ts | 8 +- .../server/services/slo/find_slo.ts | 6 +- .../services/slo/find_slo_definitions.ts | 34 +- .../server/services/slo/fixtures/slo.ts | 4 +- .../server/services/slo/get_slo.test.ts | 2 + .../server/services/slo/index.ts | 2 +- .../server/services/slo/manage_slo.test.ts | 23 +- .../server/services/slo/manage_slo.ts | 10 +- .../server/services/slo/mocks/index.ts | 13 +- .../server/services/slo/reset_slo.test.ts | 87 ++ .../server/services/slo/reset_slo.ts | 130 ++ .../services/slo/resource_installer.test.ts | 7 +- .../server/services/slo/resource_installer.ts | 6 - .../server/services/slo/slo_installer.test.ts | 10 +- .../server/services/slo/slo_installer.ts | 11 +- .../services/slo/slo_repository.test.ts | 46 +- .../server/services/slo/slo_repository.ts | 52 +- .../slo/summary_search_client.test.ts | 10 +- .../services/slo/summary_search_client.ts | 26 +- .../summary_transform_installer.test.ts.snap | 1192 ----------------- .../summary_transform_installer.test.ts | 103 -- .../summary_transform_installer.ts | 105 -- .../slo/summary_transform/templates/common.ts | 100 -- .../slo/summary_transform/templates/index.ts | 30 - .../summary_occurrences_30d_rolling.ts | 153 --- .../summary_occurrences_7d_rolling.ts | 153 --- .../summary_occurrences_90d_rolling.ts | 153 --- .../summary_occurrences_monthly_aligned.ts | 151 --- .../summary_occurrences_weekly_aligned.ts | 151 --- .../summary_timeslices_30d_rolling.ts | 153 --- .../summary_timeslices_7d_rolling.ts | 153 --- .../summary_timeslices_90d_rolling.ts | 153 --- .../summary_timeslices_monthly_aligned.ts | 181 --- .../summary_timeslices_weekly_aligned.ts | 166 --- .../generators/common.ts | 69 + .../generators/occurrences.ts | 136 ++ .../generators/timeslices_calendar_aligned.ts | 166 +++ .../generators/timeslices_rolling.ts | 138 ++ .../helpers/create_temp_summary.ts | 8 +- .../summary_transform_generator.ts | 30 + .../services/slo/summay_transform_manager.ts | 99 ++ .../apm_transaction_duration.test.ts.snap | 413 +----- .../apm_transaction_error_rate.test.ts.snap | 413 +----- .../__snapshots__/histogram.test.ts.snap | 233 +--- .../__snapshots__/kql_custom.test.ts.snap | 233 +--- .../__snapshots__/metric_custom.test.ts.snap | 233 +--- .../timeslice_metric.test.ts.snap | 244 +--- .../apm_transaction_duration.test.ts | 20 +- .../apm_transaction_error_rate.test.ts | 23 +- .../transform_generators/histogram.test.ts | 22 +- .../transform_generators/kql_custom.test.ts | 20 +- .../metric_custom.test.ts | 20 +- .../timeslice_metric.test.ts | 19 +- .../transform_generator.ts | 98 +- .../server/services/slo/update_slo.test.ts | 257 ++-- .../server/services/slo/update_slo.ts | 114 +- 104 files changed, 3693 insertions(+), 5597 deletions(-) create mode 100644 x-pack/packages/kbn-slo-schema/src/models/pagination.ts create mode 100644 x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_definitions_response.yaml create mode 100644 x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_definition_response.yaml rename x-pack/plugins/observability/docs/openapi/slo/components/schemas/{slo_response.yaml => slo_with_summary_response.yaml} (96%) create mode 100644 x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@_definitions.yaml create mode 100644 x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@_reset.yaml rename x-pack/plugins/observability/docs/openapi/slo/paths/{s@{spaceid}@api@slos@{sloid}@{disable}.yaml => s@{spaceid}@api@slos@{sloid}@disable.yaml} (100%) rename x-pack/plugins/observability/docs/openapi/slo/paths/{s@{spaceid}@api@slos@{sloid}@{enable}.yaml => s@{spaceid}@api@slos@{sloid}@enable.yaml} (100%) create mode 100644 x-pack/plugins/observability/server/services/slo/__snapshots__/delete_slo.test.ts.snap create mode 100644 x-pack/plugins/observability/server/services/slo/__snapshots__/manage_slo.test.ts.snap create mode 100644 x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap create mode 100644 x-pack/plugins/observability/server/services/slo/reset_slo.test.ts create mode 100644 x-pack/plugins/observability/server/services/slo/reset_slo.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/__snapshots__/summary_transform_installer.test.ts.snap delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.test.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/common.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/index.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_30d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_7d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_90d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_monthly_aligned.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_weekly_aligned.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_30d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_7d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_90d_rolling.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_monthly_aligned.ts delete mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_weekly_aligned.ts create mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/common.ts create mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/occurrences.ts create mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_calendar_aligned.ts create mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_rolling.ts rename x-pack/plugins/observability/server/services/slo/{summary_transform => summary_transform_generator}/helpers/create_temp_summary.ts (80%) create mode 100644 x-pack/plugins/observability/server/services/slo/summary_transform_generator/summary_transform_generator.ts create mode 100644 x-pack/plugins/observability/server/services/slo/summay_transform_manager.ts diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index e2f6f916b3dda..7f7c317f7f63a 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -721,7 +721,8 @@ "indicator.params", "indicator.type", "name", - "tags" + "tags", + "version" ], "threshold-explorer-view": [], "observability-onboarding-state": [ diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 8cedbf8722772..fe4b3dba0940d 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -2379,6 +2379,9 @@ }, "tags": { "type": "keyword" + }, + "version": { + "type": "long" } } }, 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 f5127f499644e..a2235b0f77812 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 @@ -142,7 +142,7 @@ describe('checking migration metadata changes on all registered SO types', () => "siem-ui-timeline": "d3de8ff3617be8f2a799d66b1471b9be6124bf40", "siem-ui-timeline-note": "0a32fb776907f596bedca292b8c646496ae9c57b", "siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d", - "slo": "2048ab6791df2e1ae0936f29c20765cb8d2fcfaa", + "slo": "9a9995e4572de1839651c43b5fc4dc8276bb5815", "space": "8de4ec513e9bbc6b2f1d635161d850be7747d38e", "spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e", "synthetics-monitor": "33ddc4b8979f378edf58bcc7ba13c5c5b572f42d", diff --git a/x-pack/packages/kbn-slo-schema/index.ts b/x-pack/packages/kbn-slo-schema/index.ts index 3d9e295055a61..98b183d391bb7 100644 --- a/x-pack/packages/kbn-slo-schema/index.ts +++ b/x-pack/packages/kbn-slo-schema/index.ts @@ -8,3 +8,4 @@ export * from './src/schema'; export * from './src/rest_specs'; export * from './src/models/duration'; +export * from './src/models/pagination'; diff --git a/x-pack/packages/kbn-slo-schema/src/models/pagination.ts b/x-pack/packages/kbn-slo-schema/src/models/pagination.ts new file mode 100644 index 0000000000000..815c30f71d4c4 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/models/pagination.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. + */ +export interface Paginated { + total: number; + page: number; + perPage: number; + results: T[]; +} + +export interface Pagination { + page: number; + perPage: number; +} 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 54e463adc210c..574a7eb1f9244 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,6 +6,7 @@ */ import * as t from 'io-ts'; +import { toBooleanRt } from '@kbn/io-ts-utils'; import { allOrAnyString, apmTransactionDurationIndicatorSchema, @@ -109,6 +110,7 @@ const sloResponseSchema = t.intersection([ groupBy: allOrAnyString, createdAt: dateType, updatedAt: dateType, + version: t.number, }), t.partial({ instanceId: allOrAnyString, @@ -157,6 +159,12 @@ 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({ @@ -182,23 +190,21 @@ const fetchHistoricalSummaryResponseSchema = t.array( }) ); -/** - * The query params schema for /internal/observability/slo/_definitions - * - * @private - */ -const findSloDefinitionsParamsSchema = t.type({ - query: t.type({ +const findSloDefinitionsParamsSchema = t.partial({ + query: t.partial({ search: t.string, + includeOutdatedOnly: toBooleanRt, + page: t.string, + perPage: t.string, }), }); -/** - * The response schema for /internal/observability/slo/_definitions - * - * @private - */ -const findSloDefinitionsResponseSchema = t.array(sloResponseSchema); +const findSloDefinitionsResponseSchema = t.type({ + page: t.number, + perPage: t.number, + total: t.number, + results: t.array(sloResponseSchema), +}); const getSLOBurnRatesResponseSchema = t.type({ burnRates: t.array( @@ -244,6 +250,9 @@ 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; @@ -258,12 +267,8 @@ type FetchHistoricalSummaryParams = t.TypeOf; type HistoricalSummaryResponse = t.OutputOf; -/** - * The response type for /internal/observability/slo/_definitions - * - * @private - */ -type FindSloDefinitionsResponse = t.OutputOf; +type FindSLODefinitionsParams = t.TypeOf; +type FindSLODefinitionsResponse = t.OutputOf; type GetPreviewDataParams = t.TypeOf; type GetPreviewDataResponse = t.OutputOf; @@ -300,6 +305,8 @@ export { findSloDefinitionsParamsSchema, findSloDefinitionsResponseSchema, manageSLOParamsSchema, + resetSLOParamsSchema, + resetSLOResponseSchema, sloResponseSchema, sloWithSummaryResponseSchema, updateSLOParamsSchema, @@ -325,8 +332,11 @@ export type { FetchHistoricalSummaryParams, FetchHistoricalSummaryResponse, HistoricalSummaryResponse, - FindSloDefinitionsResponse, + FindSLODefinitionsParams, + FindSLODefinitionsResponse, ManageSLOParams, + ResetSLOParams, + ResetSLOResponse, SLOResponse, SLOWithSummaryResponse, UpdateSLOInput, 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 29df82010710d..27e8a9e998f71 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/slo.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/slo.ts @@ -50,6 +50,7 @@ const sloSchema = t.type({ createdAt: dateType, updatedAt: dateType, groupBy: allOrAnyString, + version: t.number, }); const sloWithSummarySchema = t.intersection([sloSchema, t.type({ summary: summarySchema })]); diff --git a/x-pack/packages/kbn-slo-schema/tsconfig.json b/x-pack/packages/kbn-slo-schema/tsconfig.json index 3c94d9a902af8..bc9fd2fdede8a 100644 --- a/x-pack/packages/kbn-slo-schema/tsconfig.json +++ b/x-pack/packages/kbn-slo-schema/tsconfig.json @@ -11,7 +11,8 @@ "**/*.ts" ], "kbn_references": [ - "@kbn/std" + "@kbn/std", + "@kbn/io-ts-utils" ], "exclude": [ "target/**/*", diff --git a/x-pack/performance/journeys/many_fields_transform.ts b/x-pack/performance/journeys/many_fields_transform.ts index 14187c20e5c59..6fe945914c358 100644 --- a/x-pack/performance/journeys/many_fields_transform.ts +++ b/x-pack/performance/journeys/many_fields_transform.ts @@ -15,11 +15,11 @@ export const journey = new Journey({ .step('Go to Transforms', async ({ page, kbnUrl, kibanaPage }) => { await page.goto(kbnUrl.get(`app/management/data/transform`)); await kibanaPage.waitForHeader(); - await page.waitForSelector(subj('transformButtonCreate')); + await page.waitForSelector(subj('transformCreateFirstButton')); await page.waitForSelector(subj('globalLoadingIndicator-hidden')); }) .step('Go to data view selection', async ({ page }) => { - const createButtons = page.locator(subj('transformButtonCreate')); + const createButtons = page.locator(subj('transformCreateFirstButton')); await createButtons.first().click(); await page.waitForSelector(subj('savedObjectsFinderTable')); }) diff --git a/x-pack/plugins/observability/common/slo/constants.ts b/x-pack/plugins/observability/common/slo/constants.ts index 0dd9df915eee4..c2de5598fa8ce 100644 --- a/x-pack/plugins/observability/common/slo/constants.ts +++ b/x-pack/plugins/observability/common/slo/constants.ts @@ -5,8 +5,8 @@ * 2.0. */ -export const SLO_RESOURCES_VERSION = 2; -export const SLO_SUMMARY_TRANSFORMS_VERSION = 3; +export const SLO_MODEL_VERSION = 2; +export const SLO_RESOURCES_VERSION = 3; export const SLO_COMPONENT_TEMPLATE_MAPPINGS_NAME = '.slo-observability.sli-mappings'; export const SLO_COMPONENT_TEMPLATE_SETTINGS_NAME = '.slo-observability.sli-settings'; @@ -17,8 +17,7 @@ export const SLO_INDEX_TEMPLATE_PATTERN = `.slo-observability.sli-*`; export const SLO_DESTINATION_INDEX_NAME = `.slo-observability.sli-v${SLO_RESOURCES_VERSION}`; export const SLO_DESTINATION_INDEX_PATTERN = `.slo-observability.sli-v${SLO_RESOURCES_VERSION}*`; -export const SLO_INGEST_PIPELINE_NAME = `.slo-observability.sli.pipeline`; -// slo-observability.sli-v.(YYYY-MM-DD) +export const SLO_INGEST_PIPELINE_NAME = `.slo-observability.sli.pipeline-v${SLO_RESOURCES_VERSION}`; export const SLO_INGEST_PIPELINE_INDEX_NAME_PREFIX = `.slo-observability.sli-v${SLO_RESOURCES_VERSION}.`; export const SLO_SUMMARY_COMPONENT_TEMPLATE_MAPPINGS_NAME = '.slo-observability.summary-mappings'; @@ -26,12 +25,15 @@ export const SLO_SUMMARY_COMPONENT_TEMPLATE_SETTINGS_NAME = '.slo-observability. export const SLO_SUMMARY_INDEX_TEMPLATE_NAME = '.slo-observability.summary'; export const SLO_SUMMARY_INDEX_TEMPLATE_PATTERN = `.slo-observability.summary-*`; -export const SLO_SUMMARY_TRANSFORM_NAME_PREFIX = 'slo-summary-'; export const SLO_SUMMARY_DESTINATION_INDEX_NAME = `.slo-observability.summary-v${SLO_RESOURCES_VERSION}`; // store the temporary summary document generated by transform export const SLO_SUMMARY_TEMP_INDEX_NAME = `.slo-observability.summary-v${SLO_RESOURCES_VERSION}.temp`; // store the temporary summary document export const SLO_SUMMARY_DESTINATION_INDEX_PATTERN = `.slo-observability.summary-v${SLO_RESOURCES_VERSION}*`; // include temp and non-temp summary indices -export const SLO_SUMMARY_INGEST_PIPELINE_NAME = `.slo-observability.summary.pipeline`; - export const getSLOTransformId = (sloId: string, sloRevision: number) => `slo-${sloId}-${sloRevision}`; + +export const getSLOSummaryTransformId = (sloId: string, sloRevision: number) => + `slo-summary-${sloId}-${sloRevision}`; + +export const getSLOSummaryPipelineId = (sloId: string, sloRevision: number) => + `.slo-observability.summary.pipeline-${sloId}-${sloRevision}`; diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.json b/x-pack/plugins/observability/docs/openapi/slo/bundled.json index ff366afc2ff1f..1ec1b5a629f02 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.json +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.json @@ -143,7 +143,7 @@ { "name": "page", "in": "query", - "description": "The page number to return", + "description": "The page to use for pagination, must be greater or equal than 1", "schema": { "type": "integer", "default": 1 @@ -153,7 +153,7 @@ { "name": "perPage", "in": "query", - "description": "The number of SLOs to return per page", + "description": "Number of SLOs returned by page", "schema": { "type": "integer", "default": 25, @@ -280,7 +280,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/slo_response" + "$ref": "#/components/schemas/slo_with_summary_response" } } } @@ -361,7 +361,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/slo_response" + "$ref": "#/components/schemas/slo_definition_response" } } } @@ -605,6 +605,79 @@ } } }, + "/s/{spaceId}/api/observability/slos/{sloId}/_reset": { + "post": { + "summary": "Resets an SLO.", + "operationId": "resetSloOp", + "description": "You must have the `write` privileges for the **SLOs** feature in the **Observability** section of the Kibana feature privileges.\n", + "tags": [ + "slo" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + }, + { + "$ref": "#/components/parameters/slo_id" + } + ], + "responses": { + "204": { + "description": "Successful request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/slo_definition_response" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + }, + "401": { + "description": "Unauthorized response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/401_response" + } + } + } + }, + "403": { + "description": "Unauthorized response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/403_response" + } + } + } + }, + "404": { + "description": "Not found response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/404_response" + } + } + } + } + } + } + }, "/s/{spaceId}/internal/observability/slos/_historical_summary": { "post": { "summary": "Retrieves the historical summary for a list of SLOs", @@ -675,6 +748,104 @@ } } }, + "/s/{spaceId}/internal/observability/slos/_definitions": { + "get": { + "summary": "Get the SLO definitions", + "operationId": "getDefinitionsOp", + "description": "You must have the `read` privileges for the **SLOs** feature in the **Observability** section of the Kibana feature privileges.\n", + "tags": [ + "slo" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + }, + { + "name": "includeOutdatedOnly", + "in": "query", + "description": "Indicates if the API returns only outdated SLO or all SLO definitions", + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "search", + "in": "query", + "description": "Filters the SLOs by name", + "schema": { + "type": "string" + }, + "example": "my service availability" + }, + { + "name": "page", + "in": "query", + "description": "The page to use for pagination, must be greater or equal than 1", + "schema": { + "type": "number" + }, + "example": 1 + }, + { + "name": "perPage", + "in": "query", + "description": "Number of SLOs returned by page", + "schema": { + "type": "integer", + "default": 100, + "maximum": 1000 + }, + "example": 100 + } + ], + "responses": { + "200": { + "description": "Successful request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/find_slo_definitions_response" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + }, + "401": { + "description": "Unauthorized response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/401_response" + } + } + } + }, + "403": { + "description": "Unauthorized response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/403_response" + } + } + } + } + } + } + }, "/s/{spaceId}/api/observability/slos/_delete_instances": { "post": { "summary": "Batch delete rollup and summary data for the matching list of sloId and instanceId", @@ -1587,7 +1758,7 @@ } } }, - "slo_response": { + "slo_with_summary_response": { "title": "SLO response", "type": "object", "required": [ @@ -1606,7 +1777,8 @@ "instanceId", "tags", "createdAt", - "updatedAt" + "updatedAt", + "version" ], "properties": { "id": { @@ -1708,6 +1880,11 @@ "description": "The last update date", "type": "string", "example": "2023-01-12T10:03:19.000Z" + }, + "version": { + "description": "The internal SLO version", + "type": "number", + "example": 2 } } }, @@ -1731,7 +1908,7 @@ "results": { "type": "array", "items": { - "$ref": "#/components/schemas/slo_response" + "$ref": "#/components/schemas/slo_with_summary_response" } } } @@ -1994,6 +2171,126 @@ } } }, + "slo_definition_response": { + "title": "SLO definition response", + "type": "object", + "required": [ + "id", + "name", + "description", + "indicator", + "timeWindow", + "budgetingMethod", + "objective", + "settings", + "revision", + "enabled", + "groupBy", + "tags", + "createdAt", + "updatedAt", + "version" + ], + "properties": { + "id": { + "description": "The identifier of the SLO.", + "type": "string", + "example": "8853df00-ae2e-11ed-90af-09bb6422b258" + }, + "name": { + "description": "The name of the SLO.", + "type": "string", + "example": "My Service SLO" + }, + "description": { + "description": "The description of the SLO.", + "type": "string", + "example": "My SLO description" + }, + "indicator": { + "discriminator": { + "propertyName": "type", + "mapping": { + "sli.apm.transactionErrorRate": "#/components/schemas/indicator_properties_apm_availability", + "sli.kql.custom": "#/components/schemas/indicator_properties_custom_kql", + "sli.apm.transactionDuration": "#/components/schemas/indicator_properties_apm_latency", + "sli.metric.custom": "#/components/schemas/indicator_properties_custom_metric", + "sli.histogram.custom": "#/components/schemas/indicator_properties_histogram", + "sli.metric.timeslice": "#/components/schemas/indicator_properties_timeslice_metric" + } + }, + "oneOf": [ + { + "$ref": "#/components/schemas/indicator_properties_custom_kql" + }, + { + "$ref": "#/components/schemas/indicator_properties_apm_availability" + }, + { + "$ref": "#/components/schemas/indicator_properties_apm_latency" + }, + { + "$ref": "#/components/schemas/indicator_properties_custom_metric" + }, + { + "$ref": "#/components/schemas/indicator_properties_histogram" + }, + { + "$ref": "#/components/schemas/indicator_properties_timeslice_metric" + } + ] + }, + "timeWindow": { + "$ref": "#/components/schemas/time_window" + }, + "budgetingMethod": { + "$ref": "#/components/schemas/budgeting_method" + }, + "objective": { + "$ref": "#/components/schemas/objective" + }, + "settings": { + "$ref": "#/components/schemas/settings" + }, + "revision": { + "description": "The SLO revision", + "type": "number", + "example": 2 + }, + "enabled": { + "description": "Indicate if the SLO is enabled", + "type": "boolean", + "example": true + }, + "groupBy": { + "description": "optional group by field to use to generate an SLO per distinct value", + "type": "string", + "example": "some.field" + }, + "tags": { + "description": "List of tags", + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "description": "The creation date", + "type": "string", + "example": "2023-01-12T10:03:19.000Z" + }, + "updatedAt": { + "description": "The last update date", + "type": "string", + "example": "2023-01-12T10:03:19.000Z" + }, + "version": { + "description": "The internal SLO version", + "type": "number", + "example": 2 + } + } + }, "historical_summary_request": { "title": "Historical summary request", "type": "object", @@ -2037,6 +2334,31 @@ } } }, + "find_slo_definitions_response": { + "title": "Find SLO definitions response", + "description": "A paginated response of SLO definitions matching the query.\n", + "type": "object", + "properties": { + "page": { + "type": "number", + "example": 2 + }, + "perPage": { + "type": "number", + "example": 100 + }, + "total": { + "type": "number", + "example": 123 + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/slo_definition_response" + } + } + } + }, "delete_slo_instances_request": { "title": "Delete SLO instances request", "description": "The delete SLO instances request takes a list of SLO id and instance id, then delete the rollup and summary data. This API can be used to remove the staled data of an instance SLO that no longer get updated.\n", diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml index 5aa20726b6a07..643b0d29fea66 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml @@ -86,14 +86,14 @@ paths: example: 'slo.name:latency* and slo.tags : "prod"' - name: page in: query - description: The page number to return + description: The page to use for pagination, must be greater or equal than 1 schema: type: integer default: 1 example: 1 - name: perPage in: query - description: The number of SLOs to return per page + description: Number of SLOs returned by page schema: type: integer default: 25 @@ -176,7 +176,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/slo_response' + $ref: '#/components/schemas/slo_with_summary_response' '400': description: Bad request content: @@ -224,7 +224,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/slo_response' + $ref: '#/components/schemas/slo_definition_response' '400': description: Bad request content: @@ -365,6 +365,49 @@ paths: application/json: schema: $ref: '#/components/schemas/404_response' + /s/{spaceId}/api/observability/slos/{sloId}/_reset: + post: + summary: Resets an SLO. + operationId: resetSloOp + description: | + You must have the `write` privileges for the **SLOs** feature in the **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/space_id' + - $ref: '#/components/parameters/slo_id' + responses: + '204': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/slo_definition_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/403_response' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '#/components/schemas/404_response' /s/{spaceId}/internal/observability/slos/_historical_summary: post: summary: Retrieves the historical summary for a list of SLOs @@ -407,6 +450,68 @@ paths: application/json: schema: $ref: '#/components/schemas/403_response' + /s/{spaceId}/internal/observability/slos/_definitions: + get: + summary: Get the SLO definitions + operationId: getDefinitionsOp + description: | + You must have the `read` privileges for the **SLOs** feature in the **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/space_id' + - name: includeOutdatedOnly + in: query + description: Indicates if the API returns only outdated SLO or all SLO definitions + schema: + type: boolean + example: true + - name: search + in: query + description: Filters the SLOs by name + schema: + type: string + example: my service availability + - name: page + in: query + description: The page to use for pagination, must be greater or equal than 1 + schema: + type: number + example: 1 + - name: perPage + in: query + description: Number of SLOs returned by page + schema: + type: integer + default: 100 + maximum: 1000 + example: 100 + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '#/components/schemas/find_slo_definitions_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/401_response' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '#/components/schemas/403_response' /s/{spaceId}/api/observability/slos/_delete_instances: post: summary: Batch delete rollup and summary data for the matching list of sloId and instanceId @@ -1103,7 +1208,7 @@ components: example: 0.9836 errorBudget: $ref: '#/components/schemas/error_budget' - slo_response: + slo_with_summary_response: title: SLO response type: object required: @@ -1123,6 +1228,7 @@ components: - tags - createdAt - updatedAt + - version properties: id: description: The identifier of the SLO. @@ -1192,6 +1298,10 @@ components: description: The last update date type: string example: '2023-01-12T10:03:19.000Z' + version: + description: The internal SLO version + type: number + example: 2 find_slo_response: title: Find SLO response description: | @@ -1210,7 +1320,7 @@ components: results: type: array items: - $ref: '#/components/schemas/slo_response' + $ref: '#/components/schemas/slo_with_summary_response' 400_response: title: Bad request type: object @@ -1386,6 +1496,92 @@ components: type: array items: type: string + slo_definition_response: + title: SLO definition response + type: object + required: + - id + - name + - description + - indicator + - timeWindow + - budgetingMethod + - objective + - settings + - revision + - enabled + - groupBy + - tags + - createdAt + - updatedAt + - version + properties: + id: + description: The identifier of the SLO. + type: string + example: 8853df00-ae2e-11ed-90af-09bb6422b258 + name: + description: The name of the SLO. + type: string + example: My Service SLO + description: + description: The description of the SLO. + type: string + example: My SLO description + indicator: + discriminator: + propertyName: type + mapping: + sli.apm.transactionErrorRate: '#/components/schemas/indicator_properties_apm_availability' + sli.kql.custom: '#/components/schemas/indicator_properties_custom_kql' + sli.apm.transactionDuration: '#/components/schemas/indicator_properties_apm_latency' + sli.metric.custom: '#/components/schemas/indicator_properties_custom_metric' + sli.histogram.custom: '#/components/schemas/indicator_properties_histogram' + sli.metric.timeslice: '#/components/schemas/indicator_properties_timeslice_metric' + oneOf: + - $ref: '#/components/schemas/indicator_properties_custom_kql' + - $ref: '#/components/schemas/indicator_properties_apm_availability' + - $ref: '#/components/schemas/indicator_properties_apm_latency' + - $ref: '#/components/schemas/indicator_properties_custom_metric' + - $ref: '#/components/schemas/indicator_properties_histogram' + - $ref: '#/components/schemas/indicator_properties_timeslice_metric' + timeWindow: + $ref: '#/components/schemas/time_window' + budgetingMethod: + $ref: '#/components/schemas/budgeting_method' + objective: + $ref: '#/components/schemas/objective' + settings: + $ref: '#/components/schemas/settings' + revision: + description: The SLO revision + type: number + example: 2 + enabled: + description: Indicate if the SLO is enabled + type: boolean + example: true + groupBy: + description: optional group by field to use to generate an SLO per distinct value + type: string + example: some.field + tags: + description: List of tags + type: array + items: + type: string + createdAt: + description: The creation date + type: string + example: '2023-01-12T10:03:19.000Z' + updatedAt: + description: The last update date + type: string + example: '2023-01-12T10:03:19.000Z' + version: + description: The internal SLO version + type: number + example: 2 historical_summary_request: title: Historical summary request type: object @@ -1416,6 +1612,25 @@ components: example: 0.9836 errorBudget: $ref: '#/components/schemas/error_budget' + find_slo_definitions_response: + title: Find SLO definitions response + description: | + A paginated response of SLO definitions matching the query. + type: object + properties: + page: + type: number + example: 2 + perPage: + type: number + example: 100 + total: + type: number + example: 123 + results: + type: array + items: + $ref: '#/components/schemas/slo_definition_response' delete_slo_instances_request: title: Delete SLO instances request description: | diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_definitions_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_definitions_response.yaml new file mode 100644 index 0000000000000..274bdc7016a04 --- /dev/null +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_definitions_response.yaml @@ -0,0 +1,18 @@ +title: Find SLO definitions response +description: > + A paginated response of SLO definitions matching the query. +type: object +properties: + page: + type: number + example: 2 + perPage: + type: number + example: 100 + total: + type: number + example: 123 + results: + type: array + items: + $ref: 'slo_definition_response.yaml' \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_response.yaml index 36a701efa34f4..b94aa6e6dc1c5 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_response.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_slo_response.yaml @@ -15,4 +15,4 @@ properties: results: type: array items: - $ref: 'slo_response.yaml' \ No newline at end of file + $ref: 'slo_with_summary_response.yaml' \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_definition_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_definition_response.yaml new file mode 100644 index 0000000000000..0b4ffa774d10f --- /dev/null +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_definition_response.yaml @@ -0,0 +1,85 @@ +title: SLO definition response +type: object +required: + - id + - name + - description + - indicator + - timeWindow + - budgetingMethod + - objective + - settings + - revision + - enabled + - groupBy + - tags + - createdAt + - updatedAt + - version +properties: + id: + description: The identifier of the SLO. + type: string + example: 8853df00-ae2e-11ed-90af-09bb6422b258 + name: + description: The name of the SLO. + type: string + example: My Service SLO + description: + description: The description of the SLO. + type: string + example: My SLO description + indicator: + discriminator: + propertyName: type + mapping: + sli.apm.transactionErrorRate: './indicator_properties_apm_availability.yaml' + sli.kql.custom: './indicator_properties_custom_kql.yaml' + sli.apm.transactionDuration: './indicator_properties_apm_latency.yaml' + sli.metric.custom: './indicator_properties_custom_metric.yaml' + sli.histogram.custom: './indicator_properties_histogram.yaml' + sli.metric.timeslice: './indicator_properties_timeslice_metric.yaml' + oneOf: + - $ref: "indicator_properties_custom_kql.yaml" + - $ref: "indicator_properties_apm_availability.yaml" + - $ref: "indicator_properties_apm_latency.yaml" + - $ref: "indicator_properties_custom_metric.yaml" + - $ref: "indicator_properties_histogram.yaml" + - $ref: "indicator_properties_timeslice_metric.yaml" + timeWindow: + $ref: "time_window.yaml" + budgetingMethod: + $ref: "budgeting_method.yaml" + objective: + $ref: "objective.yaml" + settings: + $ref: "settings.yaml" + revision: + description: The SLO revision + type: number + example: 2 + enabled: + description: Indicate if the SLO is enabled + type: boolean + example: true + groupBy: + description: optional group by field to use to generate an SLO per distinct value + type: string + example: "some.field" + tags: + description: List of tags + type: array + items: + type: string + createdAt: + description: The creation date + type: string + example: "2023-01-12T10:03:19.000Z" + updatedAt: + description: The last update date + type: string + example: "2023-01-12T10:03:19.000Z" + version: + description: The internal SLO version + type: number + example: 2 \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml similarity index 96% rename from x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml rename to x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml index bd58e88c7b641..df8e35996feb3 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_with_summary_response.yaml @@ -17,6 +17,7 @@ required: - tags - createdAt - updatedAt + - version properties: id: description: The identifier of the SLO. @@ -86,3 +87,7 @@ properties: description: The last update date type: string example: "2023-01-12T10:03:19.000Z" + version: + description: The internal SLO version + type: number + example: 2 \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml b/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml index 910f795aa40a7..10ed40a98d479 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml @@ -20,11 +20,15 @@ paths: "/s/{spaceId}/api/observability/slos/{sloId}": $ref: "paths/s@{spaceid}@api@slos@{sloid}.yaml" "/s/{spaceId}/api/observability/slos/{sloId}/enable": - $ref: "paths/s@{spaceid}@api@slos@{sloid}@{enable}.yaml" + $ref: "paths/s@{spaceid}@api@slos@{sloid}@enable.yaml" "/s/{spaceId}/api/observability/slos/{sloId}/disable": - $ref: "paths/s@{spaceid}@api@slos@{sloid}@{disable}.yaml" + $ref: "paths/s@{spaceid}@api@slos@{sloid}@disable.yaml" + "/s/{spaceId}/api/observability/slos/{sloId}/_reset": + $ref: "paths/s@{spaceid}@api@slos@{sloid}@_reset.yaml" "/s/{spaceId}/internal/observability/slos/_historical_summary": $ref: "paths/s@{spaceid}@api@slos@_historical_summary.yaml" + "/s/{spaceId}/internal/observability/slos/_definitions": + $ref: "paths/s@{spaceid}@api@slos@_definitions.yaml" "/s/{spaceId}/api/observability/slos/_delete_instances": $ref: "paths/s@{spaceid}@api@slos@_delete_instances.yaml" components: diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos.yaml index b606a0aac05fb..782e8fb477f94 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos.yaml @@ -68,14 +68,14 @@ get: example: 'slo.name:latency* and slo.tags : "prod"' - name: page in: query - description: The page number to return + description: The page to use for pagination, must be greater or equal than 1 schema: type: integer default: 1 example: 1 - name: perPage in: query - description: The number of SLOs to return per page + description: Number of SLOs returned by page schema: type: integer default: 25 diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@_definitions.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@_definitions.yaml new file mode 100644 index 0000000000000..508c3cc86f8fe --- /dev/null +++ b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@_definitions.yaml @@ -0,0 +1,62 @@ +get: + summary: Get the SLO definitions + operationId: getDefinitionsOp + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: ../components/headers/kbn_xsrf.yaml + - $ref: ../components/parameters/space_id.yaml + - name: includeOutdatedOnly + in: query + description: Indicates if the API returns only outdated SLO or all SLO definitions + schema: + type: boolean + example: true + - name: search + in: query + description: Filters the SLOs by name + schema: + type: string + example: 'my service availability' + - name: page + in: query + description: The page to use for pagination, must be greater or equal than 1 + schema: + type: number + example: 1 + - name: perPage + in: query + description: Number of SLOs returned by page + schema: + type: integer + default: 100 + maximum: 1000 + example: 100 + responses: + '200': + description: Successful request + content: + application/json: + schema: + $ref: '../components/schemas/find_slo_definitions_response.yaml' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '../components/schemas/400_response.yaml' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '../components/schemas/401_response.yaml' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '../components/schemas/403_response.yaml' diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}.yaml index a7740b7517464..76d8f0eb640da 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}.yaml @@ -22,7 +22,7 @@ get: content: application/json: schema: - $ref: '../components/schemas/slo_response.yaml' + $ref: '../components/schemas/slo_with_summary_response.yaml' '400': description: Bad request content: @@ -72,7 +72,7 @@ put: content: application/json: schema: - $ref: '../components/schemas/slo_response.yaml' + $ref: '../components/schemas/slo_definition_response.yaml' '400': description: Bad request content: diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@_reset.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@_reset.yaml new file mode 100644 index 0000000000000..6739d3df78328 --- /dev/null +++ b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@_reset.yaml @@ -0,0 +1,43 @@ +post: + summary: Resets an SLO. + operationId: resetSloOp + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + tags: + - slo + parameters: + - $ref: ../components/headers/kbn_xsrf.yaml + - $ref: ../components/parameters/space_id.yaml + - $ref: ../components/parameters/slo_id.yaml + responses: + '204': + description: Successful request + content: + application/json: + schema: + $ref: '../components/schemas/slo_definition_response.yaml' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '../components/schemas/400_response.yaml' + '401': + description: Unauthorized response + content: + application/json: + schema: + $ref: '../components/schemas/401_response.yaml' + '403': + description: Unauthorized response + content: + application/json: + schema: + $ref: '../components/schemas/403_response.yaml' + '404': + description: Not found response + content: + application/json: + schema: + $ref: '../components/schemas/404_response.yaml' diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@{disable}.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@disable.yaml similarity index 100% rename from x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@{disable}.yaml rename to x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@disable.yaml diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@{enable}.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@enable.yaml similarity index 100% rename from x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@{enable}.yaml rename to x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@slos@{sloid}@enable.yaml diff --git a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx index 5ec21da2efc1c..6e35ce265bad5 100644 --- a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx +++ b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx @@ -22,7 +22,7 @@ function SloSelector({ initialSlo, onSelected, errors }: Props) { const [options, setOptions] = useState>>([]); const [selectedOptions, setSelectedOptions] = useState>>(); const [searchValue, setSearchValue] = useState(''); - const { isLoading, data: sloList } = useFetchSloDefinitions({ name: searchValue }); + const { isLoading, data } = useFetchSloDefinitions({ name: searchValue }); const hasError = errors !== undefined && errors.length > 0; useEffect(() => { @@ -30,17 +30,17 @@ function SloSelector({ initialSlo, onSelected, errors }: Props) { }, [initialSlo]); useEffect(() => { - const isLoadedWithData = !isLoading && sloList !== undefined; + const isLoadedWithData = !isLoading && !!data?.results; const opts: Array> = isLoadedWithData - ? sloList.map((slo) => ({ value: slo.id, label: slo.name })) + ? data?.results?.map((slo) => ({ value: slo.id, label: slo.name })) : []; setOptions(opts); - }, [isLoading, sloList]); + }, [isLoading, data]); const onChange = (opts: Array>) => { setSelectedOptions(opts); const selectedSlo = - opts.length === 1 ? sloList?.find((slo) => slo.id === opts[0].value) : undefined; + opts.length === 1 ? data?.results?.find((slo) => slo.id === opts[0].value) : undefined; onSelected(selectedSlo); }; diff --git a/x-pack/plugins/observability/public/data/slo/slo.ts b/x-pack/plugins/observability/public/data/slo/slo.ts index 5e210526884fd..c53d55a32839f 100644 --- a/x-pack/plugins/observability/public/data/slo/slo.ts +++ b/x-pack/plugins/observability/public/data/slo/slo.ts @@ -5,9 +5,9 @@ * 2.0. */ +import { ALL_VALUE, FindSLOResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { cloneDeep } from 'lodash'; import { v4 as uuidv4 } from 'uuid'; -import { ALL_VALUE, FindSLOResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { buildDegradingSummary, buildHealthySummary, @@ -16,8 +16,8 @@ import { buildTimeslicesObjective, buildViolatedSummary, } from './common'; -import { buildCalendarAlignedTimeWindow, buildRollingTimeWindow } from './time_window'; import { buildApmAvailabilityIndicator, buildCustomKqlIndicator } from './indicator'; +import { buildCalendarAlignedTimeWindow, buildRollingTimeWindow } from './time_window'; export const emptySloList: FindSLOResponse = { results: [], @@ -68,6 +68,7 @@ const baseSlo: Omit = { enabled: true, createdAt: now, updatedAt: now, + version: 2, }; export const sloList: FindSLOResponse = { diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts index e74b3570177e4..b3b7f59dd37cf 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts @@ -5,24 +5,16 @@ * 2.0. */ -import { FindSloDefinitionsResponse, SLOResponse } from '@kbn/slo-schema'; -import { - QueryObserverResult, - RefetchOptions, - RefetchQueryFilters, - useQuery, -} from '@tanstack/react-query'; +import { FindSLODefinitionsResponse } from '@kbn/slo-schema'; +import { useQuery } from '@tanstack/react-query'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; export interface UseFetchSloDefinitionsResponse { + data: FindSLODefinitionsResponse | undefined; isLoading: boolean; isSuccess: boolean; isError: boolean; - data: SLOResponse[] | undefined; - refetch: ( - options?: (RefetchOptions & RefetchQueryFilters) | undefined - ) => Promise>; } interface Params { @@ -33,18 +25,13 @@ export function useFetchSloDefinitions({ name = '' }: Params): UseFetchSloDefini const { http } = useKibana().services; const search = name.endsWith('*') ? name : `${name}*`; - const { isLoading, isError, isSuccess, data, refetch } = useQuery({ + const { isLoading, isError, isSuccess, data } = useQuery({ queryKey: sloKeys.definitions(search), queryFn: async ({ signal }) => { try { - const response = await http.get( - '/internal/observability/slos/_definitions', - { - query: { - search, - }, - signal, - } + const response = await http.get( + '/api/observability/slos/_definitions', + { query: { search }, signal } ); return response; @@ -56,5 +43,5 @@ export function useFetchSloDefinitions({ name = '' }: Params): UseFetchSloDefini refetchOnWindowFocus: false, }); - return { isLoading, isError, isSuccess, data, refetch }; + return { isLoading, isError, isSuccess, data }; } diff --git a/x-pack/plugins/observability/public/locators/slo_edit.test.ts b/x-pack/plugins/observability/public/locators/slo_edit.test.ts index a01a988dcdb55..cb485ea3e3877 100644 --- a/x-pack/plugins/observability/public/locators/slo_edit.test.ts +++ b/x-pack/plugins/observability/public/locators/slo_edit.test.ts @@ -20,7 +20,7 @@ describe('SloEditLocator', () => { it('should return correct url when slo is provided', async () => { const location = await locator.getLocation(buildSlo({ id: 'foo' })); expect(location.path).toEqual( - "/slos/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z')" + "/slos/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z',version:2)" ); }); }); diff --git a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx index de21fb145677f..c9b04fee85eb2 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx @@ -257,6 +257,7 @@ describe('SLO Details Page', () => { settings, updatedAt, instanceId, + version, ...newSlo } = slo; diff --git a/x-pack/plugins/observability/server/assets/component_templates/slo_mappings_template.ts b/x-pack/plugins/observability/server/assets/component_templates/slo_mappings_template.ts index b4aef3c39a80d..5e1778596ce16 100644 --- a/x-pack/plugins/observability/server/assets/component_templates/slo_mappings_template.ts +++ b/x-pack/plugins/observability/server/assets/component_templates/slo_mappings_template.ts @@ -12,6 +12,14 @@ export const getSLOMappingsTemplate = (name: string) => ({ template: { mappings: { properties: { + event: { + properties: { + ingested: { + type: 'date', + format: 'strict_date_optional_time', + }, + }, + }, '@timestamp': { type: 'date', format: 'date_optional_time||epoch_millis', @@ -21,11 +29,9 @@ export const getSLOMappingsTemplate = (name: string) => ({ properties: { name: { type: 'keyword', - ignore_above: 256, }, environment: { type: 'keyword', - ignore_above: 256, }, }, }, @@ -33,11 +39,9 @@ export const getSLOMappingsTemplate = (name: string) => ({ properties: { name: { type: 'keyword', - ignore_above: 256, }, type: { type: 'keyword', - ignore_above: 256, }, }, }, @@ -50,56 +54,8 @@ export const getSLOMappingsTemplate = (name: string) => ({ revision: { type: 'long', }, - groupBy: { - type: 'keyword', - ignore_above: 256, - }, instanceId: { type: 'keyword', - ignore_above: 256, - }, - name: { - type: 'keyword', - ignore_above: 256, - }, - description: { - type: 'keyword', - ignore_above: 256, - }, - tags: { - type: 'keyword', - ignore_above: 256, - }, - indicator: { - properties: { - type: { - type: 'keyword', - ignore_above: 256, - }, - }, - }, - objective: { - properties: { - target: { - type: 'double', - }, - sliceDurationInSeconds: { - type: 'long', - }, - }, - }, - budgetingMethod: { - type: 'keyword', - }, - timeWindow: { - properties: { - duration: { - type: 'keyword', - }, - type: { - type: 'keyword', - }, - }, }, numerator: { type: 'long', @@ -110,6 +66,9 @@ export const getSLOMappingsTemplate = (name: string) => ({ isGoodSlice: { type: 'byte', }, + groupings: { + type: 'flattened', + }, }, }, }, diff --git a/x-pack/plugins/observability/server/assets/component_templates/slo_summary_mappings_template.ts b/x-pack/plugins/observability/server/assets/component_templates/slo_summary_mappings_template.ts index 9641b64f5f1d0..c75eb8586334a 100644 --- a/x-pack/plugins/observability/server/assets/component_templates/slo_summary_mappings_template.ts +++ b/x-pack/plugins/observability/server/assets/component_templates/slo_summary_mappings_template.ts @@ -17,11 +17,9 @@ export const getSLOSummaryMappingsTemplate = (name: string) => ({ properties: { name: { type: 'keyword', - ignore_above: 256, }, environment: { type: 'keyword', - ignore_above: 256, }, }, }, @@ -29,11 +27,9 @@ export const getSLOSummaryMappingsTemplate = (name: string) => ({ properties: { name: { type: 'keyword', - ignore_above: 256, }, type: { type: 'keyword', - ignore_above: 256, }, }, }, @@ -48,29 +44,49 @@ export const getSLOSummaryMappingsTemplate = (name: string) => ({ }, groupBy: { type: 'keyword', - ignore_above: 256, + }, + groupings: { + type: 'flattened', }, instanceId: { type: 'keyword', - ignore_above: 256, + fields: { + text: { + type: 'text', + }, + }, }, name: { - type: 'keyword', - ignore_above: 256, + type: 'text', + fields: { + keyword: { + type: 'keyword', + }, + }, }, description: { - type: 'keyword', - ignore_above: 256, + type: 'text', }, tags: { type: 'keyword', - ignore_above: 256, }, indicator: { properties: { type: { type: 'keyword', - ignore_above: 256, + }, + }, + }, + objective: { + properties: { + target: { + type: 'double', + }, + timesliceTarget: { + type: 'double', + }, + timesliceWindow: { + type: 'keyword', }, }, }, @@ -115,11 +131,21 @@ export const getSLOSummaryMappingsTemplate = (name: string) => ({ }, status: { type: 'keyword', - ignore_above: 32, }, isTempDoc: { type: 'boolean', }, + latestSliTimestamp: { + type: 'date', + format: 'date_optional_time||epoch_millis', + }, + summaryUpdatedAt: { + type: 'date', + format: 'date_optional_time||epoch_millis', + }, + spaceId: { + type: 'keyword', + }, }, }, }, diff --git a/x-pack/plugins/observability/server/assets/ingest_templates/slo_pipeline_template.ts b/x-pack/plugins/observability/server/assets/ingest_templates/slo_pipeline_template.ts index 30724989925d7..6a3a6684ab191 100644 --- a/x-pack/plugins/observability/server/assets/ingest_templates/slo_pipeline_template.ts +++ b/x-pack/plugins/observability/server/assets/ingest_templates/slo_pipeline_template.ts @@ -9,18 +9,25 @@ import { SLO_RESOURCES_VERSION } from '../../../common/slo/constants'; export const getSLOPipelineTemplate = (id: string, indexNamePrefix: string) => ({ id, - description: 'Monthly date-time index naming for SLO data', + description: 'Ingest pipeline for SLO rollup data', processors: [ + { + set: { + field: 'event.ingested', + value: '{{{_ingest.timestamp}}}', + }, + }, { date_index_name: { field: '@timestamp', index_name_prefix: indexNamePrefix, date_rounding: 'M', + date_formats: ['UNIX_MS', 'ISO8601', "yyyy-MM-dd'T'HH:mm:ss.SSSXX"], }, }, ], _meta: { - description: 'SLO ingest pipeline', + description: 'Ingest pipeline for SLO rollup data', version: SLO_RESOURCES_VERSION, managed: true, managed_by: 'observability', diff --git a/x-pack/plugins/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts b/x-pack/plugins/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts index 8246504ac216c..d279c925f86bf 100644 --- a/x-pack/plugins/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts +++ b/x-pack/plugins/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts @@ -5,56 +5,167 @@ * 2.0. */ -import { SLO_RESOURCES_VERSION } from '../../../common/slo/constants'; +import { timeslicesBudgetingMethodSchema } from '@kbn/slo-schema'; +import { getSLOSummaryPipelineId, SLO_RESOURCES_VERSION } from '../../../common/slo/constants'; +import { SLO } from '../../domain/models'; -export const getSLOSummaryPipelineTemplate = (id: string) => ({ - id, - description: 'SLO summary ingest pipeline', - processors: [ - { - split: { - description: 'Split comma separated list of tags into an array', - field: 'slo.tags', - separator: ',', +export const getSLOSummaryPipelineTemplate = (slo: SLO, spaceId: string) => { + const errorBudgetEstimated = + slo.budgetingMethod === 'occurrences' && slo.timeWindow.type === 'calendarAligned'; + + const optionalObjectiveTimesliceProcessors = timeslicesBudgetingMethodSchema.is( + slo.budgetingMethod + ) + ? [ + { + set: { + description: 'Set objective.timesliceTarget field', + field: 'slo.objective.timesliceTarget', + value: slo.objective.timesliceTarget, + }, + }, + { + set: { + description: 'Set objective.timesliceWindow field', + field: 'slo.objective.timesliceWindow', + value: slo.objective.timesliceWindow!.format(), + }, + }, + ] + : []; + + return { + id: getSLOSummaryPipelineId(slo.id, slo.revision), + description: `Ingest pipeline for SLO summary data [id: ${slo.id}, revision: ${slo.revision}]`, + processors: [ + { + set: { + description: 'Set errorBudgetEstimated field', + field: 'errorBudgetEstimated', + value: errorBudgetEstimated, + }, }, - }, - { - set: { - description: "if 'statusCode == 0', set status to NO_DATA", - if: 'ctx.statusCode == 0', - field: 'status', - value: 'NO_DATA', + { + set: { + description: 'Set isTempDoc field', + field: 'isTempDoc', + value: false, + }, }, - }, - { - set: { - description: "if 'statusCode == 1', set statusLabel to VIOLATED", - if: 'ctx.statusCode == 1', - field: 'status', - value: 'VIOLATED', + { + set: { + description: 'Set groupBy field', + field: 'slo.groupBy', + value: slo.groupBy, + }, }, - }, - { - set: { - description: "if 'statusCode == 2', set status to DEGRADING", - if: 'ctx.statusCode == 2', - field: 'status', - value: 'DEGRADING', + { + set: { + description: 'Set name field', + field: 'slo.name', + value: slo.name, + }, }, - }, - { - set: { - description: "if 'statusCode == 4', set status to HEALTHY", - if: 'ctx.statusCode == 4', - field: 'status', - value: 'HEALTHY', + { + set: { + description: 'Set description field', + field: 'slo.description', + value: slo.description, + }, + }, + { + set: { + description: 'Set tags field', + field: 'slo.tags', + value: slo.tags, + }, + }, + { + set: { + description: 'Set indicator.type field', + field: 'slo.indicator.type', + value: slo.indicator.type, + }, + }, + { + set: { + description: 'Set budgetingMethod field', + field: 'slo.budgetingMethod', + value: slo.budgetingMethod, + }, + }, + { + set: { + description: 'Set timeWindow.duration field', + field: 'slo.timeWindow.duration', + value: slo.timeWindow.duration.format(), + }, + }, + { + set: { + description: 'Set timeWindow.type field', + field: 'slo.timeWindow.type', + value: slo.timeWindow.type, + }, + }, + { + set: { + description: 'Set objective.target field', + field: 'slo.objective.target', + value: slo.objective.target, + }, + }, + ...optionalObjectiveTimesliceProcessors, + { + set: { + description: "if 'statusCode == 0', set status to NO_DATA", + if: 'ctx.statusCode == 0', + field: 'status', + value: 'NO_DATA', + }, + }, + { + set: { + description: "if 'statusCode == 1', set statusLabel to VIOLATED", + if: 'ctx.statusCode == 1', + field: 'status', + value: 'VIOLATED', + }, + }, + { + set: { + description: "if 'statusCode == 2', set status to DEGRADING", + if: 'ctx.statusCode == 2', + field: 'status', + value: 'DEGRADING', + }, + }, + { + set: { + description: "if 'statusCode == 4', set status to HEALTHY", + if: 'ctx.statusCode == 4', + field: 'status', + value: 'HEALTHY', + }, + }, + { + set: { + field: 'summaryUpdatedAt', + value: '{{{_ingest.timestamp}}}', + }, + }, + { + set: { + field: 'spaceId', + value: spaceId, + }, }, + ], + _meta: { + description: `Ingest pipeline for SLO summary data [id: ${slo.id}, revision: ${slo.revision}]`, + version: SLO_RESOURCES_VERSION, + managed: true, + managed_by: 'observability', }, - ], - _meta: { - description: 'SLO summary ingest pipeline', - version: SLO_RESOURCES_VERSION, - managed: true, - managed_by: 'observability', - }, -}); + }; +}; diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 6726b8abfe178..932016b02a410 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -18,21 +18,21 @@ import { Plugin, PluginInitializerContext, } from '@kbn/core/server'; -import { LOG_EXPLORER_LOCATOR_ID, LogExplorerLocatorParams } from '@kbn/deeplinks-observability'; +import { LogExplorerLocatorParams, LOG_EXPLORER_LOCATOR_ID } from '@kbn/deeplinks-observability'; import { PluginSetupContract as FeaturesSetup } from '@kbn/features-plugin/server'; import { hiddenTypes as filesSavedObjectTypes } from '@kbn/files-plugin/server/saved_objects'; import type { GuidedOnboardingPluginSetup } from '@kbn/guided-onboarding-plugin/server'; import { i18n } from '@kbn/i18n'; -import { RuleRegistryPluginSetupContract } from '@kbn/rule-registry-plugin/server'; -import { SharePluginSetup } from '@kbn/share-plugin/server'; -import { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; -import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { ApmRuleType, ES_QUERY_ID, METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, } from '@kbn/rule-data-utils'; +import { RuleRegistryPluginSetupContract } from '@kbn/rule-registry-plugin/server'; +import { SharePluginSetup } from '@kbn/share-plugin/server'; +import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { ObservabilityConfig } from '.'; import { casesFeatureId, observabilityFeatureId, sloFeatureId } from '../common'; import { SLO_BURN_RATE_RULE_TYPE_ID } from '../common/constants'; @@ -52,11 +52,7 @@ import { getObservabilityServerRouteRepository } from './routes/get_global_obser import { registerRoutes } from './routes/register_routes'; import { slo, SO_SLO_TYPE } from './saved_objects'; import { threshold } from './saved_objects/threshold'; -import { - DefaultResourceInstaller, - DefaultSLOInstaller, - DefaultSummaryTransformInstaller, -} from './services/slo'; +import { DefaultResourceInstaller, DefaultSLOInstaller } from './services/slo'; import { uiSettings } from './ui_settings'; @@ -75,6 +71,7 @@ interface PluginSetup { interface PluginStart { alerting: PluginStartContract; + spaces?: SpacesPluginStart; } const sloRuleTypes = [SLO_BURN_RATE_RULE_TYPE_ID]; @@ -350,6 +347,7 @@ export class ObservabilityPlugin implements Plugin { ...plugins, core, }, + spaces: pluginStart.spaces, ruleDataService, getRulesClientWithRequest: pluginStart.alerting.getRulesClientWithRequest, }, @@ -360,15 +358,7 @@ export class ObservabilityPlugin implements Plugin { const esInternalClient = coreStart.elasticsearch.client.asInternalUser; const sloResourceInstaller = new DefaultResourceInstaller(esInternalClient, this.logger); - const sloSummaryInstaller = new DefaultSummaryTransformInstaller( - esInternalClient, - this.logger - ); - const sloInstaller = new DefaultSLOInstaller( - sloResourceInstaller, - sloSummaryInstaller, - this.logger - ); + const sloInstaller = new DefaultSLOInstaller(sloResourceInstaller, this.logger); sloInstaller.install(); }); diff --git a/x-pack/plugins/observability/server/routes/register_routes.ts b/x-pack/plugins/observability/server/routes/register_routes.ts index 7726e54793d32..92980f20c4646 100644 --- a/x-pack/plugins/observability/server/routes/register_routes.ts +++ b/x-pack/plugins/observability/server/routes/register_routes.ts @@ -14,6 +14,7 @@ import { parseEndpoint, routeValidationObject, } from '@kbn/server-route-repository'; +import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; import axios from 'axios'; import * as t from 'io-ts'; import { ObservabilityConfig } from '..'; @@ -33,6 +34,7 @@ export interface RegisterRoutesDependencies { pluginsSetup: { core: CoreSetup; }; + spaces?: SpacesPluginStart; ruleDataService: RuleDataPluginService; getRulesClientWithRequest: (request: KibanaRequest) => RulesClientApi; } diff --git a/x-pack/plugins/observability/server/routes/slo/route.ts b/x-pack/plugins/observability/server/routes/slo/route.ts index ade3f1714ddfb..7ad4b7c36dcc7 100644 --- a/x-pack/plugins/observability/server/routes/slo/route.ts +++ b/x-pack/plugins/observability/server/routes/slo/route.ts @@ -19,12 +19,14 @@ import { getSLOInstancesParamsSchema, getSLOParamsSchema, manageSLOParamsSchema, + resetSLOParamsSchema, updateSLOParamsSchema, } from '@kbn/slo-schema'; import type { IndicatorTypes } from '../../domain/models'; import { CreateSLO, DefaultSummaryClient, + DefaultSummaryTransformManager, DefaultTransformManager, DeleteSLO, DeleteSLOInstances, @@ -41,15 +43,17 @@ import { GetPreviewData } from '../../services/slo/get_preview_data'; import { GetSLOInstances } from '../../services/slo/get_slo_instances'; import { DefaultHistoricalSummaryClient } from '../../services/slo/historical_summary_client'; import { ManageSLO } from '../../services/slo/manage_slo'; +import { ResetSLO } from '../../services/slo/reset_slo'; import { DefaultSummarySearchClient } from '../../services/slo/summary_search_client'; +import { DefaultSummaryTransformGenerator } from '../../services/slo/summary_transform_generator/summary_transform_generator'; import { ApmTransactionDurationTransformGenerator, ApmTransactionErrorRateTransformGenerator, HistogramTransformGenerator, KQLCustomTransformGenerator, MetricCustomTransformGenerator, - TransformGenerator, TimesliceMetricTransformGenerator, + TransformGenerator, } from '../../services/slo/transform_generators'; import type { ObservabilityRequestHandlerContext } from '../../types'; import { createObservabilityServerRoute } from '../create_observability_server_route'; @@ -79,14 +83,30 @@ const createSLORoute = createObservabilityServerRoute({ access: 'public', }, params: createSLOParamsSchema, - handler: async ({ context, params, logger }) => { + handler: async ({ context, params, logger, dependencies, request }) => { await assertPlatinumLicense(context); + const spaceId = + (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; + const esClient = (await context.core).elasticsearch.client.asCurrentUser; const soClient = (await context.core).savedObjects.client; const repository = new KibanaSavedObjectsSLORepository(soClient); const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); - const createSLO = new CreateSLO(esClient, repository, transformManager); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const createSLO = new CreateSLO( + esClient, + repository, + transformManager, + summaryTransformManager, + logger, + spaceId + ); const response = await createSLO.execute(params.body); @@ -101,15 +121,30 @@ const updateSLORoute = createObservabilityServerRoute({ access: 'public', }, params: updateSLOParamsSchema, - handler: async ({ context, params, logger }) => { + handler: async ({ context, request, params, logger, dependencies }) => { await assertPlatinumLicense(context); + const spaceId = + (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; const esClient = (await context.core).elasticsearch.client.asCurrentUser; const soClient = (await context.core).savedObjects.client; const repository = new KibanaSavedObjectsSLORepository(soClient); const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); - const updateSLO = new UpdateSLO(repository, transformManager, esClient); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const updateSLO = new UpdateSLO( + repository, + transformManager, + summaryTransformManager, + esClient, + logger, + spaceId + ); const response = await updateSLO.execute(params.path.id, params.body); @@ -140,7 +175,19 @@ const deleteSLORoute = createObservabilityServerRoute({ const repository = new KibanaSavedObjectsSLORepository(soClient); const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); - const deleteSLO = new DeleteSLO(repository, transformManager, esClient, rulesClient); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const deleteSLO = new DeleteSLO( + repository, + transformManager, + summaryTransformManager, + esClient, + rulesClient + ); await deleteSLO.execute(params.path.id); }, @@ -183,7 +230,13 @@ const enableSLORoute = createObservabilityServerRoute({ const repository = new KibanaSavedObjectsSLORepository(soClient); const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); - const manageSLO = new ManageSLO(repository, transformManager); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const manageSLO = new ManageSLO(repository, transformManager, summaryTransformManager); const response = await manageSLO.enable(params.path.id); @@ -206,7 +259,13 @@ const disableSLORoute = createObservabilityServerRoute({ const repository = new KibanaSavedObjectsSLORepository(soClient); const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); - const manageSLO = new ManageSLO(repository, transformManager); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const manageSLO = new ManageSLO(repository, transformManager, summaryTransformManager); const response = await manageSLO.disable(params.path.id); @@ -214,6 +273,44 @@ const disableSLORoute = createObservabilityServerRoute({ }, }); +const resetSLORoute = createObservabilityServerRoute({ + endpoint: 'POST /api/observability/slos/{id}/_reset 2023-10-31', + options: { + tags: ['access:slo_write'], + access: 'public', + }, + params: resetSLOParamsSchema, + handler: async ({ context, request, params, logger, dependencies }) => { + await assertPlatinumLicense(context); + + const spaceId = + (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; + const soClient = (await context.core).savedObjects.client; + const esClient = (await context.core).elasticsearch.client.asCurrentUser; + + const repository = new KibanaSavedObjectsSLORepository(soClient); + const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); + const summaryTransformManager = new DefaultSummaryTransformManager( + new DefaultSummaryTransformGenerator(), + esClient, + logger + ); + + const resetSLO = new ResetSLO( + esClient, + repository, + transformManager, + summaryTransformManager, + logger, + spaceId + ); + + const response = await resetSLO.execute(params.path.id); + + return response; + }, +}); + const findSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos 2023-10-31', options: { @@ -221,13 +318,16 @@ const findSLORoute = createObservabilityServerRoute({ access: 'public', }, params: findSLOParamsSchema, - handler: async ({ context, params, logger }) => { + handler: async ({ context, request, params, logger, dependencies }) => { await assertPlatinumLicense(context); + const spaceId = + (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; + const soClient = (await context.core).savedObjects.client; const esClient = (await context.core).elasticsearch.client.asCurrentUser; const repository = new KibanaSavedObjectsSLORepository(soClient); - const summarySearchClient = new DefaultSummarySearchClient(esClient, logger); + const summarySearchClient = new DefaultSummarySearchClient(esClient, logger, spaceId); const findSLO = new FindSLO(repository, summarySearchClient); const response = await findSLO.execute(params?.query ?? {}); @@ -253,10 +353,9 @@ const deleteSloInstancesRoute = createObservabilityServerRoute({ }); const findSloDefinitionsRoute = createObservabilityServerRoute({ - endpoint: 'GET /internal/observability/slos/_definitions', + endpoint: 'GET /api/observability/slos/_definitions 2023-10-31', options: { tags: ['access:slo_read'], - access: 'internal', }, params: findSloDefinitionsParamsSchema, handler: async ({ context, params }) => { @@ -266,7 +365,7 @@ const findSloDefinitionsRoute = createObservabilityServerRoute({ const repository = new KibanaSavedObjectsSLORepository(soClient); const findSloDefinitions = new FindSLODefinitions(repository); - const response = await findSloDefinitions.execute(params.query.search); + const response = await findSloDefinitions.execute(params?.query ?? {}); return response; }, @@ -395,4 +494,5 @@ export const sloRouteRepository = { ...getSloBurnRates, ...getPreviewData, ...getSLOInstancesRoute, + ...resetSLORoute, }; diff --git a/x-pack/plugins/observability/server/saved_objects/slo.ts b/x-pack/plugins/observability/server/saved_objects/slo.ts index 41cb509d83755..058596e160fd7 100644 --- a/x-pack/plugins/observability/server/saved_objects/slo.ts +++ b/x-pack/plugins/observability/server/saved_objects/slo.ts @@ -17,7 +17,6 @@ type StoredSLOBefore890 = StoredSLO & { isCalendar?: boolean; }; }; - const migrateSlo890: SavedObjectMigrationFn = (doc) => { const { timeWindow, ...other } = doc.attributes; return { @@ -38,6 +37,21 @@ export const slo: SavedObjectsType = { name: SO_SLO_TYPE, hidden: false, namespaceType: 'multiple-isolated', + switchToModelVersionAt: '8.10.0', + modelVersions: { + 1: { + changes: [ + { type: 'mappings_addition', addedMappings: { version: { type: 'long' } } }, + { + type: 'data_backfill', + backfillFn: (doc) => { + // we explicitely set the version to 1, so we know which SLOs requires a migration to the following version. + return { attributes: { version: doc.attributes.version ?? 1 } }; + }, + }, + ], + }, + }, mappings: { dynamic: false, properties: { @@ -53,6 +67,7 @@ export const slo: SavedObjectsType = { budgetingMethod: { type: 'keyword' }, enabled: { type: 'boolean' }, tags: { type: 'keyword' }, + version: { type: 'long' }, }, }, management: { diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap index e66f1f8124a11..8c2cfc3b0d1f5 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap @@ -1,6 +1,144 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CreateSLO happy path calls the expected services 1`] = ` +Array [ + Object { + "_meta": Object { + "description": "Ingest pipeline for SLO summary data [id: unique-id, revision: 1]", + "managed": true, + "managed_by": "observability", + "version": 3, + }, + "description": "Ingest pipeline for SLO summary data [id: unique-id, revision: 1]", + "id": ".slo-observability.summary.pipeline-unique-id-1", + "processors": Array [ + Object { + "set": Object { + "description": "Set errorBudgetEstimated field", + "field": "errorBudgetEstimated", + "value": false, + }, + }, + Object { + "set": Object { + "description": "Set isTempDoc field", + "field": "isTempDoc", + "value": false, + }, + }, + Object { + "set": Object { + "description": "Set groupBy field", + "field": "slo.groupBy", + "value": "*", + }, + }, + Object { + "set": Object { + "description": "Set name field", + "field": "slo.name", + "value": "irrelevant", + }, + }, + Object { + "set": Object { + "description": "Set description field", + "field": "slo.description", + "value": "irrelevant", + }, + }, + Object { + "set": Object { + "description": "Set tags field", + "field": "slo.tags", + "value": Array [], + }, + }, + Object { + "set": Object { + "description": "Set indicator.type field", + "field": "slo.indicator.type", + "value": "sli.apm.transactionErrorRate", + }, + }, + Object { + "set": Object { + "description": "Set budgetingMethod field", + "field": "slo.budgetingMethod", + "value": "occurrences", + }, + }, + Object { + "set": Object { + "description": "Set timeWindow.duration field", + "field": "slo.timeWindow.duration", + "value": "7d", + }, + }, + Object { + "set": Object { + "description": "Set timeWindow.type field", + "field": "slo.timeWindow.type", + "value": "rolling", + }, + }, + Object { + "set": Object { + "description": "Set objective.target field", + "field": "slo.objective.target", + "value": 0.99, + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 0', set status to NO_DATA", + "field": "status", + "if": "ctx.statusCode == 0", + "value": "NO_DATA", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 1', set statusLabel to VIOLATED", + "field": "status", + "if": "ctx.statusCode == 1", + "value": "VIOLATED", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 2', set status to DEGRADING", + "field": "status", + "if": "ctx.statusCode == 2", + "value": "DEGRADING", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 4', set status to HEALTHY", + "field": "status", + "if": "ctx.statusCode == 4", + "value": "HEALTHY", + }, + }, + Object { + "set": Object { + "field": "summaryUpdatedAt", + "value": "{{{_ingest.timestamp}}}", + }, + }, + Object { + "set": Object { + "field": "spaceId", + "value": "some-space", + }, + }, + ], + }, +] +`; + +exports[`CreateSLO happy path calls the expected services 2`] = ` Array [ Object { "document": Object { @@ -25,6 +163,11 @@ Array [ }, "instanceId": "*", "name": "irrelevant", + "objective": Object { + "target": 0.99, + "timesliceTarget": null, + "timesliceWindow": null, + }, "revision": 1, "tags": Array [], "timeWindow": Object { @@ -32,6 +175,7 @@ Array [ "type": "rolling", }, }, + "spaceId": "some-space", "status": "NO_DATA", "statusCode": 0, "totalEvents": 0, @@ -41,7 +185,7 @@ Array [ }, }, "id": "slo-unique-id", - "index": ".slo-observability.summary-v2.temp", + "index": ".slo-observability.summary-v3.temp", "refresh": true, }, ] diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/delete_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/delete_slo.test.ts.snap new file mode 100644 index 0000000000000..3edfb0cd194b0 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/delete_slo.test.ts.snap @@ -0,0 +1,177 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`DeleteSLO happy path removes all resources associatde to the slo 1`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "irrelevant", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 2`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 3`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 4`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 5`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 6`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "id": ".slo-observability.summary.pipeline-irrelevant-1", + }, + Object { + "ignore": Array [ + 404, + ], + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 7`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "index": ".slo-observability.sli-v3*", + "query": Object { + "match": Object { + "slo.id": "irrelevant", + }, + }, + "wait_for_completion": false, + }, + ], + Array [ + Object { + "index": ".slo-observability.summary-v3*", + "query": Object { + "match": Object { + "slo.id": "irrelevant", + }, + }, + "refresh": true, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 8`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "filter": "alert.attributes.params.sloId:irrelevant", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`DeleteSLO happy path removes all resources associatde to the slo 9`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "irrelevant", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/get_slo_instances.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/get_slo_instances.test.ts.snap index be3b681db0af8..8ad9792a22b24 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/get_slo_instances.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/get_slo_instances.test.ts.snap @@ -11,7 +11,7 @@ Array [ }, }, }, - "index": ".slo-observability.sli-v2*", + "index": ".slo-observability.sli-v3*", "query": Object { "bool": Object { "filter": Array [ diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/manage_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/manage_slo.test.ts.snap new file mode 100644 index 0000000000000..aff53e4882818 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/manage_slo.test.ts.snap @@ -0,0 +1,65 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ManageSLO Disable disables the slo when enabled 1`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ManageSLO Disable disables the slo when enabled 2`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ManageSLO Enable enables the slo when disabled 1`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ManageSLO Enable enables the slo when disabled 2`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap new file mode 100644 index 0000000000000..9ad1d09bd1ef8 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap @@ -0,0 +1,489 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ResetSLO resets all associated resources 1`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 2`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 3`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 4`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 5`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "index": ".slo-observability.sli-v3*", + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "term": Object { + "slo.id": "irrelevant", + }, + }, + ], + }, + }, + "refresh": true, + }, + ], + Array [ + Object { + "index": ".slo-observability.summary-v3*", + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "term": Object { + "slo.id": "irrelevant", + }, + }, + ], + }, + }, + "refresh": true, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 6`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "budgetingMethod": "occurrences", + "createdAt": 2023-01-01T00:00:00.000Z, + "description": "irrelevant", + "enabled": true, + "groupBy": "*", + "id": "irrelevant", + "indicator": Object { + "params": Object { + "environment": "irrelevant", + "index": "metrics-apm*", + "service": "irrelevant", + "threshold": 500, + "transactionName": "irrelevant", + "transactionType": "irrelevant", + }, + "type": "sli.apm.transactionDuration", + }, + "name": "irrelevant", + "objective": Object { + "target": 0.999, + }, + "revision": 1, + "settings": Object { + "frequency": Duration { + "unit": "m", + "value": 1, + }, + "syncDelay": Duration { + "unit": "m", + "value": 1, + }, + }, + "tags": Array [ + "critical", + "k8s", + ], + "timeWindow": Object { + "duration": Duration { + "unit": "d", + "value": 7, + }, + "type": "rolling", + }, + "updatedAt": 2023-01-01T00:00:00.000Z, + "version": 1, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 7`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 8`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "_meta": Object { + "description": "Ingest pipeline for SLO summary data [id: irrelevant, revision: 1]", + "managed": true, + "managed_by": "observability", + "version": 3, + }, + "description": "Ingest pipeline for SLO summary data [id: irrelevant, revision: 1]", + "id": ".slo-observability.summary.pipeline-irrelevant-1", + "processors": Array [ + Object { + "set": Object { + "description": "Set errorBudgetEstimated field", + "field": "errorBudgetEstimated", + "value": false, + }, + }, + Object { + "set": Object { + "description": "Set isTempDoc field", + "field": "isTempDoc", + "value": false, + }, + }, + Object { + "set": Object { + "description": "Set groupBy field", + "field": "slo.groupBy", + "value": "*", + }, + }, + Object { + "set": Object { + "description": "Set name field", + "field": "slo.name", + "value": "irrelevant", + }, + }, + Object { + "set": Object { + "description": "Set description field", + "field": "slo.description", + "value": "irrelevant", + }, + }, + Object { + "set": Object { + "description": "Set tags field", + "field": "slo.tags", + "value": Array [ + "critical", + "k8s", + ], + }, + }, + Object { + "set": Object { + "description": "Set indicator.type field", + "field": "slo.indicator.type", + "value": "sli.apm.transactionDuration", + }, + }, + Object { + "set": Object { + "description": "Set budgetingMethod field", + "field": "slo.budgetingMethod", + "value": "occurrences", + }, + }, + Object { + "set": Object { + "description": "Set timeWindow.duration field", + "field": "slo.timeWindow.duration", + "value": "7d", + }, + }, + Object { + "set": Object { + "description": "Set timeWindow.type field", + "field": "slo.timeWindow.type", + "value": "rolling", + }, + }, + Object { + "set": Object { + "description": "Set objective.target field", + "field": "slo.objective.target", + "value": 0.999, + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 0', set status to NO_DATA", + "field": "status", + "if": "ctx.statusCode == 0", + "value": "NO_DATA", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 1', set statusLabel to VIOLATED", + "field": "status", + "if": "ctx.statusCode == 1", + "value": "VIOLATED", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 2', set status to DEGRADING", + "field": "status", + "if": "ctx.statusCode == 2", + "value": "DEGRADING", + }, + }, + Object { + "set": Object { + "description": "if 'statusCode == 4', set status to HEALTHY", + "field": "status", + "if": "ctx.statusCode == 4", + "value": "HEALTHY", + }, + }, + Object { + "set": Object { + "field": "summaryUpdatedAt", + "value": "{{{_ingest.timestamp}}}", + }, + }, + Object { + "set": Object { + "field": "spaceId", + "value": "some-space", + }, + }, + ], + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 9`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "budgetingMethod": "occurrences", + "createdAt": 2023-01-01T00:00:00.000Z, + "description": "irrelevant", + "enabled": true, + "groupBy": "*", + "id": "irrelevant", + "indicator": Object { + "params": Object { + "environment": "irrelevant", + "index": "metrics-apm*", + "service": "irrelevant", + "threshold": 500, + "transactionName": "irrelevant", + "transactionType": "irrelevant", + }, + "type": "sli.apm.transactionDuration", + }, + "name": "irrelevant", + "objective": Object { + "target": 0.999, + }, + "revision": 1, + "settings": Object { + "frequency": Duration { + "unit": "m", + "value": 1, + }, + "syncDelay": Duration { + "unit": "m", + "value": 1, + }, + }, + "tags": Array [ + "critical", + "k8s", + ], + "timeWindow": Object { + "duration": Duration { + "unit": "d", + "value": 7, + }, + "type": "rolling", + }, + "updatedAt": 2023-01-01T00:00:00.000Z, + "version": 1, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 10`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-irrelevant-1", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`ResetSLO resets all associated resources 11`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "document": Object { + "errorBudgetConsumed": 0, + "errorBudgetEstimated": false, + "errorBudgetInitial": 0.0010000000000000009, + "errorBudgetRemaining": 1, + "goodEvents": 0, + "isTempDoc": true, + "service": Object { + "environment": null, + "name": null, + }, + "sliValue": -1, + "slo": Object { + "budgetingMethod": "occurrences", + "description": "irrelevant", + "groupBy": "*", + "id": "irrelevant", + "indicator": Object { + "type": "sli.apm.transactionDuration", + }, + "instanceId": "*", + "name": "irrelevant", + "objective": Object { + "target": 0.999, + "timesliceTarget": null, + "timesliceWindow": null, + }, + "revision": 1, + "tags": Array [ + "critical", + "k8s", + ], + "timeWindow": Object { + "duration": "7d", + "type": "rolling", + }, + }, + "spaceId": "some-space", + "status": "NO_DATA", + "statusCode": 0, + "totalEvents": 0, + "transaction": Object { + "name": null, + "type": null, + }, + }, + "id": "slo-irrelevant", + "index": ".slo-observability.summary-v3.temp", + "refresh": true, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], +} +`; diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/summary_search_client.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/summary_search_client.test.ts.snap index ea94e840aac0e..daf5e47a0a66c 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/summary_search_client.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/summary_search_client.test.ts.snap @@ -3,7 +3,7 @@ exports[`Summary Search Client returns the summary documents without duplicate temporary summary documents 1`] = ` Array [ Object { - "index": ".slo-observability.summary-v2*", + "index": ".slo-observability.summary-v3*", "query": Object { "bool": Object { "filter": Array [ diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/update_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/update_slo.test.ts.snap index ae7a966951f7c..c1f0099d24343 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/update_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/update_slo.test.ts.snap @@ -1,51 +1,88 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UpdateSLO index a temporary summary document 1`] = ` -Array [ - Object { - "document": Object { - "errorBudgetConsumed": 0, - "errorBudgetEstimated": false, - "errorBudgetInitial": 0.0010000000000000009, - "errorBudgetRemaining": 1, - "goodEvents": 0, - "isTempDoc": true, - "service": Object { - "environment": null, - "name": null, +exports[`UpdateSLO when error happens during the update restores the previous SLO definition in the repository 1`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-original-id-2", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`UpdateSLO when error happens during the update restores the previous SLO definition in the repository 2`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-summary-original-id-2", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`UpdateSLO when error happens during the update restores the previous SLO definition in the repository 3`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-original-id-2", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`UpdateSLO when error happens during the update restores the previous SLO definition in the repository 4`] = ` +[MockFunction] { + "calls": Array [ + Array [ + "slo-original-id-2", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], +} +`; + +exports[`UpdateSLO when error happens during the update restores the previous SLO definition in the repository 5`] = ` +[MockFunction] { + "calls": Array [ + Array [ + Object { + "id": ".slo-observability.summary.pipeline-original-id-2", }, - "sliValue": -1, - "slo": Object { - "budgetingMethod": "occurrences", - "description": "irrelevant", - "groupBy": "*", - "id": "unique-id", - "indicator": Object { - "type": "sli.apm.transactionErrorRate", - }, - "instanceId": "*", - "name": "irrelevant", - "revision": 2, - "tags": Array [ - "critical", - "k8s", + Object { + "ignore": Array [ + 404, ], - "timeWindow": Object { - "duration": "7d", - "type": "rolling", - }, - }, - "status": "NO_DATA", - "statusCode": 0, - "totalEvents": 0, - "transaction": Object { - "name": null, - "type": null, }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, }, - "id": "slo-unique-id", - "index": ".slo-observability.summary-v2.temp", - "refresh": true, - }, -] + ], +} `; diff --git a/x-pack/plugins/observability/server/services/slo/create_slo.test.ts b/x-pack/plugins/observability/server/services/slo/create_slo.test.ts index bd34d652e5fa4..fe8de00589db6 100644 --- a/x-pack/plugins/observability/server/services/slo/create_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/create_slo.test.ts @@ -5,25 +5,45 @@ * 2.0. */ -import { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import { + ElasticsearchClientMock, + elasticsearchServiceMock, + loggingSystemMock, +} from '@kbn/core/server/mocks'; +import { MockedLogger } from '@kbn/logging-mocks'; import { CreateSLO } from './create_slo'; import { fiveMinute, oneMinute } from './fixtures/duration'; import { createAPMTransactionErrorRateIndicator, createSLOParams } from './fixtures/slo'; -import { createSLORepositoryMock, createTransformManagerMock } from './mocks'; +import { + createSLORepositoryMock, + createSummaryTransformManagerMock, + createTransformManagerMock, +} from './mocks'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; describe('CreateSLO', () => { let esClientMock: ElasticsearchClientMock; + let loggerMock: jest.Mocked; let mockRepository: jest.Mocked; let mockTransformManager: jest.Mocked; + let mockSummaryTransformManager: jest.Mocked; let createSLO: CreateSLO; beforeEach(() => { esClientMock = elasticsearchServiceMock.createElasticsearchClient(); + loggerMock = loggingSystemMock.createLogger(); mockRepository = createSLORepositoryMock(); mockTransformManager = createTransformManagerMock(); - createSLO = new CreateSLO(esClientMock, mockRepository, mockTransformManager); + mockSummaryTransformManager = createSummaryTransformManagerMock(); + createSLO = new CreateSLO( + esClientMock, + mockRepository, + mockTransformManager, + mockSummaryTransformManager, + loggerMock, + 'some-space' + ); }); describe('happy path', () => { @@ -32,7 +52,8 @@ describe('CreateSLO', () => { id: 'unique-id', indicator: createAPMTransactionErrorRateIndicator(), }); - mockTransformManager.install.mockResolvedValue('slo-transform-id'); + mockTransformManager.install.mockResolvedValue('slo-id-revision'); + mockSummaryTransformManager.install.mockResolvedValue('slo-summary-id-revision'); const response = await createSLO.execute(sloParams); @@ -47,18 +68,21 @@ describe('CreateSLO', () => { revision: 1, tags: [], enabled: true, + version: 2, createdAt: expect.any(Date), updatedAt: expect.any(Date), }), { throwOnConflict: true } ); - expect(mockTransformManager.install).toHaveBeenCalledWith( - expect.objectContaining({ ...sloParams, id: 'unique-id' }) - ); - expect(mockTransformManager.preview).toHaveBeenCalledWith('slo-transform-id'); - expect(mockTransformManager.start).toHaveBeenCalledWith('slo-transform-id'); - expect(response).toEqual(expect.objectContaining({ id: 'unique-id' })); + + expect(mockTransformManager.install).toHaveBeenCalled(); + expect(mockTransformManager.start).toHaveBeenCalled(); + expect(esClientMock.ingest.putPipeline.mock.calls[0]).toMatchSnapshot(); + expect(mockSummaryTransformManager.install).toHaveBeenCalled(); + expect(mockSummaryTransformManager.start).toHaveBeenCalled(); expect(esClientMock.index.mock.calls[0]).toMatchSnapshot(); + + expect(response).toEqual(expect.objectContaining({ id: 'unique-id' })); }); it('overrides the default values when provided', async () => { @@ -93,32 +117,20 @@ describe('CreateSLO', () => { }); describe('unhappy path', () => { - it('deletes the SLO when transform installation fails', async () => { - mockTransformManager.install.mockRejectedValue(new Error('Transform install error')); - const sloParams = createSLOParams({ indicator: createAPMTransactionErrorRateIndicator() }); - - await expect(createSLO.execute(sloParams)).rejects.toThrowError('Transform install error'); - expect(mockRepository.deleteById).toBeCalled(); - }); - - it('removes the transform and deletes the SLO when transform preview fails', async () => { - mockTransformManager.install.mockResolvedValue('slo-transform-id'); - mockTransformManager.preview.mockRejectedValue(new Error('Transform preview error')); + it('rollbacks new resources on failure', async () => { + mockTransformManager.install.mockRejectedValue(new Error('Rollup transform install error')); const sloParams = createSLOParams({ indicator: createAPMTransactionErrorRateIndicator() }); - await expect(createSLO.execute(sloParams)).rejects.toThrowError('Transform preview error'); - expect(mockTransformManager.uninstall).toBeCalledWith('slo-transform-id'); - expect(mockRepository.deleteById).toBeCalled(); - }); - - it('removes the transform and deletes the SLO when transform start fails', async () => { - mockTransformManager.install.mockResolvedValue('slo-transform-id'); - mockTransformManager.start.mockRejectedValue(new Error('Transform start error')); - const sloParams = createSLOParams({ indicator: createAPMTransactionErrorRateIndicator() }); + await expect(createSLO.execute(sloParams)).rejects.toThrowError( + 'Rollup transform install error' + ); - await expect(createSLO.execute(sloParams)).rejects.toThrowError('Transform start error'); - expect(mockTransformManager.uninstall).toBeCalledWith('slo-transform-id'); - expect(mockRepository.deleteById).toBeCalled(); + expect(mockSummaryTransformManager.stop).toHaveBeenCalled(); + expect(mockSummaryTransformManager.uninstall).toHaveBeenCalled(); + expect(mockTransformManager.stop).toHaveBeenCalled(); + expect(mockTransformManager.uninstall).toHaveBeenCalled(); + expect(esClientMock.ingest.deletePipeline).toHaveBeenCalled(); + expect(mockRepository.deleteById).toHaveBeenCalled(); }); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/create_slo.ts b/x-pack/plugins/observability/server/services/slo/create_slo.ts index cebe8188a7cbd..d7e116d983584 100644 --- a/x-pack/plugins/observability/server/services/slo/create_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/create_slo.ts @@ -5,21 +5,32 @@ * 2.0. */ -import { ElasticsearchClient } from '@kbn/core/server'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { ALL_VALUE, CreateSLOParams, CreateSLOResponse } from '@kbn/slo-schema'; import { v4 as uuidv4 } from 'uuid'; -import { SLO_SUMMARY_TEMP_INDEX_NAME } from '../../../common/slo/constants'; +import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, + getSLOTransformId, + SLO_MODEL_VERSION, + SLO_SUMMARY_TEMP_INDEX_NAME, +} from '../../../common/slo/constants'; +import { getSLOSummaryPipelineTemplate } from '../../assets/ingest_templates/slo_summary_pipeline_template'; import { Duration, DurationUnit, SLO } from '../../domain/models'; import { validateSLO } from '../../domain/services'; +import { retryTransientEsErrors } from '../../utils/retry'; import { SLORepository } from './slo_repository'; -import { createTempSummaryDocument } from './summary_transform/helpers/create_temp_summary'; +import { createTempSummaryDocument } from './summary_transform_generator/helpers/create_temp_summary'; import { TransformManager } from './transform_manager'; export class CreateSLO { constructor( private esClient: ElasticsearchClient, private repository: SLORepository, - private transformManager: TransformManager + private transformManager: TransformManager, + private summaryTransformManager: TransformManager, + private logger: Logger, + private spaceId: string ) {} public async execute(params: CreateSLOParams): Promise { @@ -27,33 +38,48 @@ export class CreateSLO { validateSLO(slo); await this.repository.save(slo, { throwOnConflict: true }); - let sloTransformId; - try { - sloTransformId = await this.transformManager.install(slo); - } catch (err) { - await this.repository.deleteById(slo.id); - throw err; - } + const rollupTransformId = getSLOTransformId(slo.id, slo.revision); + const summaryTransformId = getSLOSummaryTransformId(slo.id, slo.revision); try { - await this.transformManager.preview(sloTransformId); - await this.transformManager.start(sloTransformId); + await this.transformManager.install(slo); + await this.transformManager.start(rollupTransformId); + await retryTransientEsErrors( + () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)), + { logger: this.logger } + ); + + await this.summaryTransformManager.install(slo); + await this.summaryTransformManager.start(summaryTransformId); + + await retryTransientEsErrors( + () => + this.esClient.index({ + index: SLO_SUMMARY_TEMP_INDEX_NAME, + id: `slo-${slo.id}`, + document: createTempSummaryDocument(slo, this.spaceId), + refresh: true, + }), + { logger: this.logger } + ); } catch (err) { - await Promise.all([ - this.transformManager.uninstall(sloTransformId), - this.repository.deleteById(slo.id), - ]); + this.logger.error( + `Cannot install the SLO [id: ${slo.id}, revision: ${slo.revision}]. Rolling back.` + ); + + await this.summaryTransformManager.stop(summaryTransformId); + await this.summaryTransformManager.uninstall(summaryTransformId); + await this.transformManager.stop(rollupTransformId); + await this.transformManager.uninstall(rollupTransformId); + await this.esClient.ingest.deletePipeline( + { id: getSLOSummaryPipelineId(slo.id, slo.revision) }, + { ignore: [404] } + ); + await this.repository.deleteById(slo.id); throw err; } - await this.esClient.index({ - index: SLO_SUMMARY_TEMP_INDEX_NAME, - id: `slo-${slo.id}`, - document: createTempSummaryDocument(slo), - refresh: true, - }); - return this.toResponse(slo); } @@ -72,6 +98,7 @@ export class CreateSLO { createdAt: now, updatedAt: now, groupBy: !!params.groupBy ? params.groupBy : ALL_VALUE, + version: SLO_MODEL_VERSION, }; } diff --git a/x-pack/plugins/observability/server/services/slo/delete_slo.test.ts b/x-pack/plugins/observability/server/services/slo/delete_slo.test.ts index 8a19890e2ebc2..506151da864d3 100644 --- a/x-pack/plugins/observability/server/services/slo/delete_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/delete_slo.test.ts @@ -9,20 +9,20 @@ import { rulesClientMock } from '@kbn/alerting-plugin/server/rules_client.mock'; import { RulesClientApi } from '@kbn/alerting-plugin/server/types'; import { ElasticsearchClient } from '@kbn/core/server'; import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { - getSLOTransformId, - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_PATTERN, -} from '../../../common/slo/constants'; import { DeleteSLO } from './delete_slo'; import { createAPMTransactionErrorRateIndicator, createSLO } from './fixtures/slo'; -import { createSLORepositoryMock, createTransformManagerMock } from './mocks'; +import { + createSLORepositoryMock, + createSummaryTransformManagerMock, + createTransformManagerMock, +} from './mocks'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; describe('DeleteSLO', () => { let mockRepository: jest.Mocked; let mockTransformManager: jest.Mocked; + let mockSummaryTransformManager: jest.Mocked; let mockEsClient: jest.Mocked; let mockRulesClient: jest.Mocked; let deleteSLO: DeleteSLO; @@ -30,52 +30,37 @@ describe('DeleteSLO', () => { beforeEach(() => { mockRepository = createSLORepositoryMock(); mockTransformManager = createTransformManagerMock(); + mockSummaryTransformManager = createSummaryTransformManagerMock(); mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); mockRulesClient = rulesClientMock.create(); - deleteSLO = new DeleteSLO(mockRepository, mockTransformManager, mockEsClient, mockRulesClient); + deleteSLO = new DeleteSLO( + mockRepository, + mockTransformManager, + mockSummaryTransformManager, + mockEsClient, + mockRulesClient + ); }); describe('happy path', () => { - it('removes the transform, the roll up data, the associated rules and the SLO from the repository', async () => { - const slo = createSLO({ indicator: createAPMTransactionErrorRateIndicator() }); + it('removes all resources associatde to the slo', async () => { + const slo = createSLO({ + id: 'irrelevant', + indicator: createAPMTransactionErrorRateIndicator(), + }); mockRepository.findById.mockResolvedValueOnce(slo); await deleteSLO.execute(slo.id); - expect(mockRepository.findById).toHaveBeenCalledWith(slo.id); - expect(mockTransformManager.stop).toHaveBeenCalledWith( - getSLOTransformId(slo.id, slo.revision) - ); - expect(mockTransformManager.uninstall).toHaveBeenCalledWith( - getSLOTransformId(slo.id, slo.revision) - ); - expect(mockEsClient.deleteByQuery).toHaveBeenCalledTimes(2); - expect(mockEsClient.deleteByQuery).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - index: SLO_DESTINATION_INDEX_PATTERN, - query: { - match: { - 'slo.id': slo.id, - }, - }, - }) - ); - expect(mockEsClient.deleteByQuery).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ - index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, - query: { - match: { - 'slo.id': slo.id, - }, - }, - }) - ); - expect(mockRulesClient.bulkDeleteRules).toHaveBeenCalledWith({ - filter: `alert.attributes.params.sloId:${slo.id}`, - }); - expect(mockRepository.deleteById).toHaveBeenCalledWith(slo.id); + expect(mockRepository.findById).toMatchSnapshot(); + expect(mockSummaryTransformManager.stop).toMatchSnapshot(); + expect(mockSummaryTransformManager.uninstall).toMatchSnapshot(); + expect(mockTransformManager.stop).toMatchSnapshot(); + expect(mockTransformManager.uninstall).toMatchSnapshot(); + expect(mockEsClient.ingest.deletePipeline).toMatchSnapshot(); + expect(mockEsClient.deleteByQuery).toMatchSnapshot(); + expect(mockRulesClient.bulkDeleteRules).toMatchSnapshot(); + expect(mockRepository.deleteById).toMatchSnapshot(); }); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/delete_slo.ts b/x-pack/plugins/observability/server/services/slo/delete_slo.ts index 78c3bffd05417..e3d6663860222 100644 --- a/x-pack/plugins/observability/server/services/slo/delete_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/delete_slo.ts @@ -8,10 +8,13 @@ import { RulesClientApi } from '@kbn/alerting-plugin/server/types'; import { ElasticsearchClient } from '@kbn/core/server'; import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, getSLOTransformId, SLO_DESTINATION_INDEX_PATTERN, SLO_SUMMARY_DESTINATION_INDEX_PATTERN, } from '../../../common/slo/constants'; +import { retryTransientEsErrors } from '../../utils/retry'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; @@ -19,6 +22,7 @@ export class DeleteSLO { constructor( private repository: SLORepository, private transformManager: TransformManager, + private summaryTransformManager: TransformManager, private esClient: ElasticsearchClient, private rulesClient: RulesClientApi ) {} @@ -26,9 +30,20 @@ export class DeleteSLO { public async execute(sloId: string): Promise { const slo = await this.repository.findById(sloId); - const sloTransformId = getSLOTransformId(slo.id, slo.revision); - await this.transformManager.stop(sloTransformId); - await this.transformManager.uninstall(sloTransformId); + const summaryTransformId = getSLOSummaryTransformId(slo.id, slo.revision); + await this.summaryTransformManager.stop(summaryTransformId); + await this.summaryTransformManager.uninstall(summaryTransformId); + + const rollupTransformId = getSLOTransformId(slo.id, slo.revision); + await this.transformManager.stop(rollupTransformId); + await this.transformManager.uninstall(rollupTransformId); + + await retryTransientEsErrors(() => + this.esClient.ingest.deletePipeline( + { id: getSLOSummaryPipelineId(slo.id, slo.revision) }, + { ignore: [404] } + ) + ); await this.deleteRollupData(slo.id); await this.deleteSummaryData(slo.id); diff --git a/x-pack/plugins/observability/server/services/slo/delete_slo_instances.test.ts b/x-pack/plugins/observability/server/services/slo/delete_slo_instances.test.ts index 8a9c64a6b441c..ca4eac790bd04 100644 --- a/x-pack/plugins/observability/server/services/slo/delete_slo_instances.test.ts +++ b/x-pack/plugins/observability/server/services/slo/delete_slo_instances.test.ts @@ -43,7 +43,7 @@ describe('DeleteSLOInstances', () => { expect(mockEsClient.deleteByQuery).toHaveBeenCalledTimes(2); expect(mockEsClient.deleteByQuery.mock.calls[0][0]).toMatchInlineSnapshot(` Object { - "index": ".slo-observability.sli-v2*", + "index": ".slo-observability.sli-v3*", "query": Object { "bool": Object { "should": Array [ @@ -103,7 +103,7 @@ describe('DeleteSLOInstances', () => { `); expect(mockEsClient.deleteByQuery.mock.calls[1][0]).toMatchInlineSnapshot(` Object { - "index": ".slo-observability.summary-v2*", + "index": ".slo-observability.summary-v3*", "query": Object { "bool": Object { "should": Array [ diff --git a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts index 10436bc0fad54..e8d80ef8e74f5 100644 --- a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts @@ -5,13 +5,14 @@ * 2.0. */ -import { ALL_VALUE } from '@kbn/slo-schema'; +import { ALL_VALUE, Paginated } from '@kbn/slo-schema'; +import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; import { SLO } from '../../domain/models'; import { FindSLO } from './find_slo'; import { createSLO } from './fixtures/slo'; import { createSLORepositoryMock, createSummarySearchClientMock } from './mocks'; import { SLORepository } from './slo_repository'; -import { Paginated, SLOSummary, SummarySearchClient } from './summary_search_client'; +import { SLOSummary, SummarySearchClient } from './summary_search_client'; describe('FindSLO', () => { let mockRepository: jest.Mocked; @@ -95,6 +96,7 @@ describe('FindSLO', () => { revision: slo.revision, groupBy: slo.groupBy, instanceId: ALL_VALUE, + version: SLO_MODEL_VERSION, }, ], }); @@ -147,7 +149,7 @@ describe('FindSLO', () => { await expect(findSLO.execute({ perPage: '5000' })).resolves.not.toThrow(); await expect(findSLO.execute({ perPage: '5001' })).rejects.toThrowError( - 'perPage limit to 5000' + 'perPage limit set to 5000' ); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/find_slo.ts b/x-pack/plugins/observability/server/services/slo/find_slo.ts index cf8150db3e627..fb90ec86d04d5 100644 --- a/x-pack/plugins/observability/server/services/slo/find_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/find_slo.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { FindSLOParams, FindSLOResponse, findSLOResponseSchema } from '@kbn/slo-schema'; +import { FindSLOParams, FindSLOResponse, findSLOResponseSchema, Pagination } from '@kbn/slo-schema'; import { SLO, SLOWithSummary } from '../../domain/models'; import { IllegalArgumentError } from '../../errors'; import { SLORepository } from './slo_repository'; -import { Pagination, SLOSummary, Sort, SummarySearchClient } from './summary_search_client'; +import { SLOSummary, Sort, SummarySearchClient } from './summary_search_client'; const DEFAULT_PAGE = 1; const DEFAULT_PER_PAGE = 25; @@ -55,7 +55,7 @@ function toPagination(params: FindSLOParams): Pagination { const perPage = Number(params.perPage); if (!isNaN(perPage) && perPage > MAX_PER_PAGE) { - throw new IllegalArgumentError('perPage limit to 5000'); + throw new IllegalArgumentError(`perPage limit set to ${MAX_PER_PAGE}`); } return { diff --git a/x-pack/plugins/observability/server/services/slo/find_slo_definitions.ts b/x-pack/plugins/observability/server/services/slo/find_slo_definitions.ts index 157e5b4be5696..38076d67202d5 100644 --- a/x-pack/plugins/observability/server/services/slo/find_slo_definitions.ts +++ b/x-pack/plugins/observability/server/services/slo/find_slo_definitions.ts @@ -5,14 +5,40 @@ * 2.0. */ -import { FindSloDefinitionsResponse, findSloDefinitionsResponseSchema } from '@kbn/slo-schema'; +import { + FindSLODefinitionsParams, + FindSLODefinitionsResponse, + findSloDefinitionsResponseSchema, + Pagination, +} from '@kbn/slo-schema'; +import { IllegalArgumentError } from '../../errors'; import { SLORepository } from './slo_repository'; +const MAX_PER_PAGE = 1000; +const DEFAULT_PER_PAGE = 100; +const DEFAULT_PAGE = 1; + export class FindSLODefinitions { constructor(private repository: SLORepository) {} - public async execute(search: string): Promise { - const sloList = await this.repository.search(search); - return findSloDefinitionsResponseSchema.encode(sloList); + public async execute(params: FindSLODefinitionsParams): Promise { + const result = await this.repository.search(params.search ?? '', toPagination(params), { + includeOutdatedOnly: params.includeOutdatedOnly === true ? true : false, + }); + return findSloDefinitionsResponseSchema.encode(result); + } +} + +function toPagination(params: FindSLODefinitionsParams): Pagination { + const page = Number(params.page); + const perPage = Number(params.perPage); + + if (!isNaN(perPage) && perPage > MAX_PER_PAGE) { + throw new IllegalArgumentError(`perPage limit set to ${MAX_PER_PAGE}`); } + + return { + page: !isNaN(page) && page >= 1 ? page : DEFAULT_PAGE, + perPage: !isNaN(perPage) && perPage >= 1 ? perPage : DEFAULT_PER_PAGE, + }; } diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts index 2bd320cbb8d65..0f75c83775489 100644 --- a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts +++ b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts @@ -15,6 +15,7 @@ import { } from '@kbn/slo-schema'; import { cloneDeep } from 'lodash'; import { v4 as uuidv4 } from 'uuid'; +import { SLO_MODEL_VERSION } from '../../../../common/slo/constants'; import { APMTransactionDurationIndicator, APMTransactionErrorRateIndicator, @@ -139,7 +140,7 @@ export const createHistogramIndicator = ( }, }); -const defaultSLO: Omit = { +const defaultSLO: Omit = { name: 'irrelevant', description: 'irrelevant', timeWindow: sevenDaysRolling(), @@ -190,6 +191,7 @@ export const createSLO = (params: Partial = {}): SLO => { revision: 1, createdAt: now, updatedAt: now, + version: SLO_MODEL_VERSION, ...params, }); }; diff --git a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts index 1a5efccc9eb2a..18fe85cdfb0b1 100644 --- a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts @@ -6,6 +6,7 @@ */ import { ALL_VALUE } from '@kbn/slo-schema'; +import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; import { createAPMTransactionErrorRateIndicator, createSLO } from './fixtures/slo'; import { GetSLO } from './get_slo'; import { createSummaryClientMock, createSLORepositoryMock } from './mocks'; @@ -84,6 +85,7 @@ describe('GetSLO', () => { revision: slo.revision, groupBy: slo.groupBy, instanceId: ALL_VALUE, + version: SLO_MODEL_VERSION, }); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/index.ts b/x-pack/plugins/observability/server/services/slo/index.ts index 7c99c289ae90b..2a939c56fde4b 100644 --- a/x-pack/plugins/observability/server/services/slo/index.ts +++ b/x-pack/plugins/observability/server/services/slo/index.ts @@ -14,10 +14,10 @@ export * from './get_slo'; export * from './historical_summary_client'; export * from './resource_installer'; export * from './slo_installer'; -export * from './summary_transform/summary_transform_installer'; export * from './sli_client'; export * from './slo_repository'; export * from './transform_manager'; +export * from './summay_transform_manager'; export * from './update_slo'; export * from './summary_client'; export * from './get_slo_instances'; diff --git a/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts b/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts index 78396fa74cbee..bace47b69ff4b 100644 --- a/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts @@ -7,19 +7,26 @@ import { createSLO } from './fixtures/slo'; import { ManageSLO } from './manage_slo'; -import { createSLORepositoryMock, createTransformManagerMock } from './mocks'; +import { + createSLORepositoryMock, + createSummaryTransformManagerMock, + createTransformManagerMock, +} from './mocks'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; describe('ManageSLO', () => { let mockRepository: jest.Mocked; let mockTransformManager: jest.Mocked; + let mockSummaryTransformManager: jest.Mocked; let manageSLO: ManageSLO; beforeEach(() => { mockRepository = createSLORepositoryMock(); mockTransformManager = createTransformManagerMock(); - manageSLO = new ManageSLO(mockRepository, mockTransformManager); + mockSummaryTransformManager = createSummaryTransformManagerMock(); + + manageSLO = new ManageSLO(mockRepository, mockTransformManager, mockSummaryTransformManager); }); describe('Enable', () => { @@ -30,16 +37,18 @@ describe('ManageSLO', () => { await manageSLO.enable(slo.id); expect(mockTransformManager.start).not.toHaveBeenCalled(); + expect(mockSummaryTransformManager.start).not.toHaveBeenCalled(); expect(mockRepository.save).not.toHaveBeenCalled(); }); it('enables the slo when disabled', async () => { - const slo = createSLO({ enabled: false }); + const slo = createSLO({ id: 'irrelevant', enabled: false }); mockRepository.findById.mockResolvedValue(slo); await manageSLO.enable(slo.id); - expect(mockTransformManager.start).toHaveBeenCalled(); + expect(mockTransformManager.start).toMatchSnapshot(); + expect(mockSummaryTransformManager.start).toMatchSnapshot(); expect(mockRepository.save).toHaveBeenCalledWith(expect.objectContaining({ enabled: true })); }); }); @@ -52,16 +61,18 @@ describe('ManageSLO', () => { await manageSLO.disable(slo.id); expect(mockTransformManager.stop).not.toHaveBeenCalled(); + expect(mockSummaryTransformManager.stop).not.toHaveBeenCalled(); expect(mockRepository.save).not.toHaveBeenCalled(); }); it('disables the slo when enabled', async () => { - const slo = createSLO({ enabled: true }); + const slo = createSLO({ id: 'irrelevant', enabled: true }); mockRepository.findById.mockResolvedValue(slo); await manageSLO.disable(slo.id); - expect(mockTransformManager.stop).toHaveBeenCalled(); + expect(mockTransformManager.stop).toMatchSnapshot(); + expect(mockSummaryTransformManager.stop).toMatchSnapshot(); expect(mockRepository.save).toHaveBeenCalledWith(expect.objectContaining({ enabled: false })); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/manage_slo.ts b/x-pack/plugins/observability/server/services/slo/manage_slo.ts index b7220f084a64d..9d9fd6eb1705c 100644 --- a/x-pack/plugins/observability/server/services/slo/manage_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/manage_slo.ts @@ -5,12 +5,16 @@ * 2.0. */ -import { getSLOTransformId } from '../../../common/slo/constants'; +import { getSLOSummaryTransformId, getSLOTransformId } from '../../../common/slo/constants'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; export class ManageSLO { - constructor(private repository: SLORepository, private transformManager: TransformManager) {} + constructor( + private repository: SLORepository, + private transformManager: TransformManager, + private summaryTransformManager: TransformManager + ) {} async enable(sloId: string) { const slo = await this.repository.findById(sloId); @@ -18,6 +22,7 @@ export class ManageSLO { return; } + await this.summaryTransformManager.start(getSLOSummaryTransformId(slo.id, slo.revision)); await this.transformManager.start(getSLOTransformId(slo.id, slo.revision)); slo.enabled = true; slo.updatedAt = new Date(); @@ -30,6 +35,7 @@ export class ManageSLO { return; } + await this.summaryTransformManager.stop(getSLOSummaryTransformId(slo.id, slo.revision)); await this.transformManager.stop(getSLOTransformId(slo.id, slo.revision)); slo.enabled = false; slo.updatedAt = new Date(); diff --git a/x-pack/plugins/observability/server/services/slo/mocks/index.ts b/x-pack/plugins/observability/server/services/slo/mocks/index.ts index 979c3057d1e8e..eb8db093a7174 100644 --- a/x-pack/plugins/observability/server/services/slo/mocks/index.ts +++ b/x-pack/plugins/observability/server/services/slo/mocks/index.ts @@ -10,7 +10,6 @@ import { SLIClient } from '../sli_client'; import { SLORepository } from '../slo_repository'; import { SummaryClient } from '../summary_client'; import { SummarySearchClient } from '../summary_search_client'; -import { SummaryTransformInstaller } from '../summary_transform/summary_transform_installer'; import { TransformManager } from '../transform_manager'; const createResourceInstallerMock = (): jest.Mocked => { @@ -19,13 +18,17 @@ const createResourceInstallerMock = (): jest.Mocked => { }; }; -const createSummaryTransformInstallerMock = (): jest.Mocked => { +const createTransformManagerMock = (): jest.Mocked => { return { - installAndStart: jest.fn(), + install: jest.fn(), + preview: jest.fn(), + uninstall: jest.fn(), + start: jest.fn(), + stop: jest.fn(), }; }; -const createTransformManagerMock = (): jest.Mocked => { +const createSummaryTransformManagerMock = (): jest.Mocked => { return { install: jest.fn(), preview: jest.fn(), @@ -65,8 +68,8 @@ const createSLIClientMock = (): jest.Mocked => { export { createResourceInstallerMock, - createSummaryTransformInstallerMock, createTransformManagerMock, + createSummaryTransformManagerMock, createSLORepositoryMock, createSummaryClientMock, createSummarySearchClientMock, diff --git a/x-pack/plugins/observability/server/services/slo/reset_slo.test.ts b/x-pack/plugins/observability/server/services/slo/reset_slo.test.ts new file mode 100644 index 0000000000000..feae6695fbd33 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/reset_slo.test.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient } from '@kbn/core/server'; +import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { MockedLogger } from '@kbn/logging-mocks'; + +import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; +import { createSLO } from './fixtures/slo'; +import { + createSLORepositoryMock, + createSummaryTransformManagerMock, + createTransformManagerMock, +} from './mocks'; +import { ResetSLO } from './reset_slo'; +import { SLORepository } from './slo_repository'; +import { TransformManager } from './transform_manager'; + +const TEST_DATE = new Date('2023-01-01T00:00:00.000Z'); + +describe('ResetSLO', () => { + let mockRepository: jest.Mocked; + let mockTransformManager: jest.Mocked; + let mockSummaryTransformManager: jest.Mocked; + let mockEsClient: jest.Mocked; + let loggerMock: jest.Mocked; + let resetSLO: ResetSLO; + + beforeEach(() => { + loggerMock = loggingSystemMock.createLogger(); + mockRepository = createSLORepositoryMock(); + mockTransformManager = createTransformManagerMock(); + mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); + mockSummaryTransformManager = createSummaryTransformManagerMock(); + resetSLO = new ResetSLO( + mockEsClient, + mockRepository, + mockTransformManager, + mockSummaryTransformManager, + loggerMock, + 'some-space' + ); + jest.useFakeTimers().setSystemTime(TEST_DATE); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + it('resets all associated resources', async () => { + const slo = createSLO({ id: 'irrelevant', version: 1 }); + mockRepository.findById.mockResolvedValueOnce(slo); + mockRepository.save.mockImplementation((v) => Promise.resolve(v)); + + await resetSLO.execute(slo.id); + + // delete existing resources and data + expect(mockSummaryTransformManager.stop).toMatchSnapshot(); + expect(mockSummaryTransformManager.uninstall).toMatchSnapshot(); + + expect(mockTransformManager.stop).toMatchSnapshot(); + expect(mockTransformManager.uninstall).toMatchSnapshot(); + + expect(mockEsClient.deleteByQuery).toMatchSnapshot(); + + // install resources + expect(mockSummaryTransformManager.install).toMatchSnapshot(); + expect(mockSummaryTransformManager.start).toMatchSnapshot(); + + expect(mockEsClient.ingest.putPipeline).toMatchSnapshot(); + + expect(mockTransformManager.install).toMatchSnapshot(); + expect(mockTransformManager.start).toMatchSnapshot(); + + expect(mockEsClient.index).toMatchSnapshot(); + + expect(mockRepository.save).toHaveBeenCalledWith({ + ...slo, + version: SLO_MODEL_VERSION, + updatedAt: expect.anything(), + }); + }); +}); diff --git a/x-pack/plugins/observability/server/services/slo/reset_slo.ts b/x-pack/plugins/observability/server/services/slo/reset_slo.ts new file mode 100644 index 0000000000000..8c4a374761979 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/reset_slo.ts @@ -0,0 +1,130 @@ +/* + * Copyright 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 { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { resetSLOResponseSchema } from '@kbn/slo-schema'; +import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, + getSLOTransformId, + SLO_DESTINATION_INDEX_PATTERN, + SLO_MODEL_VERSION, + SLO_SUMMARY_DESTINATION_INDEX_PATTERN, + SLO_SUMMARY_TEMP_INDEX_NAME, +} from '../../../common/slo/constants'; +import { getSLOSummaryPipelineTemplate } from '../../assets/ingest_templates/slo_summary_pipeline_template'; +import { retryTransientEsErrors } from '../../utils/retry'; +import { SLORepository } from './slo_repository'; +import { createTempSummaryDocument } from './summary_transform_generator/helpers/create_temp_summary'; +import { TransformManager } from './transform_manager'; + +export class ResetSLO { + constructor( + private esClient: ElasticsearchClient, + private repository: SLORepository, + private transformManager: TransformManager, + private summaryTransformManager: TransformManager, + private logger: Logger, + private spaceId: string + ) {} + + public async execute(sloId: string) { + const slo = await this.repository.findById(sloId); + + const summaryTransformId = getSLOSummaryTransformId(slo.id, slo.revision); + await this.summaryTransformManager.stop(summaryTransformId); + await this.summaryTransformManager.uninstall(summaryTransformId); + + const rollupTransformId = getSLOTransformId(slo.id, slo.revision); + await this.transformManager.stop(rollupTransformId); + await this.transformManager.uninstall(rollupTransformId); + + await Promise.all([this.deleteRollupData(slo.id), this.deleteSummaryData(slo.id)]); + + try { + await this.transformManager.install(slo); + await this.transformManager.start(rollupTransformId); + await retryTransientEsErrors( + () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)), + { logger: this.logger } + ); + + await this.summaryTransformManager.install(slo); + await this.summaryTransformManager.start(summaryTransformId); + + await retryTransientEsErrors( + () => + this.esClient.index({ + index: SLO_SUMMARY_TEMP_INDEX_NAME, + id: `slo-${slo.id}`, + document: createTempSummaryDocument(slo, this.spaceId), + refresh: true, + }), + { logger: this.logger } + ); + } catch (err) { + this.logger.error( + `Cannot reset the SLO [id: ${slo.id}, revision: ${slo.revision}]. Rolling back.` + ); + + await this.summaryTransformManager.stop(summaryTransformId); + await this.summaryTransformManager.uninstall(summaryTransformId); + await this.transformManager.stop(rollupTransformId); + await this.transformManager.uninstall(rollupTransformId); + await this.esClient.ingest.deletePipeline( + { id: getSLOSummaryPipelineId(slo.id, slo.revision) }, + { ignore: [404] } + ); + + throw err; + } + + const updatedSlo = await this.repository.save({ + ...slo, + version: SLO_MODEL_VERSION, + updatedAt: new Date(), + }); + + return resetSLOResponseSchema.encode(updatedSlo); + } + + /** + * Deleting all SLI rollup data matching the sloId. All revision will be deleted in case of + * residual documents. + * + * @param sloId + */ + private async deleteRollupData(sloId: string): Promise { + await this.esClient.deleteByQuery({ + index: SLO_DESTINATION_INDEX_PATTERN, + refresh: true, + query: { + bool: { + filter: [{ term: { 'slo.id': sloId } }], + }, + }, + }); + } + + /** + * Deleting the summary documents matching the sloId. All revision will be deleted in case of + * residual documents. + * + * @param sloId + */ + private async deleteSummaryData(sloId: string): Promise { + await this.esClient.deleteByQuery({ + index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, + refresh: true, + query: { + bool: { + filter: [{ term: { 'slo.id': sloId } }], + }, + }, + }); + } +} diff --git a/x-pack/plugins/observability/server/services/slo/resource_installer.test.ts b/x-pack/plugins/observability/server/services/slo/resource_installer.test.ts index 6634b3bc052af..6fe98ebf8f6b2 100644 --- a/x-pack/plugins/observability/server/services/slo/resource_installer.test.ts +++ b/x-pack/plugins/observability/server/services/slo/resource_installer.test.ts @@ -15,7 +15,6 @@ import { SLO_SUMMARY_COMPONENT_TEMPLATE_MAPPINGS_NAME, SLO_SUMMARY_COMPONENT_TEMPLATE_SETTINGS_NAME, SLO_SUMMARY_INDEX_TEMPLATE_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, } from '../../../common/slo/constants'; import { DefaultResourceInstaller } from './resource_installer'; @@ -54,14 +53,10 @@ describe('resourceInstaller', () => { expect.objectContaining({ name: SLO_SUMMARY_INDEX_TEMPLATE_NAME }) ); - expect(mockClusterClient.ingest.putPipeline).toHaveBeenCalledTimes(2); + expect(mockClusterClient.ingest.putPipeline).toHaveBeenCalledTimes(1); expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( 1, expect.objectContaining({ id: SLO_INGEST_PIPELINE_NAME }) ); - expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ id: SLO_SUMMARY_INGEST_PIPELINE_NAME }) - ); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/resource_installer.ts b/x-pack/plugins/observability/server/services/slo/resource_installer.ts index 2975e07333599..c639f4cc6c3d7 100644 --- a/x-pack/plugins/observability/server/services/slo/resource_installer.ts +++ b/x-pack/plugins/observability/server/services/slo/resource_installer.ts @@ -28,13 +28,11 @@ import { SLO_SUMMARY_DESTINATION_INDEX_NAME, SLO_SUMMARY_INDEX_TEMPLATE_NAME, SLO_SUMMARY_INDEX_TEMPLATE_PATTERN, - SLO_SUMMARY_INGEST_PIPELINE_NAME, SLO_SUMMARY_TEMP_INDEX_NAME, } from '../../../common/slo/constants'; import { getSLOIndexTemplate } from '../../assets/index_templates/slo_index_templates'; import { getSLOSummaryIndexTemplate } from '../../assets/index_templates/slo_summary_index_templates'; import { getSLOPipelineTemplate } from '../../assets/ingest_templates/slo_pipeline_template'; -import { getSLOSummaryPipelineTemplate } from '../../assets/ingest_templates/slo_summary_pipeline_template'; import { retryTransientEsErrors } from '../../utils/retry'; export interface ResourceInstaller { @@ -87,10 +85,6 @@ export class DefaultResourceInstaller implements ResourceInstaller { await this.createOrUpdateIngestPipelineTemplate( getSLOPipelineTemplate(SLO_INGEST_PIPELINE_NAME, SLO_INGEST_PIPELINE_INDEX_NAME_PREFIX) ); - - await this.createOrUpdateIngestPipelineTemplate( - getSLOSummaryPipelineTemplate(SLO_SUMMARY_INGEST_PIPELINE_NAME) - ); } catch (err) { this.logger.error(`Error installing resources shared for SLO: ${err.message}`); throw err; diff --git a/x-pack/plugins/observability/server/services/slo/slo_installer.test.ts b/x-pack/plugins/observability/server/services/slo/slo_installer.test.ts index 6bd9f798c6234..92d0865ec5c9f 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_installer.test.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_installer.test.ts @@ -7,7 +7,7 @@ import { loggingSystemMock } from '@kbn/core/server/mocks'; import { MockedLogger } from '@kbn/logging-mocks'; -import { createResourceInstallerMock, createSummaryTransformInstallerMock } from './mocks'; +import { createResourceInstallerMock } from './mocks'; import { DefaultSLOInstaller } from './slo_installer'; describe('SLO Installer', () => { @@ -19,16 +19,10 @@ describe('SLO Installer', () => { it.skip('handles concurrent installation', async () => { const resourceInstaller = createResourceInstallerMock(); - const summaryTransformInstaller = createSummaryTransformInstallerMock(); - const service = new DefaultSLOInstaller( - resourceInstaller, - summaryTransformInstaller, - loggerMock - ); + const service = new DefaultSLOInstaller(resourceInstaller, loggerMock); await Promise.all([service.install(), service.install()]); expect(resourceInstaller.ensureCommonResourcesInstalled).toHaveBeenCalledTimes(1); - expect(summaryTransformInstaller.installAndStart).toHaveBeenCalledTimes(1); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/slo_installer.ts b/x-pack/plugins/observability/server/services/slo/slo_installer.ts index bdee31f62912d..9484ecd907d9f 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_installer.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_installer.ts @@ -6,7 +6,7 @@ */ import { Logger } from '@kbn/core/server'; -import { ResourceInstaller, SummaryTransformInstaller } from '.'; +import { ResourceInstaller } from '.'; export interface SLOInstaller { install(): Promise; @@ -15,11 +15,7 @@ export interface SLOInstaller { export class DefaultSLOInstaller implements SLOInstaller { private isInstalling: boolean = false; - constructor( - private sloResourceInstaller: ResourceInstaller, - private sloSummaryInstaller: SummaryTransformInstaller, - private logger: Logger - ) {} + constructor(private sloResourceInstaller: ResourceInstaller, private logger: Logger) {} public async install() { if (this.isInstalling) { @@ -32,9 +28,8 @@ export class DefaultSLOInstaller implements SLOInstaller { installTimeout = setTimeout(() => (this.isInstalling = false), 60000); await this.sloResourceInstaller.ensureCommonResourcesInstalled(); - await this.sloSummaryInstaller.installAndStart(); } catch (error) { - this.logger.error('Failed to install SLO common resources and summary transforms'); + this.logger.error('Failed to install SLO common resources'); } finally { this.isInstalling = false; clearTimeout(installTimeout); diff --git a/x-pack/plugins/observability/server/services/slo/slo_repository.test.ts b/x-pack/plugins/observability/server/services/slo/slo_repository.test.ts index 4b61bff04ea6f..65248d487a392 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_repository.test.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_repository.test.ts @@ -8,6 +8,7 @@ import { SavedObjectsClientContract, SavedObjectsFindResponse } from '@kbn/core/server'; import { savedObjectsClientMock } from '@kbn/core/server/mocks'; import { sloSchema } from '@kbn/slo-schema'; +import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; import { SLO, StoredSLO } from '../../domain/models'; import { SLOIdConflict, SLONotFound } from '../../errors'; import { SO_SLO_TYPE } from '../../saved_objects'; @@ -164,19 +165,42 @@ describe('KibanaSavedObjectsSLORepository', () => { expect(soClientMock.delete).toHaveBeenCalledWith(SO_SLO_TYPE, SOME_SLO.id); }); - it('searches by name', async () => { - const repository = new KibanaSavedObjectsSLORepository(soClientMock); - soClientMock.find.mockResolvedValueOnce(soFindResponse([SOME_SLO, ANOTHER_SLO])); + describe('search', () => { + it('searches by name', async () => { + const repository = new KibanaSavedObjectsSLORepository(soClientMock); + soClientMock.find.mockResolvedValueOnce(soFindResponse([SOME_SLO, ANOTHER_SLO])); - const results = await repository.search(SOME_SLO.name); + const results = await repository.search(SOME_SLO.name, { page: 1, perPage: 100 }); - expect(results).toEqual([SOME_SLO, ANOTHER_SLO]); - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_SLO_TYPE, - page: 1, - perPage: 25, - search: SOME_SLO.name, - searchFields: ['name'], + expect(results.results).toEqual([SOME_SLO, ANOTHER_SLO]); + expect(soClientMock.find).toHaveBeenCalledWith({ + type: SO_SLO_TYPE, + page: 1, + perPage: 100, + search: SOME_SLO.name, + searchFields: ['name'], + }); + }); + + it('searches only the outdated ones', async () => { + const repository = new KibanaSavedObjectsSLORepository(soClientMock); + soClientMock.find.mockResolvedValueOnce(soFindResponse([SOME_SLO, ANOTHER_SLO])); + + const results = await repository.search( + SOME_SLO.name, + { page: 1, perPage: 100 }, + { includeOutdatedOnly: true } + ); + + expect(results.results).toEqual([SOME_SLO, ANOTHER_SLO]); + expect(soClientMock.find).toHaveBeenCalledWith({ + type: SO_SLO_TYPE, + page: 1, + perPage: 100, + search: SOME_SLO.name, + searchFields: ['name'], + filter: `slo.attributes.version < ${SLO_MODEL_VERSION}`, + }); }); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/slo_repository.ts b/x-pack/plugins/observability/server/services/slo/slo_repository.ts index cc595ed0b0099..be6c9266b9e90 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_repository.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_repository.ts @@ -7,10 +7,11 @@ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; -import { sloSchema } from '@kbn/slo-schema'; +import { Paginated, Pagination, sloSchema } from '@kbn/slo-schema'; import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import * as t from 'io-ts'; +import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; import { SLO, StoredSLO } from '../../domain/models'; import { SLOIdConflict, SLONotFound } from '../../errors'; import { SO_SLO_TYPE } from '../../saved_objects'; @@ -20,7 +21,11 @@ export interface SLORepository { findAllByIds(ids: string[]): Promise; findById(id: string): Promise; deleteById(id: string): Promise; - search(search: string): Promise; + search( + search: string, + pagination: Pagination, + options?: { includeOutdatedOnly?: boolean } + ): Promise>; } export class KibanaSavedObjectsSLORepository implements SLORepository { @@ -99,19 +104,28 @@ export class KibanaSavedObjectsSLORepository implements SLORepository { } } - async search(search: string): Promise { - try { - const response = await this.soClient.find({ - type: SO_SLO_TYPE, - page: 1, - perPage: 25, - search, - searchFields: ['name'], - }); - return response.saved_objects.map((slo) => toSLO(slo.attributes)); - } catch (err) { - throw err; - } + async search( + search: string, + pagination: Pagination, + options: { includeOutdatedOnly?: boolean } = { includeOutdatedOnly: false } + ): Promise> { + const response = await this.soClient.find({ + type: SO_SLO_TYPE, + page: pagination.page, + perPage: pagination.perPage, + search, + searchFields: ['name'], + ...(!!options.includeOutdatedOnly && { + filter: `slo.attributes.version < ${SLO_MODEL_VERSION}`, + }), + }); + + return { + total: response.total, + perPage: response.per_page, + page: response.page, + results: response.saved_objects.map((slo) => toSLO(slo.attributes)), + }; } } @@ -121,7 +135,13 @@ function toStoredSLO(slo: SLO): StoredSLO { function toSLO(storedSLO: StoredSLO): SLO { return pipe( - sloSchema.decode(storedSLO), + sloSchema.decode({ + ...storedSLO, + // version was added in 8.12.0. This is a safeguard against SO migration issue. + // if not present, we considered the version to be 1, e.g. not migrated. + // We would need to call the _reset api on this SLO. + version: storedSLO.version ?? 1, + }), fold(() => { throw new Error('Invalid Stored SLO'); }, t.identity) diff --git a/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts b/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts index 5e6f50398fc95..256aa9164ea3b 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_search_client.test.ts @@ -7,17 +7,13 @@ import { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { loggerMock } from '@kbn/logging-mocks'; +import { Pagination } from '@kbn/slo-schema/src/models/pagination'; import { aHitFromSummaryIndex, aHitFromTempSummaryIndex, aSummaryDocument, } from './fixtures/summary_search_document'; -import { - DefaultSummarySearchClient, - Pagination, - Sort, - SummarySearchClient, -} from './summary_search_client'; +import { DefaultSummarySearchClient, Sort, SummarySearchClient } from './summary_search_client'; const defaultSort: Sort = { field: 'sli_value', @@ -34,7 +30,7 @@ describe('Summary Search Client', () => { beforeEach(() => { esClientMock = elasticsearchServiceMock.createElasticsearchClient(); - service = new DefaultSummarySearchClient(esClientMock, loggerMock.create()); + service = new DefaultSummarySearchClient(esClientMock, loggerMock.create(), 'some-space'); }); it('returns an empty response on error', async () => { diff --git a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts index a145a76aa729d..9715d727f6fc5 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts @@ -6,7 +6,7 @@ */ import { ElasticsearchClient, Logger } from '@kbn/core/server'; -import { ALL_VALUE } from '@kbn/slo-schema'; +import { ALL_VALUE, Paginated, Pagination } from '@kbn/slo-schema'; import { assertNever } from '@kbn/std'; import _ from 'lodash'; import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; @@ -31,13 +31,6 @@ interface EsSummaryDocument { isTempDoc: boolean; } -export interface Paginated { - total: number; - page: number; - perPage: number; - results: T[]; -} - export interface SLOSummary { id: SLOId; instanceId: string; @@ -50,17 +43,16 @@ export interface Sort { direction: 'asc' | 'desc'; } -export interface Pagination { - page: number; - perPage: number; -} - export interface SummarySearchClient { search(kqlQuery: string, sort: Sort, pagination: Pagination): Promise>; } export class DefaultSummarySearchClient implements SummarySearchClient { - constructor(private esClient: ElasticsearchClient, private logger: Logger) {} + constructor( + private esClient: ElasticsearchClient, + private logger: Logger, + private spaceId: string + ) {} async search( kqlQuery: string, @@ -71,7 +63,11 @@ export class DefaultSummarySearchClient implements SummarySearchClient { const summarySearch = await this.esClient.search({ index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, track_total_hits: true, - query: getElastichsearchQueryOrThrow(kqlQuery), + query: { + bool: { + filter: [{ term: { spaceId: this.spaceId } }, getElastichsearchQueryOrThrow(kqlQuery)], + }, + }, sort: { // non-temp first, then temp documents isTempDoc: { diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/__snapshots__/summary_transform_installer.test.ts.snap b/x-pack/plugins/observability/server/services/slo/summary_transform/__snapshots__/summary_transform_installer.test.ts.snap deleted file mode 100644 index 5161c5e5cb51b..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/__snapshots__/summary_transform_installer.test.ts.snap +++ /dev/null @@ -1,1192 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Summary Transform Installer installs only the missing summary transforms 1`] = ` -Array [ - Array [ - Object { - "_meta": Object { - "managed": true, - "managed_by": "observability", - "version": 3, - }, - "description": "Summarize every SLO with timeslices budgeting method and a 7 days rolling time window", - "dest": Object { - "index": ".slo-observability.summary-v2", - "pipeline": ".slo-observability.summary.pipeline", - }, - "frequency": "1m", - "pivot": Object { - "aggregations": Object { - "_objectiveTarget": Object { - "max": Object { - "field": "slo.objective.target", - }, - }, - "errorBudgetConsumed": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetInitial": "errorBudgetInitial", - "sliValue": "sliValue", - }, - "script": "if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }", - }, - }, - "errorBudgetInitial": Object { - "bucket_script": Object { - "buckets_path": Object { - "objectiveTarget": "_objectiveTarget", - }, - "script": "1 - params.objectiveTarget", - }, - }, - "errorBudgetRemaining": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetConsummed": "errorBudgetConsumed", - }, - "script": "1 - params.errorBudgetConsummed", - }, - }, - "goodEvents": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "sliValue": Object { - "bucket_script": Object { - "buckets_path": Object { - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - }, - "script": "if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }", - }, - }, - "statusCode": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetRemaining": "errorBudgetRemaining", - "objectiveTarget": "_objectiveTarget", - "sliValue": "sliValue", - }, - "script": Object { - "source": "if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }", - }, - }, - }, - "totalEvents": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "group_by": Object { - "errorBudgetEstimated": Object { - "terms": Object { - "field": "errorBudgetEstimated", - }, - }, - "isTempDoc": Object { - "terms": Object { - "field": "isTempDoc", - }, - }, - "service.environment": Object { - "terms": Object { - "field": "service.environment", - "missing_bucket": true, - }, - }, - "service.name": Object { - "terms": Object { - "field": "service.name", - "missing_bucket": true, - }, - }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, - "slo.id": Object { - "terms": Object { - "field": "slo.id", - }, - }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, - "slo.instanceId": Object { - "terms": Object { - "field": "slo.instanceId", - }, - }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.revision": Object { - "terms": Object { - "field": "slo.revision", - }, - }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, - "transaction.name": Object { - "terms": Object { - "field": "transaction.name", - "missing_bucket": true, - }, - }, - "transaction.type": Object { - "terms": Object { - "field": "transaction.type", - "missing_bucket": true, - }, - }, - }, - }, - "settings": Object { - "deduce_mappings": false, - "unattended": true, - }, - "source": Object { - "index": ".slo-observability.sli-v2*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now-7d/m", - "lte": "now/m", - }, - }, - }, - Object { - "term": Object { - "slo.budgetingMethod": "timeslices", - }, - }, - Object { - "term": Object { - "slo.timeWindow.type": "rolling", - }, - }, - Object { - "term": Object { - "slo.timeWindow.duration": "7d", - }, - }, - ], - }, - }, - "runtime_mappings": Object { - "errorBudgetEstimated": Object { - "script": "emit(false)", - "type": "boolean", - }, - "isTempDoc": Object { - "script": "emit(false)", - "type": "boolean", - }, - }, - }, - "sync": Object { - "time": Object { - "delay": "125s", - "field": "@timestamp", - }, - }, - "transform_id": "slo-summary-timeslices-7d-rolling", - }, - Object { - "ignore": Array [ - 409, - ], - }, - ], - Array [ - Object { - "_meta": Object { - "managed": true, - "managed_by": "observability", - "version": 3, - }, - "description": "Summarize every SLO with timeslices budgeting method and a 30 days rolling time window", - "dest": Object { - "index": ".slo-observability.summary-v2", - "pipeline": ".slo-observability.summary.pipeline", - }, - "frequency": "1m", - "pivot": Object { - "aggregations": Object { - "_objectiveTarget": Object { - "max": Object { - "field": "slo.objective.target", - }, - }, - "errorBudgetConsumed": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetInitial": "errorBudgetInitial", - "sliValue": "sliValue", - }, - "script": "if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }", - }, - }, - "errorBudgetInitial": Object { - "bucket_script": Object { - "buckets_path": Object { - "objectiveTarget": "_objectiveTarget", - }, - "script": "1 - params.objectiveTarget", - }, - }, - "errorBudgetRemaining": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetConsummed": "errorBudgetConsumed", - }, - "script": "1 - params.errorBudgetConsummed", - }, - }, - "goodEvents": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "sliValue": Object { - "bucket_script": Object { - "buckets_path": Object { - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - }, - "script": "if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }", - }, - }, - "statusCode": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetRemaining": "errorBudgetRemaining", - "objectiveTarget": "_objectiveTarget", - "sliValue": "sliValue", - }, - "script": Object { - "source": "if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }", - }, - }, - }, - "totalEvents": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "group_by": Object { - "errorBudgetEstimated": Object { - "terms": Object { - "field": "errorBudgetEstimated", - }, - }, - "isTempDoc": Object { - "terms": Object { - "field": "isTempDoc", - }, - }, - "service.environment": Object { - "terms": Object { - "field": "service.environment", - "missing_bucket": true, - }, - }, - "service.name": Object { - "terms": Object { - "field": "service.name", - "missing_bucket": true, - }, - }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, - "slo.id": Object { - "terms": Object { - "field": "slo.id", - }, - }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, - "slo.instanceId": Object { - "terms": Object { - "field": "slo.instanceId", - }, - }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.revision": Object { - "terms": Object { - "field": "slo.revision", - }, - }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, - "transaction.name": Object { - "terms": Object { - "field": "transaction.name", - "missing_bucket": true, - }, - }, - "transaction.type": Object { - "terms": Object { - "field": "transaction.type", - "missing_bucket": true, - }, - }, - }, - }, - "settings": Object { - "deduce_mappings": false, - "unattended": true, - }, - "source": Object { - "index": ".slo-observability.sli-v2*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now-30d/m", - "lte": "now/m", - }, - }, - }, - Object { - "term": Object { - "slo.budgetingMethod": "timeslices", - }, - }, - Object { - "term": Object { - "slo.timeWindow.type": "rolling", - }, - }, - Object { - "term": Object { - "slo.timeWindow.duration": "30d", - }, - }, - ], - }, - }, - "runtime_mappings": Object { - "errorBudgetEstimated": Object { - "script": "emit(false)", - "type": "boolean", - }, - "isTempDoc": Object { - "script": "emit(false)", - "type": "boolean", - }, - }, - }, - "sync": Object { - "time": Object { - "delay": "125s", - "field": "@timestamp", - }, - }, - "transform_id": "slo-summary-timeslices-30d-rolling", - }, - Object { - "ignore": Array [ - 409, - ], - }, - ], - Array [ - Object { - "_meta": Object { - "managed": true, - "managed_by": "observability", - "version": 3, - }, - "description": "Summarize every SLO with timeslices budgeting method and a 90 days rolling time window", - "dest": Object { - "index": ".slo-observability.summary-v2", - "pipeline": ".slo-observability.summary.pipeline", - }, - "frequency": "1m", - "pivot": Object { - "aggregations": Object { - "_objectiveTarget": Object { - "max": Object { - "field": "slo.objective.target", - }, - }, - "errorBudgetConsumed": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetInitial": "errorBudgetInitial", - "sliValue": "sliValue", - }, - "script": "if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }", - }, - }, - "errorBudgetInitial": Object { - "bucket_script": Object { - "buckets_path": Object { - "objectiveTarget": "_objectiveTarget", - }, - "script": "1 - params.objectiveTarget", - }, - }, - "errorBudgetRemaining": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetConsummed": "errorBudgetConsumed", - }, - "script": "1 - params.errorBudgetConsummed", - }, - }, - "goodEvents": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "sliValue": Object { - "bucket_script": Object { - "buckets_path": Object { - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - }, - "script": "if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }", - }, - }, - "statusCode": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetRemaining": "errorBudgetRemaining", - "objectiveTarget": "_objectiveTarget", - "sliValue": "sliValue", - }, - "script": Object { - "source": "if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }", - }, - }, - }, - "totalEvents": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "group_by": Object { - "errorBudgetEstimated": Object { - "terms": Object { - "field": "errorBudgetEstimated", - }, - }, - "isTempDoc": Object { - "terms": Object { - "field": "isTempDoc", - }, - }, - "service.environment": Object { - "terms": Object { - "field": "service.environment", - "missing_bucket": true, - }, - }, - "service.name": Object { - "terms": Object { - "field": "service.name", - "missing_bucket": true, - }, - }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, - "slo.id": Object { - "terms": Object { - "field": "slo.id", - }, - }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, - "slo.instanceId": Object { - "terms": Object { - "field": "slo.instanceId", - }, - }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.revision": Object { - "terms": Object { - "field": "slo.revision", - }, - }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, - "transaction.name": Object { - "terms": Object { - "field": "transaction.name", - "missing_bucket": true, - }, - }, - "transaction.type": Object { - "terms": Object { - "field": "transaction.type", - "missing_bucket": true, - }, - }, - }, - }, - "settings": Object { - "deduce_mappings": false, - "unattended": true, - }, - "source": Object { - "index": ".slo-observability.sli-v2*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now-90d/m", - "lte": "now/m", - }, - }, - }, - Object { - "term": Object { - "slo.budgetingMethod": "timeslices", - }, - }, - Object { - "term": Object { - "slo.timeWindow.type": "rolling", - }, - }, - Object { - "term": Object { - "slo.timeWindow.duration": "90d", - }, - }, - ], - }, - }, - "runtime_mappings": Object { - "errorBudgetEstimated": Object { - "script": "emit(false)", - "type": "boolean", - }, - "isTempDoc": Object { - "script": "emit(false)", - "type": "boolean", - }, - }, - }, - "sync": Object { - "time": Object { - "delay": "125s", - "field": "@timestamp", - }, - }, - "transform_id": "slo-summary-timeslices-90d-rolling", - }, - Object { - "ignore": Array [ - 409, - ], - }, - ], - Array [ - Object { - "_meta": Object { - "managed": true, - "managed_by": "observability", - "version": 3, - }, - "description": "Summarize every SLO with timeslices budgeting method and a weekly calendar aligned time window", - "dest": Object { - "index": ".slo-observability.summary-v2", - "pipeline": ".slo-observability.summary.pipeline", - }, - "frequency": "1m", - "pivot": Object { - "aggregations": Object { - "_objectiveTarget": Object { - "max": Object { - "field": "slo.objective.target", - }, - }, - "_sliceDurationInSeconds": Object { - "max": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "_totalSlicesInPeriod": Object { - "bucket_script": Object { - "buckets_path": Object { - "sliceDurationInSeconds": "_sliceDurationInSeconds", - }, - "script": "Math.ceil(7 * 24 * 60 * 60 / params.sliceDurationInSeconds)", - }, - }, - "errorBudgetConsumed": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetInitial": "errorBudgetInitial", - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - "totalSlicesInPeriod": "_totalSlicesInPeriod", - }, - "script": "if (params.totalEvents == 0) { return 0 } else { return (params.totalEvents - params.goodEvents) / (params.totalSlicesInPeriod * params.errorBudgetInitial) }", - }, - }, - "errorBudgetInitial": Object { - "bucket_script": Object { - "buckets_path": Object { - "objective": "_objectiveTarget", - }, - "script": "1 - params.objective", - }, - }, - "errorBudgetRemaining": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetConsumed": "errorBudgetConsumed", - }, - "script": "1 - params.errorBudgetConsumed", - }, - }, - "goodEvents": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "sliValue": Object { - "bucket_script": Object { - "buckets_path": Object { - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - }, - "script": "if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }", - }, - }, - "statusCode": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetRemaining": "errorBudgetRemaining", - "objective": "_objectiveTarget", - "sliValue": "sliValue", - }, - "script": "if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }", - }, - }, - "totalEvents": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "group_by": Object { - "errorBudgetEstimated": Object { - "terms": Object { - "field": "errorBudgetEstimated", - }, - }, - "isTempDoc": Object { - "terms": Object { - "field": "isTempDoc", - }, - }, - "service.environment": Object { - "terms": Object { - "field": "service.environment", - "missing_bucket": true, - }, - }, - "service.name": Object { - "terms": Object { - "field": "service.name", - "missing_bucket": true, - }, - }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, - "slo.id": Object { - "terms": Object { - "field": "slo.id", - }, - }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, - "slo.instanceId": Object { - "terms": Object { - "field": "slo.instanceId", - }, - }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.revision": Object { - "terms": Object { - "field": "slo.revision", - }, - }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, - "transaction.name": Object { - "terms": Object { - "field": "transaction.name", - "missing_bucket": true, - }, - }, - "transaction.type": Object { - "terms": Object { - "field": "transaction.type", - "missing_bucket": true, - }, - }, - }, - }, - "settings": Object { - "deduce_mappings": false, - "unattended": true, - }, - "source": Object { - "index": ".slo-observability.sli-v2*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now/w", - "lte": "now/m", - }, - }, - }, - Object { - "term": Object { - "slo.budgetingMethod": "timeslices", - }, - }, - Object { - "term": Object { - "slo.timeWindow.type": "calendarAligned", - }, - }, - Object { - "term": Object { - "slo.timeWindow.duration": "1w", - }, - }, - ], - }, - }, - "runtime_mappings": Object { - "errorBudgetEstimated": Object { - "script": "emit(false)", - "type": "boolean", - }, - "isTempDoc": Object { - "script": "emit(false)", - "type": "boolean", - }, - }, - }, - "sync": Object { - "time": Object { - "delay": "125s", - "field": "@timestamp", - }, - }, - "transform_id": "slo-summary-timeslices-weekly-aligned", - }, - Object { - "ignore": Array [ - 409, - ], - }, - ], - Array [ - Object { - "_meta": Object { - "managed": true, - "managed_by": "observability", - "version": 3, - }, - "description": "Summarize every SLO with timeslices budgeting method and a monthly calendar aligned time window", - "dest": Object { - "index": ".slo-observability.summary-v2", - "pipeline": ".slo-observability.summary.pipeline", - }, - "frequency": "1m", - "pivot": Object { - "aggregations": Object { - "_objectiveTarget": Object { - "max": Object { - "field": "slo.objective.target", - }, - }, - "_sliceDurationInSeconds": Object { - "max": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "_totalSlicesInPeriod": Object { - "bucket_script": Object { - "buckets_path": Object { - "sliceDurationInSeconds": "_sliceDurationInSeconds", - }, - "script": Object { - "source": " - Date d = new Date(); - Instant instant = Instant.ofEpochMilli(d.getTime()); - LocalDateTime now = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); - LocalDateTime startOfMonth = now - .withDayOfMonth(1) - .withHour(0) - .withMinute(0) - .withSecond(0); - LocalDateTime startOfNextMonth = startOfMonth.plusMonths(1); - double sliceDurationInMinutes = params.sliceDurationInSeconds / 60; - - return Math.ceil(Duration.between(startOfMonth, startOfNextMonth).toMinutes() / sliceDurationInMinutes); - ", - }, - }, - }, - "errorBudgetConsumed": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetInitial": "errorBudgetInitial", - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - "totalSlicesInPeriod": "_totalSlicesInPeriod", - }, - "script": "if (params.totalEvents == 0) { return 0 } else { return (params.totalEvents - params.goodEvents) / (params.totalSlicesInPeriod * params.errorBudgetInitial) }", - }, - }, - "errorBudgetInitial": Object { - "bucket_script": Object { - "buckets_path": Object { - "objective": "_objectiveTarget", - }, - "script": "1 - params.objective", - }, - }, - "errorBudgetRemaining": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetConsumed": "errorBudgetConsumed", - }, - "script": "1 - params.errorBudgetConsumed", - }, - }, - "goodEvents": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "sliValue": Object { - "bucket_script": Object { - "buckets_path": Object { - "goodEvents": "goodEvents", - "totalEvents": "totalEvents", - }, - "script": "if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }", - }, - }, - "statusCode": Object { - "bucket_script": Object { - "buckets_path": Object { - "errorBudgetRemaining": "errorBudgetRemaining", - "objective": "_objectiveTarget", - "sliValue": "sliValue", - }, - "script": "if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }", - }, - }, - "totalEvents": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "group_by": Object { - "errorBudgetEstimated": Object { - "terms": Object { - "field": "errorBudgetEstimated", - }, - }, - "isTempDoc": Object { - "terms": Object { - "field": "isTempDoc", - }, - }, - "service.environment": Object { - "terms": Object { - "field": "service.environment", - "missing_bucket": true, - }, - }, - "service.name": Object { - "terms": Object { - "field": "service.name", - "missing_bucket": true, - }, - }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, - "slo.id": Object { - "terms": Object { - "field": "slo.id", - }, - }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, - "slo.instanceId": Object { - "terms": Object { - "field": "slo.instanceId", - }, - }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.revision": Object { - "terms": Object { - "field": "slo.revision", - }, - }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, - "transaction.name": Object { - "terms": Object { - "field": "transaction.name", - "missing_bucket": true, - }, - }, - "transaction.type": Object { - "terms": Object { - "field": "transaction.type", - "missing_bucket": true, - }, - }, - }, - }, - "settings": Object { - "deduce_mappings": false, - "unattended": true, - }, - "source": Object { - "index": ".slo-observability.sli-v2*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now/M", - "lte": "now/m", - }, - }, - }, - Object { - "term": Object { - "slo.budgetingMethod": "timeslices", - }, - }, - Object { - "term": Object { - "slo.timeWindow.type": "calendarAligned", - }, - }, - Object { - "term": Object { - "slo.timeWindow.duration": "1M", - }, - }, - ], - }, - }, - "runtime_mappings": Object { - "errorBudgetEstimated": Object { - "script": "emit(false)", - "type": "boolean", - }, - "isTempDoc": Object { - "script": "emit(false)", - "type": "boolean", - }, - }, - }, - "sync": Object { - "time": Object { - "delay": "125s", - "field": "@timestamp", - }, - }, - "transform_id": "slo-summary-timeslices-monthly-aligned", - }, - Object { - "ignore": Array [ - 409, - ], - }, - ], -] -`; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.test.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.test.ts deleted file mode 100644 index be79f9d796142..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { - ElasticsearchClientMock, - elasticsearchServiceMock, - loggingSystemMock, -} from '@kbn/core/server/mocks'; -import { MockedLogger } from '@kbn/logging-mocks'; -import { DefaultSummaryTransformInstaller } from './summary_transform_installer'; -import { ALL_TRANSFORM_TEMPLATES } from './templates'; - -describe('Summary Transform Installer', () => { - let esClientMock: ElasticsearchClientMock; - let loggerMock: jest.Mocked; - - beforeEach(() => { - esClientMock = elasticsearchServiceMock.createElasticsearchClient(); - loggerMock = loggingSystemMock.createLogger(); - }); - - it('skips the installation when latest version already installed', async () => { - esClientMock.transform.getTransform.mockResolvedValue({ - count: ALL_TRANSFORM_TEMPLATES.length, - // @ts-ignore - transforms: ALL_TRANSFORM_TEMPLATES.map((transform) => ({ - id: transform.transform_id, - _meta: transform._meta, - })), - }); - const installer = new DefaultSummaryTransformInstaller(esClientMock, loggerMock); - - await installer.installAndStart(); - - expect(esClientMock.transform.stopTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.deleteTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.putTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.startTransform).not.toHaveBeenCalled(); - }); - - it('installs every summary transforms when none are already installed', async () => { - esClientMock.transform.getTransform.mockResolvedValue({ count: 0, transforms: [] }); - const installer = new DefaultSummaryTransformInstaller(esClientMock, loggerMock); - - await installer.installAndStart(); - - const nbOfTransforms = ALL_TRANSFORM_TEMPLATES.length; - - expect(esClientMock.transform.stopTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.deleteTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.putTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.startTransform).toHaveBeenCalledTimes(nbOfTransforms); - }); - - it('desinstalls previous summary transforms prior to installing the new ones', async () => { - esClientMock.transform.getTransform.mockResolvedValue({ - count: ALL_TRANSFORM_TEMPLATES.length, - // @ts-ignore - transforms: ALL_TRANSFORM_TEMPLATES.map((transform) => ({ - id: transform.transform_id, - _meta: { ...transform._meta, version: -1 }, - })), - }); - const installer = new DefaultSummaryTransformInstaller(esClientMock, loggerMock); - - await installer.installAndStart(); - - const nbOfTransforms = ALL_TRANSFORM_TEMPLATES.length; - - expect(esClientMock.transform.stopTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.deleteTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.putTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.startTransform).toHaveBeenCalledTimes(nbOfTransforms); - }); - - it('installs only the missing summary transforms', async () => { - const occurrencesSummaryTransforms = ALL_TRANSFORM_TEMPLATES.filter((transform) => - transform.transform_id.includes('-occurrences-') - ); - esClientMock.transform.getTransform.mockResolvedValue({ - count: occurrencesSummaryTransforms.length, - // @ts-ignore - transforms: occurrencesSummaryTransforms.map((transform) => ({ - id: transform.transform_id, - _meta: transform._meta, - })), - }); - const installer = new DefaultSummaryTransformInstaller(esClientMock, loggerMock); - - await installer.installAndStart(); - - const nbOfTransforms = ALL_TRANSFORM_TEMPLATES.length - occurrencesSummaryTransforms.length; - - expect(esClientMock.transform.stopTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.deleteTransform).not.toHaveBeenCalled(); - expect(esClientMock.transform.putTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.startTransform).toHaveBeenCalledTimes(nbOfTransforms); - expect(esClientMock.transform.putTransform.mock.calls).toMatchSnapshot(); - }); -}); diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.ts deleted file mode 100644 index 0a51338615b42..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/summary_transform_installer.ts +++ /dev/null @@ -1,105 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import type { ElasticsearchClient, Logger } from '@kbn/core/server'; -import { - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../common/slo/constants'; -import { retryTransientEsErrors } from '../../../utils/retry'; -import { ALL_TRANSFORM_TEMPLATES } from './templates'; - -export interface SummaryTransformInstaller { - installAndStart(): Promise; -} - -export class DefaultSummaryTransformInstaller implements SummaryTransformInstaller { - constructor(private esClient: ElasticsearchClient, private logger: Logger) {} - - public async installAndStart(): Promise { - const allTransformIds = ALL_TRANSFORM_TEMPLATES.map((transform) => transform.transform_id); - const summaryTransforms = await this.execute(() => - this.esClient.transform.getTransform( - { transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}*`, allow_no_match: true }, - { ignore: [404] } - ) - ); - const alreadyInstalled = - summaryTransforms.count === allTransformIds.length && - summaryTransforms.transforms.every( - (transform) => transform._meta?.version === SLO_SUMMARY_TRANSFORMS_VERSION - ) && - summaryTransforms.transforms.every((transform) => allTransformIds.includes(transform.id)); - - if (alreadyInstalled) { - this.logger.info(`SLO summary transforms already installed - skipping`); - return; - } - - for (const transformTemplate of ALL_TRANSFORM_TEMPLATES) { - const transformId = transformTemplate.transform_id; - const transform = summaryTransforms.transforms.find((t) => t.id === transformId); - - const transformAlreadyInstalled = - !!transform && transform._meta?.version === SLO_SUMMARY_TRANSFORMS_VERSION; - const previousTransformAlreadyInstalled = - !!transform && transform._meta?.version !== SLO_SUMMARY_TRANSFORMS_VERSION; - - if (transformAlreadyInstalled) { - this.logger.info(`SLO summary transform [${transformId}] already installed - skipping`); - continue; - } - - if (previousTransformAlreadyInstalled) { - await this.deletePreviousTransformVersion(transformId); - } - - await this.installTransform(transformId, transformTemplate); - await this.startTransform(transformId); - } - - this.logger.info(`SLO summary transforms installed and started`); - } - - private async installTransform( - transformId: string, - transformTemplate: TransformPutTransformRequest - ) { - this.logger.info(`Installing SLO summary transform [${transformId}]`); - await this.execute(() => - this.esClient.transform.putTransform(transformTemplate, { ignore: [409] }) - ); - } - - private async deletePreviousTransformVersion(transformId: string) { - this.logger.info(`Deleting previous SLO summary transform [${transformId}]`); - await this.execute(() => - this.esClient.transform.stopTransform( - { transform_id: transformId, allow_no_match: true, force: true }, - { ignore: [409, 404] } - ) - ); - await this.execute(() => - this.esClient.transform.deleteTransform( - { transform_id: transformId, force: true }, - { ignore: [409, 404] } - ) - ); - } - - private async startTransform(transformId: string) { - this.logger.info(`Starting SLO summary transform [${transformId}]`); - await this.execute(() => - this.esClient.transform.startTransform({ transform_id: transformId }, { ignore: [409] }) - ); - } - - private async execute(esCall: () => Promise): Promise { - return await retryTransientEsErrors(esCall, { logger: this.logger }); - } -} diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/common.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/common.ts deleted file mode 100644 index c99a6c2be9d3c..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/common.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export const groupBy = { - 'slo.id': { - terms: { - field: 'slo.id', - }, - }, - 'slo.revision': { - terms: { - field: 'slo.revision', - }, - }, - 'slo.groupBy': { - terms: { - field: 'slo.groupBy', - }, - }, - 'slo.instanceId': { - terms: { - field: 'slo.instanceId', - }, - }, - 'slo.name': { - terms: { - field: 'slo.name', - }, - }, - 'slo.description': { - terms: { - field: 'slo.description', - }, - }, - 'slo.tags': { - terms: { - field: 'slo.tags', - }, - }, - 'slo.indicator.type': { - terms: { - field: 'slo.indicator.type', - }, - }, - 'slo.budgetingMethod': { - terms: { - field: 'slo.budgetingMethod', - }, - }, - 'slo.timeWindow.duration': { - terms: { - field: 'slo.timeWindow.duration', - }, - }, - 'slo.timeWindow.type': { - terms: { - field: 'slo.timeWindow.type', - }, - }, - errorBudgetEstimated: { - terms: { - field: 'errorBudgetEstimated', - }, - }, - // Differentiate the temporary document from the summary one - isTempDoc: { - terms: { - field: 'isTempDoc', - }, - }, - // optional fields: only specified for APM indicators. Must include missing_bucket:true - 'service.name': { - terms: { - field: 'service.name', - missing_bucket: true, - }, - }, - 'service.environment': { - terms: { - field: 'service.environment', - missing_bucket: true, - }, - }, - 'transaction.name': { - terms: { - field: 'transaction.name', - missing_bucket: true, - }, - }, - 'transaction.type': { - terms: { - field: 'transaction.type', - missing_bucket: true, - }, - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/index.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/index.ts deleted file mode 100644 index 68c42db91e923..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/index.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 { SUMMARY_OCCURRENCES_7D_ROLLING } from './summary_occurrences_7d_rolling'; -import { SUMMARY_OCCURRENCES_30D_ROLLING } from './summary_occurrences_30d_rolling'; -import { SUMMARY_OCCURRENCES_90D_ROLLING } from './summary_occurrences_90d_rolling'; -import { SUMMARY_TIMESLICES_7D_ROLLING } from './summary_timeslices_7d_rolling'; -import { SUMMARY_TIMESLICES_30D_ROLLING } from './summary_timeslices_30d_rolling'; -import { SUMMARY_TIMESLICES_90D_ROLLING } from './summary_timeslices_90d_rolling'; -import { SUMMARY_OCCURRENCES_WEEKLY_ALIGNED } from './summary_occurrences_weekly_aligned'; -import { SUMMARY_OCCURRENCES_MONTHLY_ALIGNED } from './summary_occurrences_monthly_aligned'; -import { SUMMARY_TIMESLICES_WEEKLY_ALIGNED } from './summary_timeslices_weekly_aligned'; -import { SUMMARY_TIMESLICES_MONTHLY_ALIGNED } from './summary_timeslices_monthly_aligned'; - -export const ALL_TRANSFORM_TEMPLATES = [ - SUMMARY_OCCURRENCES_7D_ROLLING, - SUMMARY_OCCURRENCES_30D_ROLLING, - SUMMARY_OCCURRENCES_90D_ROLLING, - SUMMARY_OCCURRENCES_WEEKLY_ALIGNED, - SUMMARY_OCCURRENCES_MONTHLY_ALIGNED, - SUMMARY_TIMESLICES_7D_ROLLING, - SUMMARY_TIMESLICES_30D_ROLLING, - SUMMARY_TIMESLICES_90D_ROLLING, - SUMMARY_TIMESLICES_WEEKLY_ALIGNED, - SUMMARY_TIMESLICES_MONTHLY_ALIGNED, -]; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_30d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_30d_rolling.ts deleted file mode 100644 index 9fb34a38051f7..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_30d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_OCCURRENCES_30D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}occurrences-30d-rolling`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-30d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'occurrences', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '30d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.numerator', - }, - }, - totalEvents: { - sum: { - field: 'slo.denominator', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with occurrences budgeting method and a 30 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_7d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_7d_rolling.ts deleted file mode 100644 index 9ceb6cd4290a0..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_7d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_OCCURRENCES_7D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}occurrences-7d-rolling`, - dest: { - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-7d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'occurrences', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '7d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.numerator', - }, - }, - totalEvents: { - sum: { - field: 'slo.denominator', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with occurrences budgeting method and a 7 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_90d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_90d_rolling.ts deleted file mode 100644 index d0f1729f77225..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_90d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_OCCURRENCES_90D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}occurrences-90d-rolling`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-90d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'occurrences', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '90d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.numerator', - }, - }, - totalEvents: { - sum: { - field: 'slo.denominator', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with occurrences budgeting method and a 90 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_monthly_aligned.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_monthly_aligned.ts deleted file mode 100644 index a5b2a70932a5e..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_monthly_aligned.ts +++ /dev/null @@ -1,151 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_OCCURRENCES_MONTHLY_ALIGNED: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}occurrences-monthly-aligned`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(true)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now/M', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'occurrences', - }, - }, - { - term: { - 'slo.timeWindow.type': 'calendarAligned', - }, - }, - { - term: { - 'slo.timeWindow.duration': '1M', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - goodEvents: { - sum: { - field: 'slo.numerator', - }, - }, - totalEvents: { - sum: { - field: 'slo.denominator', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objective: '_objectiveTarget', - }, - script: '1 - params.objective', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsumed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsumed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objective: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - description: - 'Summarize every SLO with occurrences budgeting method and a monthly calendar aligned time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_weekly_aligned.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_weekly_aligned.ts deleted file mode 100644 index 43ed92704c119..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_occurrences_weekly_aligned.ts +++ /dev/null @@ -1,151 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_OCCURRENCES_WEEKLY_ALIGNED: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}occurrences-weekly-aligned`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(true)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now/w', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'occurrences', - }, - }, - { - term: { - 'slo.timeWindow.type': 'calendarAligned', - }, - }, - { - term: { - 'slo.timeWindow.duration': '1w', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - goodEvents: { - sum: { - field: 'slo.numerator', - }, - }, - totalEvents: { - sum: { - field: 'slo.denominator', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objective: '_objectiveTarget', - }, - script: '1 - params.objective', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsumed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsumed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objective: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - description: - 'Summarize every SLO with occurrences budgeting method and a weekly calendar aligned time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_30d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_30d_rolling.ts deleted file mode 100644 index 5d1c6c48f8f1f..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_30d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_TIMESLICES_30D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}timeslices-30d-rolling`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-30d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'timeslices', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '30d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - totalEvents: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with timeslices budgeting method and a 30 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_7d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_7d_rolling.ts deleted file mode 100644 index a9256955ac08a..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_7d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_TIMESLICES_7D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}timeslices-7d-rolling`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-7d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'timeslices', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '7d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - totalEvents: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with timeslices budgeting method and a 7 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_90d_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_90d_rolling.ts deleted file mode 100644 index f922bd210e253..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_90d_rolling.ts +++ /dev/null @@ -1,153 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_TIMESLICES_90D_ROLLING: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}timeslices-90d-rolling`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now-90d/m', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'timeslices', - }, - }, - { - term: { - 'slo.timeWindow.type': 'rolling', - }, - }, - { - term: { - 'slo.timeWindow.duration': '90d', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - goodEvents: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - totalEvents: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objectiveTarget: '_objectiveTarget', - }, - script: '1 - params.objectiveTarget', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsummed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsummed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objectiveTarget: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: { - source: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objectiveTarget) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - }, - description: - 'Summarize every SLO with timeslices budgeting method and a 90 days rolling time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_monthly_aligned.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_monthly_aligned.ts deleted file mode 100644 index 3b39d9acd3372..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_monthly_aligned.ts +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_TIMESLICES_MONTHLY_ALIGNED: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}timeslices-monthly-aligned`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now/M', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'timeslices', - }, - }, - { - term: { - 'slo.timeWindow.type': 'calendarAligned', - }, - }, - { - term: { - 'slo.timeWindow.duration': '1M', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - _sliceDurationInSeconds: { - max: { - field: 'slo.objective.sliceDurationInSeconds', - }, - }, - _totalSlicesInPeriod: { - bucket_script: { - buckets_path: { - sliceDurationInSeconds: '_sliceDurationInSeconds', - }, - script: { - source: ` - Date d = new Date(); - Instant instant = Instant.ofEpochMilli(d.getTime()); - LocalDateTime now = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); - LocalDateTime startOfMonth = now - .withDayOfMonth(1) - .withHour(0) - .withMinute(0) - .withSecond(0); - LocalDateTime startOfNextMonth = startOfMonth.plusMonths(1); - double sliceDurationInMinutes = params.sliceDurationInSeconds / 60; - - return Math.ceil(Duration.between(startOfMonth, startOfNextMonth).toMinutes() / sliceDurationInMinutes); - `, - }, - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - goodEvents: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - totalEvents: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objective: '_objectiveTarget', - }, - script: '1 - params.objective', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - totalSlicesInPeriod: '_totalSlicesInPeriod', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.totalEvents == 0) { return 0 } else { return (params.totalEvents - params.goodEvents) / (params.totalSlicesInPeriod * params.errorBudgetInitial) }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsumed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsumed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objective: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - description: - 'Summarize every SLO with timeslices budgeting method and a monthly calendar aligned time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_weekly_aligned.ts b/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_weekly_aligned.ts deleted file mode 100644 index 3cae5f9bcd9b1..0000000000000 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/templates/summary_timeslices_weekly_aligned.ts +++ /dev/null @@ -1,166 +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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { - SLO_DESTINATION_INDEX_PATTERN, - SLO_SUMMARY_DESTINATION_INDEX_NAME, - SLO_SUMMARY_INGEST_PIPELINE_NAME, - SLO_SUMMARY_TRANSFORMS_VERSION, - SLO_SUMMARY_TRANSFORM_NAME_PREFIX, -} from '../../../../../common/slo/constants'; -import { groupBy } from './common'; - -export const SUMMARY_TIMESLICES_WEEKLY_ALIGNED: TransformPutTransformRequest = { - transform_id: `${SLO_SUMMARY_TRANSFORM_NAME_PREFIX}timeslices-weekly-aligned`, - dest: { - index: SLO_SUMMARY_DESTINATION_INDEX_NAME, - pipeline: SLO_SUMMARY_INGEST_PIPELINE_NAME, - }, - source: { - index: SLO_DESTINATION_INDEX_PATTERN, - runtime_mappings: { - errorBudgetEstimated: { - type: 'boolean', - script: 'emit(false)', - }, - isTempDoc: { - type: 'boolean', - script: 'emit(false)', - }, - }, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { - gte: 'now/w', - lte: 'now/m', - }, - }, - }, - { - term: { - 'slo.budgetingMethod': 'timeslices', - }, - }, - { - term: { - 'slo.timeWindow.type': 'calendarAligned', - }, - }, - { - term: { - 'slo.timeWindow.duration': '1w', - }, - }, - ], - }, - }, - }, - pivot: { - group_by: groupBy, - aggregations: { - _sliceDurationInSeconds: { - max: { - field: 'slo.objective.sliceDurationInSeconds', - }, - }, - _totalSlicesInPeriod: { - bucket_script: { - buckets_path: { - sliceDurationInSeconds: '_sliceDurationInSeconds', - }, - script: 'Math.ceil(7 * 24 * 60 * 60 / params.sliceDurationInSeconds)', - }, - }, - _objectiveTarget: { - max: { - field: 'slo.objective.target', - }, - }, - goodEvents: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - totalEvents: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, - sliValue: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - }, - script: - 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', - }, - }, - errorBudgetInitial: { - bucket_script: { - buckets_path: { - objective: '_objectiveTarget', - }, - script: '1 - params.objective', - }, - }, - errorBudgetConsumed: { - bucket_script: { - buckets_path: { - goodEvents: 'goodEvents', - totalEvents: 'totalEvents', - totalSlicesInPeriod: '_totalSlicesInPeriod', - errorBudgetInitial: 'errorBudgetInitial', - }, - script: - 'if (params.totalEvents == 0) { return 0 } else { return (params.totalEvents - params.goodEvents) / (params.totalSlicesInPeriod * params.errorBudgetInitial) }', - }, - }, - errorBudgetRemaining: { - bucket_script: { - buckets_path: { - errorBudgetConsumed: 'errorBudgetConsumed', - }, - script: '1 - params.errorBudgetConsumed', - }, - }, - statusCode: { - bucket_script: { - buckets_path: { - sliValue: 'sliValue', - objective: '_objectiveTarget', - errorBudgetRemaining: 'errorBudgetRemaining', - }, - script: - 'if (params.sliValue == -1) { return 0 } else if (params.sliValue >= params.objective) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }', - }, - }, - }, - }, - description: - 'Summarize every SLO with timeslices budgeting method and a weekly calendar aligned time window', - frequency: '1m', - sync: { - time: { - field: '@timestamp', - delay: '125s', - }, - }, - settings: { - deduce_mappings: false, - unattended: true, - }, - _meta: { - version: SLO_SUMMARY_TRANSFORMS_VERSION, - managed: true, - managed_by: 'observability', - }, -}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/common.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/common.ts new file mode 100644 index 0000000000000..743ba333c8f98 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/common.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALL_VALUE } from '@kbn/slo-schema'; +import { SLO } from '../../../../domain/models/slo'; + +export const getGroupBy = (slo: SLO) => { + const groupings = + slo.groupBy !== '' && slo.groupBy !== ALL_VALUE + ? [slo.groupBy].flat().reduce((acc, field) => { + return { + ...acc, + [`slo.groupings.${field}`]: { + terms: { + field: `slo.groupings.${field}`, + }, + }, + }; + }, {}) + : {}; + + return { + 'slo.id': { + terms: { + field: 'slo.id', + }, + }, + 'slo.revision': { + terms: { + field: 'slo.revision', + }, + }, + 'slo.instanceId': { + terms: { + field: 'slo.instanceId', + }, + }, + ...groupings, + // optional fields: only specified for APM indicators. Must include missing_bucket:true + 'service.name': { + terms: { + field: 'service.name', + missing_bucket: true, + }, + }, + 'service.environment': { + terms: { + field: 'service.environment', + missing_bucket: true, + }, + }, + 'transaction.name': { + terms: { + field: 'transaction.name', + missing_bucket: true, + }, + }, + 'transaction.type': { + terms: { + field: 'transaction.type', + missing_bucket: true, + }, + }, + }; +}; diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/occurrences.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/occurrences.ts new file mode 100644 index 0000000000000..2647e296f5544 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/occurrences.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; +import { SLO } from '../../../../domain/models'; +import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, + SLO_DESTINATION_INDEX_PATTERN, + SLO_RESOURCES_VERSION, + SLO_SUMMARY_DESTINATION_INDEX_NAME, +} from '../../../../../common/slo/constants'; +import { getGroupBy } from './common'; + +export function generateSummaryTransformForOccurrences(slo: SLO): TransformPutTransformRequest { + return { + transform_id: getSLOSummaryTransformId(slo.id, slo.revision), + dest: { + pipeline: getSLOSummaryPipelineId(slo.id, slo.revision), + index: SLO_SUMMARY_DESTINATION_INDEX_NAME, + }, + source: { + index: SLO_DESTINATION_INDEX_PATTERN, + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: `now-${slo.timeWindow.duration.format()}/m`, + lte: 'now/m', + }, + }, + }, + { + term: { + 'slo.id': slo.id, + }, + }, + { + term: { + 'slo.revision': slo.revision, + }, + }, + ], + }, + }, + }, + pivot: { + group_by: getGroupBy(slo), + aggregations: { + goodEvents: { + sum: { + field: 'slo.numerator', + }, + }, + totalEvents: { + sum: { + field: 'slo.denominator', + }, + }, + sliValue: { + bucket_script: { + buckets_path: { + goodEvents: 'goodEvents', + totalEvents: 'totalEvents', + }, + script: + 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', + }, + }, + errorBudgetInitial: { + bucket_script: { + buckets_path: {}, + script: `1 - ${slo.objective.target}`, + }, + }, + errorBudgetConsumed: { + bucket_script: { + buckets_path: { + sliValue: 'sliValue', + errorBudgetInitial: 'errorBudgetInitial', + }, + script: + 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', + }, + }, + errorBudgetRemaining: { + bucket_script: { + buckets_path: { + errorBudgetConsumed: 'errorBudgetConsumed', + }, + script: '1 - params.errorBudgetConsumed', + }, + }, + statusCode: { + bucket_script: { + buckets_path: { + sliValue: 'sliValue', + errorBudgetRemaining: 'errorBudgetRemaining', + }, + script: { + source: `if (params.sliValue == -1) { return 0 } else if (params.sliValue >= ${slo.objective.target}) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }`, + }, + }, + }, + latestSliTimestamp: { + max: { + field: '@timestamp', + }, + }, + }, + }, + description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, + frequency: '1m', + sync: { + time: { + field: 'event.ingested', + delay: '65s', + }, + }, + settings: { + deduce_mappings: false, + unattended: true, + }, + _meta: { + version: SLO_RESOURCES_VERSION, + managed: true, + managed_by: 'observability', + }, + }; +} diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_calendar_aligned.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_calendar_aligned.ts new file mode 100644 index 0000000000000..6f5c27e5f869a --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_calendar_aligned.ts @@ -0,0 +1,166 @@ +/* + * Copyright 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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; +import { DurationUnit, SLO } from '../../../../domain/models'; +import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, + SLO_DESTINATION_INDEX_PATTERN, + SLO_RESOURCES_VERSION, + SLO_SUMMARY_DESTINATION_INDEX_NAME, +} from '../../../../../common/slo/constants'; +import { getGroupBy } from './common'; + +export function generateSummaryTransformForTimeslicesAndCalendarAligned( + slo: SLO +): TransformPutTransformRequest { + const isWeeklyAligned = slo.timeWindow.duration.unit === DurationUnit.Week; + const sliceDurationInSeconds = slo.objective.timesliceWindow!.asSeconds(); + + return { + transform_id: getSLOSummaryTransformId(slo.id, slo.revision), + dest: { + pipeline: getSLOSummaryPipelineId(slo.id, slo.revision), + index: SLO_SUMMARY_DESTINATION_INDEX_NAME, + }, + source: { + index: SLO_DESTINATION_INDEX_PATTERN, + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: isWeeklyAligned ? `now/w` : `now/M`, + lte: 'now/m', + }, + }, + }, + { + term: { + 'slo.id': slo.id, + }, + }, + { + term: { + 'slo.revision': slo.revision, + }, + }, + ], + }, + }, + }, + pivot: { + group_by: getGroupBy(slo), + aggregations: { + _totalSlicesInPeriod: { + bucket_script: { + buckets_path: {}, + script: { + source: ` + if (${isWeeklyAligned} == true) { + return Math.ceil(7 * 24 * 60 * 60 / ${sliceDurationInSeconds}); + } else { + Date d = new Date(); + Instant instant = Instant.ofEpochMilli(d.getTime()); + LocalDateTime now = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); + LocalDateTime startOfMonth = now + .withDayOfMonth(1) + .withHour(0) + .withMinute(0) + .withSecond(0); + LocalDateTime startOfNextMonth = startOfMonth.plusMonths(1); + double sliceDurationInMinutes = ${sliceDurationInSeconds} / 60; + + return Math.ceil(Duration.between(startOfMonth, startOfNextMonth).toMinutes() / sliceDurationInMinutes); + } + `, + }, + }, + }, + goodEvents: { + sum: { + field: 'slo.isGoodSlice', + }, + }, + totalEvents: { + value_count: { + field: 'slo.isGoodSlice', + }, + }, + sliValue: { + bucket_script: { + buckets_path: { + goodEvents: 'goodEvents', + totalEvents: 'totalEvents', + }, + script: + 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', + }, + }, + errorBudgetInitial: { + bucket_script: { + buckets_path: {}, + script: `1 - ${slo.objective.target}`, + }, + }, + errorBudgetConsumed: { + bucket_script: { + buckets_path: { + goodEvents: 'goodEvents', + totalEvents: 'totalEvents', + totalSlicesInPeriod: '_totalSlicesInPeriod', + errorBudgetInitial: 'errorBudgetInitial', + }, + script: + 'if (params.totalEvents == 0) { return 0 } else { return (params.totalEvents - params.goodEvents) / (params.totalSlicesInPeriod * params.errorBudgetInitial) }', + }, + }, + errorBudgetRemaining: { + bucket_script: { + buckets_path: { + errorBudgetConsumed: 'errorBudgetConsumed', + }, + script: '1 - params.errorBudgetConsumed', + }, + }, + statusCode: { + bucket_script: { + buckets_path: { + sliValue: 'sliValue', + errorBudgetRemaining: 'errorBudgetRemaining', + }, + script: `if (params.sliValue == -1) { return 0 } else if (params.sliValue >= ${slo.objective.target}) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }`, + }, + }, + latestSliTimestamp: { + max: { + field: '@timestamp', + }, + }, + }, + }, + description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, + frequency: '1m', + sync: { + time: { + field: 'event.ingested', + delay: '65s', + }, + }, + settings: { + deduce_mappings: false, + unattended: true, + }, + _meta: { + version: SLO_RESOURCES_VERSION, + managed: true, + managed_by: 'observability', + }, + }; +} diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_rolling.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_rolling.ts new file mode 100644 index 0000000000000..a6212f671997b --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/generators/timeslices_rolling.ts @@ -0,0 +1,138 @@ +/* + * Copyright 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 { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; +import { SLO } from '../../../../domain/models'; +import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, + SLO_DESTINATION_INDEX_PATTERN, + SLO_RESOURCES_VERSION, + SLO_SUMMARY_DESTINATION_INDEX_NAME, +} from '../../../../../common/slo/constants'; +import { getGroupBy } from './common'; + +export function generateSummaryTransformForTimeslicesAndRolling( + slo: SLO +): TransformPutTransformRequest { + return { + transform_id: getSLOSummaryTransformId(slo.id, slo.revision), + dest: { + pipeline: getSLOSummaryPipelineId(slo.id, slo.revision), + index: SLO_SUMMARY_DESTINATION_INDEX_NAME, + }, + source: { + index: SLO_DESTINATION_INDEX_PATTERN, + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: `now-${slo.timeWindow.duration.format()}/m`, + lte: 'now/m', + }, + }, + }, + { + term: { + 'slo.id': slo.id, + }, + }, + { + term: { + 'slo.revision': slo.revision, + }, + }, + ], + }, + }, + }, + pivot: { + group_by: getGroupBy(slo), + aggregations: { + goodEvents: { + sum: { + field: 'slo.isGoodSlice', + }, + }, + totalEvents: { + value_count: { + field: 'slo.isGoodSlice', + }, + }, + sliValue: { + bucket_script: { + buckets_path: { + goodEvents: 'goodEvents', + totalEvents: 'totalEvents', + }, + script: + 'if (params.totalEvents == 0) { return -1 } else if (params.goodEvents >= params.totalEvents) { return 1 } else { return params.goodEvents / params.totalEvents }', + }, + }, + errorBudgetInitial: { + bucket_script: { + buckets_path: {}, + script: `1 - ${slo.objective.target}`, + }, + }, + errorBudgetConsumed: { + bucket_script: { + buckets_path: { + sliValue: 'sliValue', + errorBudgetInitial: 'errorBudgetInitial', + }, + script: + 'if (params.sliValue == -1) { return 0 } else { return (1 - params.sliValue) / params.errorBudgetInitial }', + }, + }, + errorBudgetRemaining: { + bucket_script: { + buckets_path: { + errorBudgetConsumed: 'errorBudgetConsumed', + }, + script: '1 - params.errorBudgetConsumed', + }, + }, + statusCode: { + bucket_script: { + buckets_path: { + sliValue: 'sliValue', + errorBudgetRemaining: 'errorBudgetRemaining', + }, + script: { + source: `if (params.sliValue == -1) { return 0 } else if (params.sliValue >= ${slo.objective.target}) { return 4 } else if (params.errorBudgetRemaining > 0) { return 2 } else { return 1 }`, + }, + }, + }, + latestSliTimestamp: { + max: { + field: '@timestamp', + }, + }, + }, + }, + description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, + frequency: '1m', + sync: { + time: { + field: 'event.ingested', + delay: '65s', + }, + }, + settings: { + deduce_mappings: false, + unattended: true, + }, + _meta: { + version: SLO_RESOURCES_VERSION, + managed: true, + managed_by: 'observability', + }, + }; +} diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform/helpers/create_temp_summary.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts similarity index 80% rename from x-pack/plugins/observability/server/services/slo/summary_transform/helpers/create_temp_summary.ts rename to x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts index 9b4a15f2bf51f..166ca0198dbb8 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_transform/helpers/create_temp_summary.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts @@ -8,7 +8,7 @@ import { ALL_VALUE } from '@kbn/slo-schema'; import { SLO } from '../../../../domain/models'; -export function createTempSummaryDocument(slo: SLO) { +export function createTempSummaryDocument(slo: SLO, spaceId: string) { return { service: { environment: null, @@ -33,6 +33,11 @@ export function createTempSummaryDocument(slo: SLO) { id: slo.id, budgetingMethod: slo.budgetingMethod, revision: slo.revision, + objective: { + target: slo.objective.target, + timesliceTarget: slo.objective.timesliceTarget ?? null, + timesliceWindow: slo.objective.timesliceWindow?.format() ?? null, + }, tags: slo.tags, }, goodEvents: 0, @@ -45,5 +50,6 @@ export function createTempSummaryDocument(slo: SLO) { statusCode: 0, status: 'NO_DATA', isTempDoc: true, + spaceId, }; } diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/summary_transform_generator.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/summary_transform_generator.ts new file mode 100644 index 0000000000000..7710515f6538a --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/summary_transform_generator.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; +import { SLO } from '../../../domain/models'; +import { generateSummaryTransformForOccurrences } from './generators/occurrences'; +import { generateSummaryTransformForTimeslicesAndRolling } from './generators/timeslices_rolling'; +import { generateSummaryTransformForTimeslicesAndCalendarAligned } from './generators/timeslices_calendar_aligned'; + +export interface SummaryTransformGenerator { + generate(slo: SLO): TransformPutTransformRequest; +} + +export class DefaultSummaryTransformGenerator implements SummaryTransformGenerator { + public generate(slo: SLO): TransformPutTransformRequest { + if (slo.budgetingMethod === 'occurrences') { + return generateSummaryTransformForOccurrences(slo); + } else if (slo.budgetingMethod === 'timeslices' && slo.timeWindow.type === 'rolling') { + return generateSummaryTransformForTimeslicesAndRolling(slo); + } else if (slo.budgetingMethod === 'timeslices' && slo.timeWindow.type === 'calendarAligned') { + return generateSummaryTransformForTimeslicesAndCalendarAligned(slo); + } + + throw new Error('Not supported SLO'); + } +} diff --git a/x-pack/plugins/observability/server/services/slo/summay_transform_manager.ts b/x-pack/plugins/observability/server/services/slo/summay_transform_manager.ts new file mode 100644 index 0000000000000..bc22f801c9fcc --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/summay_transform_manager.ts @@ -0,0 +1,99 @@ +/* + * Copyright 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 { ElasticsearchClient, Logger } from '@kbn/core/server'; + +import { SLO } from '../../domain/models'; +import { SecurityException } from '../../errors'; +import { retryTransientEsErrors } from '../../utils/retry'; +import { SummaryTransformGenerator } from './summary_transform_generator/summary_transform_generator'; +import { TransformManager } from './transform_manager'; + +type TransformId = string; + +export class DefaultSummaryTransformManager implements TransformManager { + constructor( + private generator: SummaryTransformGenerator, + private esClient: ElasticsearchClient, + private logger: Logger + ) {} + + async install(slo: SLO): Promise { + const transformParams = this.generator.generate(slo); + try { + await retryTransientEsErrors(() => this.esClient.transform.putTransform(transformParams), { + logger: this.logger, + }); + } catch (err) { + this.logger.error(`Cannot create summary transform for SLO [${slo.id}]`); + if (err.meta?.body?.error?.type === 'security_exception') { + throw new SecurityException(err.meta.body.error.reason); + } + + throw err; + } + + return transformParams.transform_id; + } + + async preview(transformId: string): Promise { + try { + await retryTransientEsErrors( + () => this.esClient.transform.previewTransform({ transform_id: transformId }), + { logger: this.logger } + ); + } catch (err) { + this.logger.error(`Cannot preview SLO summary transform [${transformId}]`); + throw err; + } + } + + async start(transformId: TransformId): Promise { + try { + await retryTransientEsErrors( + () => + this.esClient.transform.startTransform({ transform_id: transformId }, { ignore: [409] }), + { logger: this.logger } + ); + } catch (err) { + this.logger.error(`Cannot start SLO summary transform [${transformId}]`); + throw err; + } + } + + async stop(transformId: TransformId): Promise { + try { + await retryTransientEsErrors( + () => + this.esClient.transform.stopTransform( + { transform_id: transformId, wait_for_completion: true, force: true }, + { ignore: [404] } + ), + { logger: this.logger } + ); + } catch (err) { + this.logger.error(`Cannot stop SLO summary transform [${transformId}]`); + throw err; + } + } + + async uninstall(transformId: TransformId): Promise { + try { + await retryTransientEsErrors( + () => + this.esClient.transform.deleteTransform( + { transform_id: transformId, force: true }, + { ignore: [404] } + ), + { logger: this.logger } + ); + } catch (err) { + this.logger.error(`Cannot delete SLO summary transform [${transformId}]`); + throw err; + } + } +} diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap index d5ac57c80e40d..4fa12cae3e12e 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap @@ -190,66 +190,21 @@ Object { "field": "service.environment", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, } `; @@ -304,66 +259,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, } `; @@ -413,66 +323,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -527,66 +392,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.type": Object { "terms": Object { "field": "transaction.type", @@ -600,12 +420,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -660,71 +480,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -794,33 +564,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.apm.transactionDuration')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -830,48 +576,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -880,7 +590,7 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -889,12 +599,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -940,66 +650,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -1069,33 +734,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('occurrences')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.apm.transactionDuration')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -1105,42 +746,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.999)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -1149,6 +760,6 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap index c8d687383b513..515980a9dee54 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap @@ -178,66 +178,21 @@ Object { "field": "service.environment", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, } `; @@ -288,66 +243,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, } `; @@ -393,66 +303,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -503,66 +368,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.type": Object { "terms": Object { "field": "transaction.type", @@ -576,12 +396,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -629,71 +449,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -759,33 +529,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.apm.transactionErrorRate')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -795,48 +541,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -845,7 +555,7 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -854,12 +564,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -898,66 +608,21 @@ Object { "field": "service.name", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, "transaction.name": Object { "terms": Object { "field": "transaction.name", @@ -1023,33 +688,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('occurrences')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.apm.transactionErrorRate')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -1059,42 +700,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.999)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -1103,6 +714,6 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap index cdbdd8c527043..0b50f3ef5c52c 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap @@ -77,12 +77,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -151,71 +151,21 @@ Object { "fixed_interval": "2m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -253,33 +203,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.histogram.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -289,48 +215,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -339,7 +229,7 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -348,12 +238,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -413,66 +303,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -510,33 +355,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('occurrences')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.histogram.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -546,42 +367,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.999)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -590,6 +381,6 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap index 27da87629465d..0b5dc06be0a58 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap @@ -118,12 +118,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -166,71 +166,21 @@ Object { "fixed_interval": "2m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -268,33 +218,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.kql.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -304,48 +230,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -354,7 +244,7 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -363,12 +253,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -402,66 +292,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -499,33 +344,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('occurrences')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.kql.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -535,42 +356,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.999)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -579,6 +370,6 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap index 55ed414bd2ec7..ed5ee454a5596 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap @@ -117,12 +117,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -203,71 +203,21 @@ Object { "fixed_interval": "2m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -305,33 +255,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.metric.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -341,48 +267,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -391,7 +281,7 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -400,12 +290,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -477,66 +367,21 @@ Object { "fixed_interval": "1m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -574,33 +419,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('occurrences')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.metric.custom')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -610,42 +431,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.999)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -654,7 +445,7 @@ Object { "field": "log_timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/timeslice_metric.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/timeslice_metric.test.ts.snap index e2698ba3e1793..48ebb4de1e8d6 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/timeslice_metric.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/timeslice_metric.test.ts.snap @@ -33,12 +33,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -173,71 +173,21 @@ Object { "fixed_interval": "2m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -272,33 +222,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.metric.timeslice')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -308,48 +234,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -358,7 +248,7 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; @@ -367,12 +257,12 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 2, + "version": 3, }, - "description": "Rolled-up SLI data for SLO: irrelevant", + "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v2", - "pipeline": ".slo-observability.sli.pipeline", + "index": ".slo-observability.sli-v3", + "pipeline": ".slo-observability.sli.pipeline-v3", }, "frequency": "1m", "pivot": Object { @@ -507,71 +397,21 @@ Object { "fixed_interval": "2m", }, }, - "slo.budgetingMethod": Object { - "terms": Object { - "field": "slo.budgetingMethod", - }, - }, - "slo.description": Object { - "terms": Object { - "field": "slo.description", - }, - }, - "slo.groupBy": Object { - "terms": Object { - "field": "slo.groupBy", - }, - }, "slo.id": Object { "terms": Object { "field": "slo.id", }, }, - "slo.indicator.type": Object { - "terms": Object { - "field": "slo.indicator.type", - }, - }, "slo.instanceId": Object { "terms": Object { "field": "slo.instanceId", }, }, - "slo.name": Object { - "terms": Object { - "field": "slo.name", - }, - }, - "slo.objective.sliceDurationInSeconds": Object { - "terms": Object { - "field": "slo.objective.sliceDurationInSeconds", - }, - }, - "slo.objective.target": Object { - "terms": Object { - "field": "slo.objective.target", - }, - }, "slo.revision": Object { "terms": Object { "field": "slo.revision", }, }, - "slo.tags": Object { - "terms": Object { - "field": "slo.tags", - }, - }, - "slo.timeWindow.duration": Object { - "terms": Object { - "field": "slo.timeWindow.duration", - }, - }, - "slo.timeWindow.type": Object { - "terms": Object { - "field": "slo.timeWindow.type", - }, - }, }, }, "settings": Object { @@ -606,33 +446,9 @@ Object { }, }, "runtime_mappings": Object { - "slo.budgetingMethod": Object { - "script": Object { - "source": "emit('timeslices')", - }, - "type": "keyword", - }, - "slo.description": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.groupBy": Object { - "script": Object { - "source": "emit('*')", - }, - "type": "keyword", - }, "slo.id": Object { "script": Object { - "source": Any, - }, - "type": "keyword", - }, - "slo.indicator.type": Object { - "script": Object { - "source": "emit('sli.metric.timeslice')", + "source": "emit('irrelevant')", }, "type": "keyword", }, @@ -642,48 +458,12 @@ Object { }, "type": "keyword", }, - "slo.name": Object { - "script": Object { - "source": "emit('irrelevant')", - }, - "type": "keyword", - }, - "slo.objective.sliceDurationInSeconds": Object { - "script": Object { - "source": "emit(120)", - }, - "type": "long", - }, - "slo.objective.target": Object { - "script": Object { - "source": "emit(0.98)", - }, - "type": "double", - }, "slo.revision": Object { "script": Object { "source": "emit(1)", }, "type": "long", }, - "slo.tags": Object { - "script": Object { - "source": "emit('critical,k8s')", - }, - "type": "keyword", - }, - "slo.timeWindow.duration": Object { - "script": Object { - "source": "emit('7d')", - }, - "type": "keyword", - }, - "slo.timeWindow.type": Object { - "script": Object { - "source": "emit('rolling')", - }, - "type": "keyword", - }, }, }, "sync": Object { @@ -692,6 +472,6 @@ Object { "field": "@timestamp", }, }, - "transform_id": Any, + "transform_id": "slo-irrelevant-1", } `; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts index f19ee083a3115..6b5491e487191 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts @@ -17,32 +17,20 @@ const generator = new ApmTransactionDurationTransformGenerator(); describe('APM Transaction Duration Transform Generator', () => { it('returns the expected transform params with every specified indicator params', () => { - const slo = createSLO({ indicator: createAPMTransactionDurationIndicator() }); + const slo = createSLO({ id: 'irrelevant', indicator: createAPMTransactionDurationIndicator() }); const transform = generator.getTransformParams(slo); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${slo.id}-${slo.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${slo.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${slo.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', () => { const slo = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: createAPMTransactionDurationIndicator(), }); const transform = generator.getTransformParams(slo); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it("does not include the query filter when params are '*'", () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts index 54f72f1961588..9934f5ea27a51 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts @@ -17,32 +17,23 @@ const generator = new ApmTransactionErrorRateTransformGenerator(); describe('APM Transaction Error Rate Transform Generator', () => { it('returns the expected transform params with every specified indicator params', async () => { - const slo = createSLO({ indicator: createAPMTransactionErrorRateIndicator() }); + const slo = createSLO({ + id: 'irrelevant', + indicator: createAPMTransactionErrorRateIndicator(), + }); const transform = generator.getTransformParams(slo); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${slo.id}-${slo.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${slo.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${slo.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', async () => { const slo = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: createAPMTransactionErrorRateIndicator(), }); const transform = generator.getTransformParams(slo); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it("does not include the query filter when params are '*'", async () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.test.ts index fdf0bc27563fe..77ef70e75ca5f 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.test.ts @@ -30,6 +30,7 @@ describe('Histogram Transform Generator', () => { }); expect(() => generator.getTransformParams(anSLO)).toThrow(/Invalid KQL: foo:/); }); + it('throws when the total filter is invalid', () => { const anSLO = createSLO({ indicator: createHistogramIndicator({ @@ -42,6 +43,7 @@ describe('Histogram Transform Generator', () => { }); expect(() => generator.getTransformParams(anSLO)).toThrow(/Invalid KQL: foo:/); }); + it('throws when the query_filter is invalid', () => { const anSLO = createSLO({ indicator: createHistogramIndicator({ filter: '{ kql.query: invalid' }), @@ -51,32 +53,20 @@ describe('Histogram Transform Generator', () => { }); it('returns the expected transform params with every specified indicator params', async () => { - const anSLO = createSLO({ indicator: createHistogramIndicator() }); + const anSLO = createSLO({ id: 'irrelevant', indicator: createHistogramIndicator() }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${anSLO.id}-${anSLO.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${anSLO.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${anSLO.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', async () => { const anSLO = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: createHistogramIndicator(), }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it('filters the source using the kql query', async () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.test.ts index dd4511ec44bfd..1512bb5a655ab 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.test.ts @@ -37,32 +37,20 @@ describe('KQL Custom Transform Generator', () => { }); it('returns the expected transform params with every specified indicator params', async () => { - const anSLO = createSLO({ indicator: createKQLCustomIndicator() }); + const anSLO = createSLO({ id: 'irrelevant', indicator: createKQLCustomIndicator() }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${anSLO.id}-${anSLO.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${anSLO.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${anSLO.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', async () => { const anSLO = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: createKQLCustomIndicator(), }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it('filters the source using the kql query', async () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.test.ts index 69685bad0c09e..9ebacde28f0ed 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.test.ts @@ -69,32 +69,20 @@ describe('Metric Custom Transform Generator', () => { }); it('returns the expected transform params with every specified indicator params', async () => { - const anSLO = createSLO({ indicator: createMetricCustomIndicator() }); + const anSLO = createSLO({ id: 'irrelevant', indicator: createMetricCustomIndicator() }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${anSLO.id}-${anSLO.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${anSLO.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${anSLO.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', async () => { const anSLO = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: createMetricCustomIndicator(), }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it('filters the source using the kql query', async () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/timeslice_metric.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/timeslice_metric.test.ts index aa21f7e0ceb0e..7d221c25c27ed 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/timeslice_metric.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/timeslice_metric.test.ts @@ -70,33 +70,22 @@ describe('Timeslice Metric Transform Generator', () => { it('returns the expected transform params with every specified indicator params', async () => { const anSLO = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: everythingIndicator, }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); - expect(transform.transform_id).toEqual(`slo-${anSLO.id}-${anSLO.revision}`); - expect(transform.source.runtime_mappings!['slo.id']).toMatchObject({ - script: { source: `emit('${anSLO.id}')` }, - }); - expect(transform.source.runtime_mappings!['slo.revision']).toMatchObject({ - script: { source: `emit(${anSLO.revision})` }, - }); + expect(transform).toMatchSnapshot(); }); it('returns the expected transform params for timeslices slo', async () => { const anSLO = createSLOWithTimeslicesBudgetingMethod({ + id: 'irrelevant', indicator: everythingIndicator, }); const transform = generator.getTransformParams(anSLO); - expect(transform).toMatchSnapshot({ - transform_id: expect.any(String), - source: { runtime_mappings: { 'slo.id': { script: { source: expect.any(String) } } } }, - }); + expect(transform).toMatchSnapshot(); }); it('filters the source using the kql query', async () => { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts index 42572e61b38ab..7085f69b76422 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts @@ -32,12 +32,6 @@ export abstract class TransformGenerator { source: `emit(${slo.revision})`, }, }, - 'slo.groupBy': { - type: 'keyword', - script: { - source: `emit('${!!slo.groupBy ? slo.groupBy : ALL_VALUE}')`, - }, - }, ...(mustIncludeAllInstanceId && { 'slo.instanceId': { type: 'keyword', @@ -46,67 +40,11 @@ export abstract class TransformGenerator { }, }, }), - 'slo.name': { - type: 'keyword', - script: { - source: `emit('${slo.name}')`, - }, - }, - 'slo.description': { - type: 'keyword', - script: { - source: `emit('${slo.description}')`, - }, - }, - 'slo.tags': { - type: 'keyword', - script: { - source: `emit('${slo.tags}')`, - }, - }, - 'slo.indicator.type': { - type: 'keyword', - script: { - source: `emit('${slo.indicator.type}')`, - }, - }, - 'slo.objective.target': { - type: 'double', - script: { - source: `emit(${slo.objective.target})`, - }, - }, - ...(slo.objective.timesliceWindow && { - 'slo.objective.sliceDurationInSeconds': { - type: 'long', - script: { - source: `emit(${slo.objective.timesliceWindow!.asSeconds()})`, - }, - }, - }), - 'slo.budgetingMethod': { - type: 'keyword', - script: { - source: `emit('${slo.budgetingMethod}')`, - }, - }, - 'slo.timeWindow.duration': { - type: 'keyword', - script: { - source: `emit('${slo.timeWindow.duration.format()}')`, - }, - }, - 'slo.timeWindow.type': { - type: 'keyword', - script: { - source: `emit('${slo.timeWindow.type}')`, - }, - }, }; } public buildDescription(slo: SLO): string { - return `Rolled-up SLI data for SLO: ${slo.name}`; + return `Rolled-up SLI data for SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}]`; } public buildCommonGroupBy( @@ -119,27 +57,27 @@ export abstract class TransformGenerator { fixedInterval = slo.objective.timesliceWindow!.format(); } - const instanceIdField = - slo.groupBy !== '' && slo.groupBy !== ALL_VALUE ? slo.groupBy : 'slo.instanceId'; + const groupings = + slo.groupBy !== '' && slo.groupBy !== ALL_VALUE + ? [slo.groupBy].flat().reduce( + (acc, field) => { + return { + ...acc, + [`slo.groupings.${field}`]: { + terms: { + field, + }, + }, + }; + }, + { 'slo.instanceId': { terms: { field: slo.groupBy } } } + ) + : { 'slo.instanceId': { terms: { field: 'slo.instanceId' } } }; return { 'slo.id': { terms: { field: 'slo.id' } }, 'slo.revision': { terms: { field: 'slo.revision' } }, - 'slo.groupBy': { terms: { field: 'slo.groupBy' } }, - 'slo.instanceId': { terms: { field: instanceIdField } }, - 'slo.name': { terms: { field: 'slo.name' } }, - 'slo.description': { terms: { field: 'slo.description' } }, - 'slo.tags': { terms: { field: 'slo.tags' } }, - 'slo.indicator.type': { terms: { field: 'slo.indicator.type' } }, - 'slo.objective.target': { terms: { field: 'slo.objective.target' } }, - ...(slo.objective.timesliceWindow && { - 'slo.objective.sliceDurationInSeconds': { - terms: { field: 'slo.objective.sliceDurationInSeconds' }, - }, - }), - 'slo.budgetingMethod': { terms: { field: 'slo.budgetingMethod' } }, - 'slo.timeWindow.duration': { terms: { field: 'slo.timeWindow.duration' } }, - 'slo.timeWindow.type': { terms: { field: 'slo.timeWindow.type' } }, + ...groupings, ...extraGroupByFields, // @timestamp field defined in the destination index '@timestamp': { diff --git a/x-pack/plugins/observability/server/services/slo/update_slo.test.ts b/x-pack/plugins/observability/server/services/slo/update_slo.test.ts index 1fb6550e12c47..a8642cfa921f2 100644 --- a/x-pack/plugins/observability/server/services/slo/update_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/update_slo.test.ts @@ -6,11 +6,13 @@ */ import { ElasticsearchClient } from '@kbn/core/server'; -import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { MockedLogger } from '@kbn/logging-mocks'; import { UpdateSLOParams } from '@kbn/slo-schema'; -import { cloneDeep, pick, omit } from 'lodash'; +import { cloneDeep, omit, pick } from 'lodash'; import { + getSLOSummaryTransformId, getSLOTransformId, SLO_DESTINATION_INDEX_PATTERN, SLO_SUMMARY_DESTINATION_INDEX_PATTERN, @@ -22,7 +24,12 @@ import { createSLO, createSLOWithTimeslicesBudgetingMethod, } from './fixtures/slo'; -import { createSLORepositoryMock, createTransformManagerMock } from './mocks'; +import { weeklyCalendarAligned } from './fixtures/time_window'; +import { + createSLORepositoryMock, + createSummaryTransformManagerMock, + createTransformManagerMock, +} from './mocks'; import { SLORepository } from './slo_repository'; import { TransformManager } from './transform_manager'; import { UpdateSLO } from './update_slo'; @@ -31,13 +38,24 @@ describe('UpdateSLO', () => { let mockRepository: jest.Mocked; let mockTransformManager: jest.Mocked; let mockEsClient: jest.Mocked; + let loggerMock: jest.Mocked; + let mockSummaryTransformManager: jest.Mocked; let updateSLO: UpdateSLO; beforeEach(() => { mockRepository = createSLORepositoryMock(); mockTransformManager = createTransformManagerMock(); + loggerMock = loggingSystemMock.createLogger(); + mockSummaryTransformManager = createSummaryTransformManagerMock(); mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); - updateSLO = new UpdateSLO(mockRepository, mockTransformManager, mockEsClient); + updateSLO = new UpdateSLO( + mockRepository, + mockTransformManager, + mockSummaryTransformManager, + mockEsClient, + loggerMock, + 'some-space' + ); }); describe('when the update payload does not change the original SLO', () => { @@ -45,12 +63,18 @@ describe('UpdateSLO', () => { expect(mockTransformManager.stop).not.toBeCalled(); expect(mockTransformManager.uninstall).not.toBeCalled(); expect(mockTransformManager.install).not.toBeCalled(); - expect(mockTransformManager.preview).not.toBeCalled(); expect(mockTransformManager.start).not.toBeCalled(); + + expect(mockSummaryTransformManager.stop).not.toBeCalled(); + expect(mockSummaryTransformManager.uninstall).not.toBeCalled(); + expect(mockSummaryTransformManager.install).not.toBeCalled(); + expect(mockSummaryTransformManager.start).not.toBeCalled(); + expect(mockEsClient.deleteByQuery).not.toBeCalled(); + expect(mockEsClient.ingest.putPipeline).not.toBeCalled(); } - it('returns early with a full identical SLO payload', async () => { + it('returns early with a fully identical SLO payload', async () => { const slo = createSLO(); mockRepository.findById.mockResolvedValueOnce(slo); const updatePayload: UpdateSLOParams = omit(cloneDeep(slo), [ @@ -58,6 +82,7 @@ describe('UpdateSLO', () => { 'revision', 'createdAt', 'updatedAt', + 'version', 'enabled', ]); @@ -157,111 +182,116 @@ describe('UpdateSLO', () => { }); }); - it('updates the settings correctly', async () => { - const slo = createSLO(); - mockRepository.findById.mockResolvedValueOnce(slo); + describe('handles breaking changes', () => { + it('consideres a settings change as a breaking change', async () => { + const slo = createSLO(); + mockRepository.findById.mockResolvedValueOnce(slo); - const newSettings = { ...slo.settings, timestamp_field: 'newField' }; - await updateSLO.execute(slo.id, { settings: newSettings }); + const newSettings = { ...slo.settings, timestamp_field: 'newField' }; + await updateSLO.execute(slo.id, { settings: newSettings }); + + expectDeletionOfOriginalSLOResources(slo); + expect(mockRepository.save).toHaveBeenCalledWith( + expect.objectContaining({ + ...slo, + settings: newSettings, + revision: 2, + updatedAt: expect.anything(), + }) + ); + expectInstallationOfUpdatedSLOResources(); + }); - expectDeletionOfOriginalSLO(slo); - expect(mockRepository.save).toBeCalledWith( - expect.objectContaining({ - ...slo, - settings: newSettings, - revision: 2, - updatedAt: expect.anything(), - }) - ); - expectInstallationOfNewSLOTransform(); - }); + it('consideres a budgeting method change as a breaking change', async () => { + const slo = createSLO({ budgetingMethod: 'occurrences' }); + mockRepository.findById.mockResolvedValueOnce(slo); - it('updates the budgeting method correctly', async () => { - const slo = createSLO({ budgetingMethod: 'occurrences' }); - mockRepository.findById.mockResolvedValueOnce(slo); - - await updateSLO.execute(slo.id, { - budgetingMethod: 'timeslices', - objective: { - target: slo.objective.target, - timesliceTarget: 0.9, - timesliceWindow: oneMinute(), - }, + await updateSLO.execute(slo.id, { + budgetingMethod: 'timeslices', + objective: { + target: slo.objective.target, + timesliceTarget: 0.9, + timesliceWindow: oneMinute(), + }, + }); + + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); }); - expectDeletionOfOriginalSLO(slo); - expectInstallationOfNewSLOTransform(); - }); + it('consideres a timeWindow change as a breaking change', async () => { + const slo = createSLOWithTimeslicesBudgetingMethod(); + mockRepository.findById.mockResolvedValueOnce(slo); - it('updates the timeslice target correctly', async () => { - const slo = createSLOWithTimeslicesBudgetingMethod(); - mockRepository.findById.mockResolvedValueOnce(slo); + await updateSLO.execute(slo.id, { + timeWindow: weeklyCalendarAligned(), + }); - await updateSLO.execute(slo.id, { - objective: { - target: slo.objective.target, - timesliceTarget: 0.1, - timesliceWindow: slo.objective.timesliceWindow, - }, + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); }); - expectDeletionOfOriginalSLO(slo); - expectInstallationOfNewSLOTransform(); - }); + it('consideres a timeslice target change as a breaking change', async () => { + const slo = createSLOWithTimeslicesBudgetingMethod(); + mockRepository.findById.mockResolvedValueOnce(slo); - it('consideres a timeslice window change as a breaking change', async () => { - const slo = createSLOWithTimeslicesBudgetingMethod(); - mockRepository.findById.mockResolvedValueOnce(slo); + await updateSLO.execute(slo.id, { + objective: { + target: slo.objective.target, + timesliceTarget: 0.1, + timesliceWindow: slo.objective.timesliceWindow, + }, + }); - await updateSLO.execute(slo.id, { - objective: { - target: slo.objective.target, - timesliceTarget: slo.objective.timesliceTarget, - timesliceWindow: fiveMinute(), - }, + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); }); - expectDeletionOfOriginalSLO(slo); - expectInstallationOfNewSLOTransform(); - }); + it('consideres a timeslice window change as a breaking change', async () => { + const slo = createSLOWithTimeslicesBudgetingMethod(); + mockRepository.findById.mockResolvedValueOnce(slo); - it('index a temporary summary document', async () => { - const slo = createSLO({ - id: 'unique-id', - indicator: createAPMTransactionErrorRateIndicator({ environment: 'development' }), + await updateSLO.execute(slo.id, { + objective: { + target: slo.objective.target, + timesliceTarget: slo.objective.timesliceTarget, + timesliceWindow: fiveMinute(), + }, + }); + + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); }); - mockRepository.findById.mockResolvedValueOnce(slo); - const newIndicator = createAPMTransactionErrorRateIndicator({ environment: 'production' }); - await updateSLO.execute(slo.id, { indicator: newIndicator }); + it('consideres an indicator change as a breaking change', async () => { + const slo = createSLOWithTimeslicesBudgetingMethod(); + mockRepository.findById.mockResolvedValueOnce(slo); - expect(mockEsClient.index.mock.calls[0]).toMatchSnapshot(); - }); + await updateSLO.execute(slo.id, { + indicator: createAPMTransactionErrorRateIndicator(), + }); - it('removes the original data from the original SLO', async () => { - const slo = createSLO({ - indicator: createAPMTransactionErrorRateIndicator({ environment: 'development' }), + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); }); - mockRepository.findById.mockResolvedValueOnce(slo); - const newIndicator = createAPMTransactionErrorRateIndicator({ environment: 'production' }); - await updateSLO.execute(slo.id, { indicator: newIndicator }); + it('consideres a groupBy change as a breaking change', async () => { + const slo = createSLOWithTimeslicesBudgetingMethod(); + mockRepository.findById.mockResolvedValueOnce(slo); - expect(mockRepository.save).toBeCalledWith( - expect.objectContaining({ - ...slo, - indicator: newIndicator, - revision: 2, - updatedAt: expect.anything(), - }) - ); - expectInstallationOfNewSLOTransform(); - expectDeletionOfOriginalSLO(slo); + await updateSLO.execute(slo.id, { + groupBy: 'new-field', + }); + + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); + }); }); - describe('when error happens during the transform installation step', () => { + describe('when error happens during the update', () => { it('restores the previous SLO definition in the repository', async () => { const slo = createSLO({ + id: 'original-id', indicator: createAPMTransactionErrorRateIndicator({ environment: 'development' }), }); mockRepository.findById.mockResolvedValueOnce(slo); @@ -274,47 +304,38 @@ describe('UpdateSLO', () => { ); expect(mockRepository.save).toHaveBeenCalledWith(slo); - expect(mockTransformManager.preview).not.toHaveBeenCalled(); - expect(mockTransformManager.start).not.toHaveBeenCalled(); - expect(mockTransformManager.stop).not.toHaveBeenCalled(); - expect(mockTransformManager.uninstall).not.toHaveBeenCalled(); - expect(mockEsClient.deleteByQuery).not.toHaveBeenCalled(); + + // these calls are related to the updated slo + expect(mockSummaryTransformManager.stop).toMatchSnapshot(); + expect(mockSummaryTransformManager.uninstall).toMatchSnapshot(); + expect(mockTransformManager.stop).toMatchSnapshot(); + expect(mockTransformManager.uninstall).toMatchSnapshot(); + expect(mockEsClient.ingest.deletePipeline).toMatchSnapshot(); }); }); - describe('when error happens during the transform start step', () => { - it('removes the new transform and restores the previous SLO definition in the repository', async () => { - const slo = createSLO({ - indicator: createAPMTransactionErrorRateIndicator({ environment: 'development' }), - }); - mockRepository.findById.mockResolvedValueOnce(slo); - mockTransformManager.start.mockRejectedValueOnce(new Error('Transform start error')); - - const newIndicator = createAPMTransactionErrorRateIndicator({ environment: 'production' }); + function expectInstallationOfUpdatedSLOResources() { + expect(mockTransformManager.install).toHaveBeenCalled(); + expect(mockTransformManager.start).toHaveBeenCalled(); - await expect(updateSLO.execute(slo.id, { indicator: newIndicator })).rejects.toThrowError( - 'Transform start error' - ); + expect(mockEsClient.ingest.putPipeline).toHaveBeenCalled(); - expect(mockTransformManager.uninstall).toHaveBeenCalledWith( - getSLOTransformId(slo.id, slo.revision + 1) - ); - expect(mockRepository.save).toHaveBeenCalledWith(slo); - expect(mockTransformManager.stop).not.toHaveBeenCalled(); - expect(mockEsClient.deleteByQuery).not.toHaveBeenCalled(); - }); - }); + expect(mockSummaryTransformManager.install).toHaveBeenCalled(); + expect(mockSummaryTransformManager.start).toHaveBeenCalled(); - function expectInstallationOfNewSLOTransform() { - expect(mockTransformManager.install).toBeCalled(); - expect(mockTransformManager.preview).toBeCalled(); - expect(mockTransformManager.start).toBeCalled(); + expect(mockEsClient.index).toHaveBeenCalled(); } - function expectDeletionOfOriginalSLO(originalSlo: SLO) { + function expectDeletionOfOriginalSLOResources(originalSlo: SLO) { const transformId = getSLOTransformId(originalSlo.id, originalSlo.revision); - expect(mockTransformManager.stop).toBeCalledWith(transformId); - expect(mockTransformManager.uninstall).toBeCalledWith(transformId); + expect(mockTransformManager.stop).toHaveBeenCalledWith(transformId); + expect(mockTransformManager.uninstall).toHaveBeenCalledWith(transformId); + + const summaryTransformId = getSLOSummaryTransformId(originalSlo.id, originalSlo.revision); + expect(mockSummaryTransformManager.stop).toHaveBeenCalledWith(summaryTransformId); + expect(mockSummaryTransformManager.uninstall).toHaveBeenCalledWith(summaryTransformId); + + expect(mockEsClient.ingest.deletePipeline).toHaveBeenCalled(); expect(mockEsClient.deleteByQuery).toHaveBeenCalledTimes(2); expect(mockEsClient.deleteByQuery).toHaveBeenNthCalledWith( diff --git a/x-pack/plugins/observability/server/services/slo/update_slo.ts b/x-pack/plugins/observability/server/services/slo/update_slo.ts index 0d039c93c1ab0..1a73d54decbee 100644 --- a/x-pack/plugins/observability/server/services/slo/update_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/update_slo.ts @@ -5,26 +5,33 @@ * 2.0. */ -import { ElasticsearchClient } from '@kbn/core/server'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { UpdateSLOParams, UpdateSLOResponse, updateSLOResponseSchema } from '@kbn/slo-schema'; -import { isEqual } from 'lodash'; +import { isEqual, pick } from 'lodash'; import { + getSLOSummaryPipelineId, + getSLOSummaryTransformId, getSLOTransformId, SLO_DESTINATION_INDEX_PATTERN, SLO_SUMMARY_DESTINATION_INDEX_PATTERN, SLO_SUMMARY_TEMP_INDEX_NAME, } from '../../../common/slo/constants'; +import { getSLOSummaryPipelineTemplate } from '../../assets/ingest_templates/slo_summary_pipeline_template'; import { SLO } from '../../domain/models'; import { validateSLO } from '../../domain/services'; +import { retryTransientEsErrors } from '../../utils/retry'; import { SLORepository } from './slo_repository'; -import { createTempSummaryDocument } from './summary_transform/helpers/create_temp_summary'; +import { createTempSummaryDocument } from './summary_transform_generator/helpers/create_temp_summary'; import { TransformManager } from './transform_manager'; export class UpdateSLO { constructor( private repository: SLORepository, private transformManager: TransformManager, - private esClient: ElasticsearchClient + private summaryTransformManager: TransformManager, + private esClient: ElasticsearchClient, + private logger: Logger, + private spaceId: string ) {} public async execute(sloId: string, params: UpdateSLOParams): Promise { @@ -37,42 +44,81 @@ export class UpdateSLO { return this.toResponse(originalSlo); } + const fields = [ + 'indicator', + 'groupBy', + 'timeWindow', + 'objective', + 'budgetingMethod', + 'settings', + ]; + const requireRevisionBump = !isEqual(pick(originalSlo, fields), pick(updatedSlo, fields)); + updatedSlo = Object.assign(updatedSlo, { updatedAt: new Date(), - revision: originalSlo.revision + 1, + revision: requireRevisionBump ? originalSlo.revision + 1 : originalSlo.revision, }); validateSLO(updatedSlo); - - const updatedSloTransformId = getSLOTransformId(updatedSlo.id, updatedSlo.revision); await this.repository.save(updatedSlo); - try { - await this.transformManager.install(updatedSlo); - } catch (err) { - await this.repository.save(originalSlo); - throw err; + if (!requireRevisionBump) { + // At this point, we still need to update the summary pipeline to include the changes (name, desc, tags, ...) in the summary index + await retryTransientEsErrors( + () => + this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)), + { logger: this.logger } + ); + + return this.toResponse(updatedSlo); } + const updatedRollupTransformId = getSLOTransformId(updatedSlo.id, updatedSlo.revision); + const updatedSummaryTransformId = getSLOSummaryTransformId(updatedSlo.id, updatedSlo.revision); + try { - await this.transformManager.preview(updatedSloTransformId); - await this.transformManager.start(updatedSloTransformId); + await this.transformManager.install(updatedSlo); + await this.transformManager.start(updatedRollupTransformId); + + await retryTransientEsErrors( + () => + this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)), + { logger: this.logger } + ); + + await this.summaryTransformManager.install(updatedSlo); + await this.summaryTransformManager.start(updatedSummaryTransformId); + + await retryTransientEsErrors( + () => + this.esClient.index({ + index: SLO_SUMMARY_TEMP_INDEX_NAME, + id: `slo-${updatedSlo.id}`, + document: createTempSummaryDocument(updatedSlo, this.spaceId), + refresh: true, + }), + { logger: this.logger } + ); } catch (err) { - await Promise.all([ - this.transformManager.uninstall(updatedSloTransformId), - this.repository.save(originalSlo), - ]); + this.logger.error( + `Cannot update the SLO [id: ${updatedSlo.id}, revision: ${updatedSlo.revision}]. Rolling back.` + ); + + // Restore the previous slo definition + await this.repository.save(originalSlo); + // delete the created resources for the updated slo + await this.summaryTransformManager.stop(updatedSummaryTransformId); + await this.summaryTransformManager.uninstall(updatedSummaryTransformId); + await this.transformManager.stop(updatedRollupTransformId); + await this.transformManager.uninstall(updatedRollupTransformId); + await this.esClient.ingest.deletePipeline( + { id: getSLOSummaryPipelineId(updatedSlo.id, updatedSlo.revision) }, + { ignore: [404] } + ); throw err; } - await this.esClient.index({ - index: SLO_SUMMARY_TEMP_INDEX_NAME, - id: `slo-${updatedSlo.id}`, - document: createTempSummaryDocument(updatedSlo), - refresh: true, - }); - await this.deleteOriginalSLO(originalSlo); return this.toResponse(updatedSlo); @@ -80,9 +126,21 @@ export class UpdateSLO { private async deleteOriginalSLO(originalSlo: SLO) { try { - const originalSloTransformId = getSLOTransformId(originalSlo.id, originalSlo.revision); - await this.transformManager.stop(originalSloTransformId); - await this.transformManager.uninstall(originalSloTransformId); + const originalRollupTransformId = getSLOTransformId(originalSlo.id, originalSlo.revision); + await this.transformManager.stop(originalRollupTransformId); + await this.transformManager.uninstall(originalRollupTransformId); + + const originalSummaryTransformId = getSLOSummaryTransformId( + originalSlo.id, + originalSlo.revision + ); + await this.summaryTransformManager.stop(originalSummaryTransformId); + await this.summaryTransformManager.uninstall(originalSummaryTransformId); + + await this.esClient.ingest.deletePipeline( + { id: getSLOSummaryPipelineId(originalSlo.id, originalSlo.revision) }, + { ignore: [404] } + ); } catch (err) { // Any errors here should not prevent moving forward. // Worst case we keep rolling up data for the previous revision number. From bd21e301204a671a9209d1c7c4190e51d85bb5bb Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Tue, 12 Dec 2023 09:14:41 -0500 Subject: [PATCH 36/39] [Fleet] Make logs-* and metrics-* data views available across all spaces (#172991) ## Summary Closes #172009 Adds a call to `updateObjectsSpaces` with `['*']` as the spaces list after Fleet's managed data views are created. Existing data views will be updated to be global whenever `installKibanaAssets` is called. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../services/epm/kibana/assets/install.ts | 13 ++++- .../epm/kibana/index_pattern/install.test.ts | 54 +++++++++++++++++++ .../epm/kibana/index_pattern/install.ts | 24 +++++++++ .../apis/epm/data_views.ts | 18 +++++++ 4 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.test.ts diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts index 23327a2253f86..27be17ef2a170 100644 --- a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts @@ -32,7 +32,11 @@ import type { PackageSpecTags, } from '../../../../types'; import { savedObjectTypes } from '../../packages'; -import { indexPatternTypes, getIndexPatternSavedObjects } from '../index_pattern/install'; +import { + indexPatternTypes, + getIndexPatternSavedObjects, + makeManagedIndexPatternsGlobal, +} from '../index_pattern/install'; import { saveKibanaAssetsRefs } from '../../packages/install'; import { deleteKibanaSavedObjectsAssets } from '../../packages/remove'; import { KibanaSOReferenceError } from '../../../../errors'; @@ -114,12 +118,14 @@ export function createSavedObjectKibanaAsset(asset: ArchiveAsset): SavedObjectTo } export async function installKibanaAssets(options: { + savedObjectsClient: SavedObjectsClientContract; savedObjectsImporter: SavedObjectsImporterContract; logger: Logger; pkgName: string; kibanaAssets: Record; }): Promise { - const { kibanaAssets, savedObjectsImporter, logger } = options; + const { kibanaAssets, savedObjectsClient, savedObjectsImporter, logger } = options; + const assetsToInstall = Object.entries(kibanaAssets).flatMap(([assetType, assets]) => { if (!validKibanaAssetTypes.has(assetType as KibanaAssetType)) { return []; @@ -152,6 +158,8 @@ export async function installKibanaAssets(options: { managed: true, }); + await makeManagedIndexPatternsGlobal(savedObjectsClient); + const installedAssets = await installKibanaSavedObjects({ logger, savedObjectsImporter, @@ -196,6 +204,7 @@ export async function installKibanaAssetsAndReferences({ ); const importedAssets = await installKibanaAssets({ + savedObjectsClient, logger, savedObjectsImporter, pkgName, diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.test.ts b/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.test.ts new file mode 100644 index 0000000000000..9e826d7f126ae --- /dev/null +++ b/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.test.ts @@ -0,0 +1,54 @@ +/* + * Copyright 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 { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; + +import { createAppContextStartContractMock } from '../../../../mocks'; + +import { appContextService } from '../../../app_context'; + +import { makeManagedIndexPatternsGlobal } from './install'; + +describe('Fleet index patterns', () => { + let mockSoClient: jest.Mocked; + let mockContract: ReturnType; + + beforeEach(() => { + mockSoClient = savedObjectsClientMock.create(); + mockContract = createAppContextStartContractMock(); + appContextService.start(mockContract); + }); + + afterEach(() => { + appContextService.stop(); + }); + + describe('makeManagedIndexPatternsGlobal', () => { + it('should call updateObjectsSpaces with the correct params', async () => { + const result = await makeManagedIndexPatternsGlobal(mockSoClient); + + for (const pattern of ['logs-*', 'metrics-*']) { + expect(mockSoClient.updateObjectsSpaces).toHaveBeenCalledWith( + [{ id: pattern, type: 'index-pattern' }], + ['*'], + [] + ); + } + + expect(result).toHaveLength(2); + }); + + it('handles errors from updateObjectsSpaces', async () => { + mockSoClient.updateObjectsSpaces.mockRejectedValue(new Error('foo')); + + const result = await makeManagedIndexPatternsGlobal(mockSoClient); + + expect(result).toHaveLength(0); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.ts b/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.ts index 91e603e80aee2..6f1390f5e17cd 100644 --- a/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/kibana/index_pattern/install.ts @@ -28,6 +28,30 @@ export function getIndexPatternSavedObjects() { })); } +export async function makeManagedIndexPatternsGlobal( + savedObjectsClient: SavedObjectsClientContract +) { + const logger = appContextService.getLogger(); + + const results = []; + + for (const indexPatternType of indexPatternTypes) { + try { + const result = await savedObjectsClient.updateObjectsSpaces( + [{ id: `${indexPatternType}-*`, type: INDEX_PATTERN_SAVED_OBJECT_TYPE }], + ['*'], + [] + ); + + results.push(result); + } catch (error) { + logger.error(`Error making managed index patterns global: ${error.message}`); + } + } + + return results; +} + export async function removeUnusedIndexPatterns(savedObjectsClient: SavedObjectsClientContract) { const logger = appContextService.getLogger(); // get all user installed packages diff --git a/x-pack/test/fleet_api_integration/apis/epm/data_views.ts b/x-pack/test/fleet_api_integration/apis/epm/data_views.ts index 1fc5e660dbc57..5a0753fb321b4 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/data_views.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/data_views.ts @@ -51,6 +51,24 @@ export default function (providerContext: FtrProviderContext) { await Promise.all(testPkgs.map((pkg) => uninstallPackage(pkg.name, pkg.version))); }); + describe('with single integration installation', async () => { + it('creates global data views for logs-* and metrics-*', async () => { + await installPackage(testPkgs[0].name, testPkgs[0].version); + const dataViews: any[] = await listDataViews(); + + expect(dataViews).to.have.length(2); + const logsDataView = dataViews.find(({ title }) => title === 'logs-*'); + const metricsDataView = dataViews.find(({ title }) => title === 'metrics-*'); + + expect(logsDataView).to.be.ok(); + expect(metricsDataView).to.be.ok(); + + // Each data view should be available in all spaces + expect(logsDataView.namespaces).to.contain('*'); + expect(metricsDataView.namespaces).to.contain('*'); + }); + }); + describe('with subsequent integration installation', async () => { it('does not recreate managed data views', async () => { await installPackage(testPkgs[0].name, testPkgs[0].version); From 45242fe92a83a4a69a9a5cf491814f8384c4d327 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 12 Dec 2023 15:41:38 +0100 Subject: [PATCH 37/39] [Fleet] Expose install package (#173148) --- .../services/epm/package_service.mock.ts | 1 + .../server/services/epm/package_service.ts | 57 ++++++++++++++++--- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/epm/package_service.mock.ts b/x-pack/plugins/fleet/server/services/epm/package_service.mock.ts index 4007ad7545ece..3eb689dfa1a2a 100644 --- a/x-pack/plugins/fleet/server/services/epm/package_service.mock.ts +++ b/x-pack/plugins/fleet/server/services/epm/package_service.mock.ts @@ -10,6 +10,7 @@ import type { PackageClient, PackageService } from './package_service'; const createClientMock = (): jest.Mocked => ({ getInstallation: jest.fn(), ensureInstalledPackage: jest.fn(), + installPackage: jest.fn(), fetchFindLatestPackage: jest.fn(), readBundledPackage: jest.fn(), getPackage: jest.fn(), diff --git a/x-pack/plugins/fleet/server/services/epm/package_service.ts b/x-pack/plugins/fleet/server/services/epm/package_service.ts index eee1afb37dcaa..a535af9636d1a 100644 --- a/x-pack/plugins/fleet/server/services/epm/package_service.ts +++ b/x-pack/plugins/fleet/server/services/epm/package_service.ts @@ -8,34 +8,40 @@ /* eslint-disable max-classes-per-file */ import type { - KibanaRequest, ElasticsearchClient, - SavedObjectsClientContract, + KibanaRequest, Logger, + SavedObjectsClientContract, } from '@kbn/core/server'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; + import { HTTPAuthorizationHeader } from '../../../common/http_authorization_header'; import type { PackageList } from '../../../common'; import type { + ArchivePackage, + BundledPackage, CategoryId, EsAssetReference, InstallablePackage, Installation, RegistryPackage, - ArchivePackage, - BundledPackage, } from '../../types'; import type { FleetAuthzRouteConfig } from '../security/types'; -import { checkSuperuser, getAuthzFromRequest, doesNotHaveRequiredFleetAuthz } from '../security'; -import { FleetUnauthorizedError, FleetError } from '../../errors'; +import { checkSuperuser, doesNotHaveRequiredFleetAuthz, getAuthzFromRequest } from '../security'; +import { FleetError, FleetUnauthorizedError } from '../../errors'; import { INSTALL_PACKAGES_AUTHZ, READ_PACKAGE_INFO_AUTHZ } from '../../routes/epm'; -import { installTransforms, isTransform } from './elasticsearch/transform/install'; +import type { InstallResult } from '../../../common'; + import type { FetchFindLatestPackageOptions } from './registry'; +import * as Registry from './registry'; import { fetchFindLatestPackageOrThrow, getPackage } from './registry'; -import { ensureInstalledPackage, getInstallation, getPackages } from './packages'; + +import { installTransforms, isTransform } from './elasticsearch/transform/install'; +import { ensureInstalledPackage, getInstallation, getPackages, installPackage } from './packages'; import { generatePackageInfoFromArchiveBuffer } from './archive'; export type InstalledAssetType = EsAssetReference; @@ -52,8 +58,16 @@ export interface PackageClient { pkgName: string; pkgVersion?: string; spaceId?: string; + force?: boolean; }): Promise; + installPackage(options: { + pkgName: string; + pkgVersion?: string; + spaceId?: string; + force?: boolean; + }): Promise; + fetchFindLatestPackage( packageName: string, options?: FetchFindLatestPackageOptions @@ -151,6 +165,7 @@ class PackageClientImpl implements PackageClient { pkgName: string; pkgVersion?: string; spaceId?: string; + force?: boolean; }): Promise { await this.#runPreflight(INSTALL_PACKAGES_AUTHZ); @@ -160,6 +175,32 @@ class PackageClientImpl implements PackageClient { savedObjectsClient: this.internalSoClient, }); } + public async installPackage(options: { + pkgName: string; + pkgVersion?: string; + spaceId?: string; + force?: boolean; + }): Promise { + await this.#runPreflight(INSTALL_PACKAGES_AUTHZ); + + const { pkgName, pkgVersion, spaceId = DEFAULT_SPACE_ID, force = false } = options; + + // If pkgVersion isn't specified, find the latest package version + const pkgKeyProps = pkgVersion + ? { name: pkgName, version: pkgVersion } + : await Registry.fetchFindLatestPackageOrThrow(pkgName, { prerelease: true }); + const pkgkey = Registry.pkgToPkgKey(pkgKeyProps); + + return await installPackage({ + force, + pkgkey, + spaceId, + installSource: 'registry', + esClient: this.internalEsClient, + savedObjectsClient: this.internalSoClient, + neverIgnoreVerificationError: !force, + }); + } public async fetchFindLatestPackage( packageName: string, From 05bfe53cb3a2fe33ecb9eec4a6fcb19a492aaadf Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:56:24 +0200 Subject: [PATCH 38/39] [Cloud Security] Azure org as default value (#173047) --- .../public/components/fleet_extensions/policy_template_form.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 89ec1007f7d53..17474fd9cd233 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -442,7 +442,7 @@ const AzureAccountTypeSelect = ({ updatePolicy( getPosturePolicy(newPolicy, input.type, { 'azure.account_type': { - value: AZURE_SINGLE_ACCOUNT, + value: isAzureOrganizationDisabled ? AZURE_SINGLE_ACCOUNT : AZURE_ORGANIZATION_ACCOUNT, type: 'text', }, 'azure.credentials.type': { From 6443b571642c453a9232a04297fddfb0a918c0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:09:21 +0000 Subject: [PATCH 39/39] [ProfilingxAPM] Passing selected time range to links (#173160) I forgot to pass the selected time range to the Profiling links in the APM UI. Fixing it here. --- .../components/app/profiling_overview/index.tsx | 15 ++++++++++++++- .../profiling_overview/profiling_flamegraph.tsx | 6 ++++++ .../profiling_top_functions.tsx | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/apm/public/components/app/profiling_overview/index.tsx b/x-pack/plugins/apm/public/components/app/profiling_overview/index.tsx index 3e460448ad422..9e8a0e2baf46e 100644 --- a/x-pack/plugins/apm/public/components/app/profiling_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/profiling_overview/index.tsx @@ -78,6 +78,8 @@ export function ProfilingOverview() { environment={environment} dataSource={preferred?.source} kuery={kuery} + rangeFrom={rangeFrom} + rangeTo={rangeTo} /> ), @@ -99,12 +101,23 @@ export function ProfilingOverview() { endIndex={10} dataSource={preferred?.source} kuery={kuery} + rangeFrom={rangeFrom} + rangeTo={rangeTo} /> ), }, ]; - }, [end, environment, kuery, preferred?.source, serviceName, start]); + }, [ + end, + environment, + kuery, + preferred?.source, + rangeFrom, + rangeTo, + serviceName, + start, + ]); if (isLoading) { return ( diff --git a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx index 8dcda14783a8f..bbae54abdf708 100644 --- a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx +++ b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx @@ -40,6 +40,8 @@ interface Props { ApmDocumentType.TransactionMetric | ApmDocumentType.TransactionEvent >; kuery: string; + rangeFrom: string; + rangeTo: string; } export function ProfilingFlamegraph({ @@ -49,6 +51,8 @@ export function ProfilingFlamegraph({ environment, dataSource, kuery, + rangeFrom, + rangeTo, }: Props) { const { profilingLocators } = useProfilingPlugin(); @@ -93,6 +97,8 @@ export function ProfilingFlamegraph({ data-test-subj="apmProfilingFlamegraphGoToFlamegraphLink" href={profilingLocators?.flamegraphLocator.getRedirectUrl({ kuery: mergeKueries([`(${hostNamesKueryFormat})`, kuery]), + rangeFrom, + rangeTo, })} > {i18n.translate('xpack.apm.profiling.flamegraph.link', { diff --git a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_top_functions.tsx b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_top_functions.tsx index 7b428802fbfc1..0462af188d3f9 100644 --- a/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_top_functions.tsx +++ b/x-pack/plugins/apm/public/components/app/profiling_overview/profiling_top_functions.tsx @@ -31,6 +31,8 @@ interface Props { ApmDocumentType.TransactionMetric | ApmDocumentType.TransactionEvent >; kuery: string; + rangeFrom: string; + rangeTo: string; } export function ProfilingTopNFunctions({ @@ -42,6 +44,8 @@ export function ProfilingTopNFunctions({ endIndex, dataSource, kuery, + rangeFrom, + rangeTo, }: Props) { const { profilingLocators } = useProfilingPlugin(); @@ -97,6 +101,8 @@ export function ProfilingTopNFunctions({ data-test-subj="apmProfilingTopNFunctionsGoToUniversalProfilingFlamegraphLink" href={profilingLocators?.topNFunctionsLocator.getRedirectUrl({ kuery: mergeKueries([`(${hostNamesKueryFormat})`, kuery]), + rangeFrom, + rangeTo, })} > {i18n.translate('xpack.apm.profiling.topnFunctions.link', {