From dfeea506d54e49a264706bb24a671f5507458c7b Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 3 Oct 2023 14:19:21 +0300 Subject: [PATCH 001/170] [Cases] Make Cases in the Stack Management GA (#167808) --- x-pack/plugins/cases/public/components/app/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/app/index.tsx b/x-pack/plugins/cases/public/components/app/index.tsx index f53e7edf9356a..c5e4c87417a1b 100644 --- a/x-pack/plugins/cases/public/components/app/index.tsx +++ b/x-pack/plugins/cases/public/components/app/index.tsx @@ -44,7 +44,6 @@ const CasesAppComponent: React.FC = ({ permissions: userCapabilities.generalCases, basePath: '/', features: { alerts: { enabled: false } }, - releasePhase: 'experimental', })} ); From b02f64bab9fb8acef6e6fefcd665846b8c17426a Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:23:14 +0300 Subject: [PATCH 002/170] [Cloud Security] Azure manual option - temporary solution (#167857) --- .../azure_credentials_form.tsx | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/azure_credentials_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/azure_credentials_form.tsx index 51ef9c7bcb955..710ccdc124fea 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/azure_credentials_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/azure_credentials_form.tsx @@ -68,11 +68,6 @@ const getSetupFormatOptions = (): CspRadioOption[] => [ label: i18n.translate('xpack.csp.azureIntegration.setupFormatOptions.manual', { defaultMessage: 'Manual', }), - disabled: true, - tooltip: i18n.translate( - 'xpack.csp.azureIntegration.setupFormatOptions.manual.disabledTooltip', - { defaultMessage: 'Coming Soon' } - ), }, ]; @@ -108,7 +103,7 @@ const ArmTemplateSetup = ({ return ( <> - +
    { + return ( + <> + + + + + ), + }} + /> + + + + + {i18n.translate('xpack.csp.azureIntegration.documentationLinkText', { + defaultMessage: 'documentation', + })} + + ), + }} + /> + + + ); +}; + const AZURE_MINIMUM_PACKAGE_VERSION = '1.6.0'; export const AzureCredentialsForm = ({ @@ -232,6 +271,9 @@ export const AzureCredentialsForm = ({ {setupFormat === AZURE_ARM_TEMPLATE_CREDENTIAL_TYPE && ( )} + {setupFormat === AZURE_MANUAL_CREDENTIAL_TYPE && ( + + )} ); From 8bf1ad5ef65354d9bf53a26a72817ca40a8e6ab2 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Tue, 3 Oct 2023 13:45:30 +0200 Subject: [PATCH 003/170] [APM] Add best practices for API testing (#167507) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Søren Louv-Jansen --- x-pack/plugins/apm/dev_docs/testing.md | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/x-pack/plugins/apm/dev_docs/testing.md b/x-pack/plugins/apm/dev_docs/testing.md index 362ae0027d6d4..7ce4ed34b9e61 100644 --- a/x-pack/plugins/apm/dev_docs/testing.md +++ b/x-pack/plugins/apm/dev_docs/testing.md @@ -1,5 +1,15 @@ # Testing +We've got three ways of testing our code: + +- Unit testing with Jest +- API testing +- End-to-end testing (with Cypress) + +API tests are usually preferred. They're stable and reasonably quick, and give a good approximation of real-world usage. +E2E testing is suitable for common and vital user journeys. They are however less stable than API tests. +Unit testing is a good approach if you have a very specific piece of code with lots of possibilities that you want to test. + ## Unit Tests (Jest) ``` @@ -126,11 +136,13 @@ diff --git a/x-pack/plugins/apm/scripts/test/README.md b/x-pack/plugins/apm/scri ## Serverless API tests #### Start server and run tests (single process) + ``` node scripts/functional_tests.js --config x-pack/test_serverless/api_integration/test_suites/observability/config.ts ``` #### Start server and run tests (separate processes) + ```sh # Start server node scripts/functional_tests_server.js --config x-pack/test_serverless/api_integration/test_suites/observability/config.ts @@ -154,3 +166,31 @@ All files with a .stories.tsx extension will be loaded. You can access the devel For end-to-end (e.g. agent -> apm server -> elasticsearch <- kibana) development and testing of Elastic APM please check the the [APM Integration Testing repository](https://github.com/elastic/apm-integration-testing). Data can also be generated using the [kbn-apm-synthtrace](../../../../packages/kbn-apm-synthtrace/README.md) CLI. + +## Best practices for API tests + +### 1. File structure: + +- **Endpoint-specific testing**: Each API endpoint should ideally be tested in an individual `*.spec.ts` file. This makes it easy to find tests, and works well with our general approach of having single-purpose API endpoints. +- **Directory structure**: Organize these files into feature-specific folders to make navigation easier. Each feature-specific folder can have multiple `*.spec.ts` files related to that particular feature. + +### 2. Data: + +- **Prefer Synthtrace**: Use Synthtrace for all new tests. It offers better control over data being fed into Elasticsearch, making it easier to verify calculated statistics than using Elasticsearch archives. +- **Migrating existing tests**: Aim to migrate existing tests that are based on Elasticsearch archives to Synthtrace. If for some reason Synthtrace isn't suitable, it's preferable to manually index documents rather than using ES archives. +- **Scenario management**: + - Prefer to keep the Synthtrace scenario in the same file. This makes it easier to see what's going on. + - If you do end up moving the Synthtrace scenario to another file because it gets too long, make sure the inputs are passed as parameters to a function. This keeps the information information in the test file and prevents the reader from navigating back and forth. + - Avoid re-using the same Synthtrace scenario across multiple files (in the same file it's mostly fine, but a test-specific Synthtrace scenario doesn't hurt). Re-using it will result in less specific scenarios, making it harder to write specific tests. The single scenario will grow unwieldy. It's akin to using ES archives. +- **ML**: For tests that require ML data, use the `createAndRunApmMlJob` helper function. This starts an ML job and returns only when it has completed, including any anomalies that are generated. +- **Alerting**: For tests that require alerting data, use the `createApmRule` and `waitForRuleStatus` helpers. `createApmRule` sets some defaults when creating a rule, and `waitForRuleStatus` only return when a certain status is matching your expectations. This allows you to e.g. wait until an alert fires or recovers after exceeding a threshold + +### 3. Scope of tests: + +- **Different configurations**: Tests can run for different configurations. This allows us to keep e.g. a test whether an endpoint correctly throws with a failed license check in the same file as one that tests the return values from the endpoint if a license check doesn't fail. +- **Specificity**: Make checks as detailed as possible. Avoid broad "has data" checks, especially when return values can be controlled by Synthtrace. Avoid using snapshot testing. +- **Error handling**: For API endpoints that might return specific error codes or messages, ensure there are tests covering those specific scenarios. + +### 4. Security and access control: + +- **User privileges**: For calling APIs use `apm.readUser` whenever possible. If the endpoint requires write privileges, use `apm.writeUser` or any of the other predefined roles, whichever apply. Don't use roles with higher access levels unless required. From 83b9302534c6200c63ab1be408ec1f59c6876027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 3 Oct 2023 14:20:30 +0200 Subject: [PATCH 004/170] [Serverless Tests] Use public headers for the public telemetry config endpoint (#167860) --- .../test_suites/search/telemetry/telemetry_config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts index 381c2aa0f5cae..8df4bae9df5a0 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts @@ -25,7 +25,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) it('GET should get the default config', async () => { await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, baseConfig); }); @@ -39,7 +39,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, { ...baseConfig, labels: { From 8d9e12a19bf02e2fb2ed2fda48a2b6fbcfa89be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?= Date: Tue, 3 Oct 2023 14:33:13 +0200 Subject: [PATCH 005/170] [Enterprise Search] Update connector tiles (#167656) ## Summary - Update Integration Tiles - Update Select Connector Tiles - GitHub, OneDrive, Google Drive to native connectors Screenshot 2023-09-29 at 16 38 08 Screenshot 2023-09-29 at 16 38 13 Screenshot 2023-09-29 at 16 38 25 Screenshot 2023-09-29 at 16 38 44 Screenshot 2023-09-29 at 16 38 51 ### 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) - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-doc-links/src/get_doc_links.ts | 4 + packages/kbn-doc-links/src/types.ts | 4 + packages/kbn-search-connectors/connectors.ts | 50 ++- .../types/native_connectors.ts | 425 ++++++++++++++++++ .../apis/custom_integration/integrations.ts | 2 +- .../search_index/connector/constants.ts | 28 ++ .../shared/doc_links/doc_links.ts | 12 + .../shared/icons/connector_icons.ts | 8 + .../public/assets/source_icons/outlook.svg | 39 ++ .../public/assets/source_icons/teams.svg | 28 ++ .../public/assets/source_icons/zoom.svg | 16 + .../enterprise_search/server/integrations.ts | 180 +++++--- .../translations/translations/fr-FR.json | 4 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - 15 files changed, 737 insertions(+), 71 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/assets/source_icons/outlook.svg create mode 100644 x-pack/plugins/enterprise_search/public/assets/source_icons/teams.svg create mode 100644 x-pack/plugins/enterprise_search/public/assets/source_icons/zoom.svg diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index ca81f5554ded8..eb0863811ae8c 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -141,6 +141,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { configuration: `${ENTERPRISE_SEARCH_DOCS}configuration.html`, connectors: `${ENTERPRISE_SEARCH_DOCS}connectors.html`, connectorsAzureBlobStorage: `${ENTERPRISE_SEARCH_DOCS}connectors-azure-blob.html`, + connectorsBox: `${ENTERPRISE_SEARCH_DOCS}connectors-box.html`, connectorsClients: `${ENTERPRISE_SEARCH_DOCS}connectors.html#connectors-build`, connectorsConfluence: `${ENTERPRISE_SEARCH_DOCS}connectors-confluence.html`, connectorsDropbox: `${ENTERPRISE_SEARCH_DOCS}connectors-dropbox.html`, @@ -157,6 +158,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { connectorsNetworkDrive: `${ENTERPRISE_SEARCH_DOCS}connectors-network-drive.html`, connectorsOneDrive: `${ENTERPRISE_SEARCH_DOCS}connectors-onedrive.html`, connectorsOracle: `${ENTERPRISE_SEARCH_DOCS}connectors-oracle.html`, + connectorsOutlook: `${ENTERPRISE_SEARCH_DOCS}connectors-outlook.html`, connectorsPostgreSQL: `${ENTERPRISE_SEARCH_DOCS}connectors-postgresql.html`, connectorsS3: `${ENTERPRISE_SEARCH_DOCS}connectors-s3.html`, connectorsSalesforce: `${ENTERPRISE_SEARCH_DOCS}connectors-salesforce.html`, @@ -164,7 +166,9 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { connectorsSharepoint: `${ENTERPRISE_SEARCH_DOCS}connectors-sharepoint.html`, connectorsSharepointOnline: `${ENTERPRISE_SEARCH_DOCS}connectors-sharepoint-online.html`, connectorsSlack: `${ENTERPRISE_SEARCH_DOCS}connectors-slack.html`, + connectorsTeams: `${ENTERPRISE_SEARCH_DOCS}connectors-teams.html`, connectorsWorkplaceSearch: `${ENTERPRISE_SEARCH_DOCS}workplace-search-connectors.html`, + connectorsZoom: `${ENTERPRISE_SEARCH_DOCS}connectors-zoom.html`, crawlerExtractionRules: `${ENTERPRISE_SEARCH_DOCS}crawler-extraction-rules.html`, crawlerManaging: `${ENTERPRISE_SEARCH_DOCS}crawler-managing.html`, crawlerOverview: `${ENTERPRISE_SEARCH_DOCS}crawler.html`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 39209b0675e9b..8b1a8866b47d4 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -122,6 +122,7 @@ export interface DocLinks { readonly configuration: string; readonly connectors: string; readonly connectorsAzureBlobStorage: string; + readonly connectorsBox: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; @@ -138,14 +139,17 @@ export interface DocLinks { readonly connectorsNetworkDrive: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; + readonly connectorsOutlook: string; readonly connectorsPostgreSQL: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; + readonly connectorsTeams: string; readonly connectorsSlack: string; readonly connectorsWorkplaceSearch: string; + readonly connectorsZoom: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; diff --git a/packages/kbn-search-connectors/connectors.ts b/packages/kbn-search-connectors/connectors.ts index 119de69a0c5c0..9673af86e14d9 100644 --- a/packages/kbn-search-connectors/connectors.ts +++ b/packages/kbn-search-connectors/connectors.ts @@ -67,7 +67,7 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ { iconPath: 'github.svg', isBeta: true, - isNative: false, + isNative: true, keywords: ['github', 'cloud', 'connector'], name: i18n.translate('searchConnectors.content.nativeConnectors.github.name', { defaultMessage: 'GitHub & GitHub Enterprise Server', @@ -87,7 +87,7 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ { iconPath: 'google_drive.svg', isBeta: true, - isNative: false, + isNative: true, keywords: ['google', 'drive', 'connector'], name: i18n.translate('searchConnectors.content.nativeConnectors.googleDrive.name', { defaultMessage: 'Google Drive', @@ -201,7 +201,7 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ { iconPath: 'onedrive.svg', isBeta: true, - isNative: false, + isNative: true, keywords: ['network', 'drive', 'file', 'connector'], name: i18n.translate('searchConnectors.content.nativeConnectors.oneDrive.name', { defaultMessage: 'OneDrive', @@ -240,6 +240,50 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ }), serviceType: 'sharepoint_server', }, + { + iconPath: 'box.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['cloud', 'box'], + name: i18n.translate('searchConnectors.content.nativeConnectors.box.name', { + defaultMessage: 'Box', + }), + serviceType: 'box', + }, + { + iconPath: 'outlook.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['outlook', 'connector'], + name: i18n.translate('searchConnectors.content.nativeConnectors.outlook.name', { + defaultMessage: 'Outlook', + }), + serviceType: 'outlook', + }, + { + iconPath: 'teams.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['teams', 'connector'], + name: i18n.translate('searchConnectors.content.nativeConnectors.teams.name', { + defaultMessage: 'Teams', + }), + serviceType: 'teams', + }, + { + iconPath: 'zoom.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['zoom', 'connector'], + name: i18n.translate('searchConnectors.content.nativeConnectors.zoom.name', { + defaultMessage: 'Zoom', + }), + serviceType: 'zoom', + }, { iconPath: 'custom.svg', isBeta: true, diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index 1c4b0bb7e1694..a69036fc7c0e8 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -66,6 +66,21 @@ const USE_TEXT_EXTRACTION_SERVICE_TOOLTIP = i18n.translate( } ); +const ENABLE_DOCUMENT_LEVEL_SECURITY_LABEL = i18n.translate( + 'searchConnectors.nativeConnectors.enableDLS.label', + { + defaultMessage: 'Enable document level security', + } +); + +const ENABLE_DOCUMENT_LEVEL_SECURITY_TOOLTIP = i18n.translate( + 'searchConnectors.nativeConnectors.enableDLS.tooltip', + { + defaultMessage: + 'Document level security ensures identities and permissions set in Google Drive are maintained in Elasticsearch. This enables you to restrict and personalize read-access users and groups have to documents in this index. Access control syncs ensure this metadata is kept up to date in your Elasticsearch documents.', + } +); + const DATABASE_LABEL = i18n.translate('searchConnectors.nativeConnectors.databaseLabel', { defaultMessage: 'Database', }); @@ -576,6 +591,291 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record c.id === 'sample_data_all')).to.be.above( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts index 16ec910581086..d2797ea0b2abd 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts @@ -22,6 +22,13 @@ export const CONNECTORS_DICT: Record = { externalDocsUrl: 'https://learn.microsoft.com/azure/storage/blobs/', icon: CONNECTOR_ICONS.azure_blob_storage, }, + box: { + docsUrl: docLinks.connectorsBox, + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.box, + platinumOnly: true, + }, confluence: { docsUrl: docLinks.connectorsConfluence, externalAuthDocsUrl: '', @@ -114,6 +121,13 @@ export const CONNECTORS_DICT: Record = { externalDocsUrl: 'https://docs.oracle.com/database/oracle/oracle-database/', icon: CONNECTOR_ICONS.oracle, }, + outlook: { + docsUrl: docLinks.connectorsOutlook, + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.outlook, + platinumOnly: true, + }, postgresql: { docsUrl: docLinks.connectorsPostgreSQL, externalAuthDocsUrl: 'https://www.postgresql.org/docs/15/auth-methods.html', @@ -160,6 +174,20 @@ export const CONNECTORS_DICT: Record = { icon: CONNECTOR_ICONS.slack, platinumOnly: true, }, + teams: { + docsUrl: docLinks.connectorsTeams, + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.teams, + platinumOnly: true, + }, + zoom: { + docsUrl: docLinks.connectorsZoom, + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.zoom, + platinumOnly: true, + }, }; export const CONNECTORS = CONNECTOR_DEFINITIONS.map((connector) => ({ diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts index 11e93c7af3a29..f84be1ad660b3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts @@ -65,6 +65,7 @@ class DocLinks { public cloudIndexManagement: string; public connectors: string; public connectorsAzureBlobStorage: string; + public connectorsBox: string; public connectorsClients: string; public connectorsConfluence: string; public connectorsContentExtraction: string; @@ -81,6 +82,7 @@ class DocLinks { public connectorsNetworkDrive: string; public connectorsOneDrive: string; public connectorsOracle: string; + public connectorsOutlook: string; public connectorsPostgreSQL: string; public connectorsS3: string; public connectorsSalesforce: string; @@ -88,6 +90,8 @@ class DocLinks { public connectorsSharepoint: string; public connectorsSharepointOnline: string; public connectorsSlack: string; + public connectorsTeams: string; + public connectorsZoom: string; public connectorsWorkplaceSearch: string; public consoleGuide: string; public crawlerExtractionRules: string; @@ -229,6 +233,7 @@ class DocLinks { this.cloudIndexManagement = ''; this.connectors = ''; this.connectorsAzureBlobStorage = ''; + this.connectorsBox = ''; this.connectorsConfluence = ''; this.connectorsContentExtraction = ''; this.connectorsClients = ''; @@ -245,6 +250,7 @@ class DocLinks { this.connectorsNetworkDrive = ''; this.connectorsOneDrive = ''; this.connectorsOracle = ''; + this.connectorsOutlook = ''; this.connectorsPostgreSQL = ''; this.connectorsS3 = ''; this.connectorsSalesforce = ''; @@ -252,6 +258,8 @@ class DocLinks { this.connectorsSharepoint = ''; this.connectorsSharepointOnline = ''; this.connectorsSlack = ''; + this.connectorsTeams = ''; + this.connectorsZoom = ''; this.connectorsWorkplaceSearch = ''; this.consoleGuide = ''; this.crawlerExtractionRules = ''; @@ -394,6 +402,7 @@ class DocLinks { this.cloudIndexManagement = docLinks.links.cloud.indexManagement; this.connectors = docLinks.links.enterpriseSearch.connectors; this.connectorsAzureBlobStorage = docLinks.links.enterpriseSearch.connectorsAzureBlobStorage; + this.connectorsBox = docLinks.links.enterpriseSearch.connectorsBox; this.connectorsConfluence = docLinks.links.enterpriseSearch.connectorsConfluence; this.connectorsContentExtraction = docLinks.links.enterpriseSearch.connectorsContentExtraction; this.connectorsClients = docLinks.links.enterpriseSearch.connectorsClients; @@ -410,6 +419,7 @@ class DocLinks { this.connectorsNative = docLinks.links.enterpriseSearch.connectorsNative; this.connectorsNetworkDrive = docLinks.links.enterpriseSearch.connectorsNetworkDrive; this.connectorsOracle = docLinks.links.enterpriseSearch.connectorsOracle; + this.connectorsOutlook = docLinks.links.enterpriseSearch.connectorsOutlook; this.connectorsPostgreSQL = docLinks.links.enterpriseSearch.connectorsPostgreSQL; this.connectorsS3 = docLinks.links.enterpriseSearch.connectorsS3; this.connectorsSalesforce = docLinks.links.enterpriseSearch.connectorsSalesforce; @@ -417,6 +427,8 @@ class DocLinks { this.connectorsSharepoint = docLinks.links.enterpriseSearch.connectorsSharepoint; this.connectorsSharepointOnline = docLinks.links.enterpriseSearch.connectorsSharepointOnline; this.connectorsSlack = docLinks.links.enterpriseSearch.connectorsSlack; + this.connectorsTeams = docLinks.links.enterpriseSearch.connectorsTeams; + this.connectorsZoom = docLinks.links.enterpriseSearch.connectorsZoom; this.connectorsWorkplaceSearch = docLinks.links.enterpriseSearch.connectorsWorkplaceSearch; this.consoleGuide = docLinks.links.console.guide; this.crawlerExtractionRules = docLinks.links.enterpriseSearch.crawlerExtractionRules; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts b/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts index ab3dc7a6cfb37..357d5e7ce96ca 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts @@ -6,6 +6,7 @@ */ import azure_blob_storage from '../../../assets/source_icons/azure_blob_storage.svg'; +import box from '../../../assets/source_icons/box.svg'; import confluence_cloud from '../../../assets/source_icons/confluence_cloud.svg'; import custom from '../../../assets/source_icons/custom.svg'; import dropbox from '../../../assets/source_icons/dropbox.svg'; @@ -20,6 +21,7 @@ import mysql from '../../../assets/source_icons/mysql.svg'; import network_drive from '../../../assets/source_icons/network_drive.svg'; import onedrive from '../../../assets/source_icons/onedrive.svg'; import oracle from '../../../assets/source_icons/oracle.svg'; +import outlook from '../../../assets/source_icons/outlook.svg'; import postgresql from '../../../assets/source_icons/postgresql.svg'; import amazon_s3 from '../../../assets/source_icons/s3.svg'; import salesforce from '../../../assets/source_icons/salesforce.svg'; @@ -27,10 +29,13 @@ import servicenow from '../../../assets/source_icons/servicenow.svg'; import sharepoint from '../../../assets/source_icons/sharepoint.svg'; import sharepoint_online from '../../../assets/source_icons/sharepoint_online.svg'; import slack from '../../../assets/source_icons/slack.svg'; +import teams from '../../../assets/source_icons/teams.svg'; +import zoom from '../../../assets/source_icons/zoom.svg'; export const CONNECTOR_ICONS = { amazon_s3, azure_blob_storage, + box, confluence_cloud, custom, dropbox, @@ -45,10 +50,13 @@ export const CONNECTOR_ICONS = { network_drive, onedrive, oracle, + outlook, postgresql, salesforce, servicenow, sharepoint, sharepoint_online, slack, + teams, + zoom, }; diff --git a/x-pack/plugins/enterprise_search/public/assets/source_icons/outlook.svg b/x-pack/plugins/enterprise_search/public/assets/source_icons/outlook.svg new file mode 100644 index 0000000000000..74d4c44a4a820 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/assets/source_icons/outlook.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/enterprise_search/public/assets/source_icons/teams.svg b/x-pack/plugins/enterprise_search/public/assets/source_icons/teams.svg new file mode 100644 index 0000000000000..e70e1b297d836 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/assets/source_icons/teams.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/enterprise_search/public/assets/source_icons/zoom.svg b/x-pack/plugins/enterprise_search/public/assets/source_icons/zoom.svg new file mode 100644 index 0000000000000..910a0807eec8b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/assets/source_icons/zoom.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/enterprise_search/server/integrations.ts b/x-pack/plugins/enterprise_search/server/integrations.ts index cedbd4215a656..22aa5a8e82375 100644 --- a/x-pack/plugins/enterprise_search/server/integrations.ts +++ b/x-pack/plugins/enterprise_search/server/integrations.ts @@ -6,49 +6,11 @@ */ import type { HttpServiceSetup } from '@kbn/core/server'; -import type { IntegrationCategory } from '@kbn/custom-integrations-plugin/common'; import type { CustomIntegrationsPluginSetup } from '@kbn/custom-integrations-plugin/server'; import { i18n } from '@kbn/i18n'; import { ConfigType } from '.'; -interface WorkplaceSearchIntegration { - id: string; - title: string; - description: string; - categories: IntegrationCategory[]; - uiInternalPath?: string; -} - -const workplaceSearchIntegrations: WorkplaceSearchIntegration[] = [ - { - id: 'box', - title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.boxName', { - defaultMessage: 'Box', - }), - description: i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription', - { - defaultMessage: 'Search over your files and folders stored on Box with Workplace Search.', - } - ), - categories: ['enterprise_search', 'workplace_search_content_source'], - }, - { - id: 'zendesk', - title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName', { - defaultMessage: 'Zendesk', - }), - description: i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription', - { - defaultMessage: 'Search over your tickets on Zendesk with Workplace Search.', - } - ), - categories: ['enterprise_search', 'workplace_search_content_source'], - }, -]; - export const registerEnterpriseSearchIntegrations = ( config: ConfigType, http: HttpServiceSetup, @@ -57,23 +19,6 @@ export const registerEnterpriseSearchIntegrations = ( ) => { const nativeSearchTag = config.hasNativeConnectors && isCloud ? ['native_search'] : []; if (config.canDeployEntSearch) { - workplaceSearchIntegrations.forEach((integration) => { - customIntegrations.registerCustomIntegration({ - uiInternalPath: `/app/enterprise_search/workplace_search/sources/add/${integration.id}`, - icons: [ - { - type: 'svg', - src: http.basePath.prepend( - `/plugins/enterpriseSearch/assets/source_icons/${integration.id}.svg` - ), - }, - ], - isBeta: false, - shipper: 'enterprise_search', - ...integration, - }); - }); - customIntegrations.registerCustomIntegration({ id: 'app_search_json', title: i18n.translate('xpack.enterpriseSearch.appSearch.integrations.jsonName', { @@ -939,5 +884,130 @@ export const registerEnterpriseSearchIntegrations = ( shipper: 'enterprise_search', isBeta: false, }); + + customIntegrations.registerCustomIntegration({ + id: 'outlook', + title: i18n.translate('xpack.enterpriseSearch.integrations.connectors.outlookTitle', { + defaultMessage: 'Outlook', + }), + description: i18n.translate( + 'xpack.enterpriseSearch.integrations.connectors.outlookDescription', + { + defaultMessage: 'Search over your content on Outlook.', + } + ), + categories: [ + 'enterprise_search', + 'elastic_stack', + 'custom', + 'connector', + 'connector_client', + 'outlook', + ...nativeSearchTag, + ], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=outlook', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/outlook.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); + + customIntegrations.registerCustomIntegration({ + id: 'zoom', + title: i18n.translate('xpack.enterpriseSearch.integrations.connectors.zoomTitle', { + defaultMessage: 'Zoom', + }), + description: i18n.translate( + 'xpack.enterpriseSearch.integrations.connectors.zoomDescription', + { + defaultMessage: 'Search over your content on Zoom.', + } + ), + categories: [ + 'enterprise_search', + 'elastic_stack', + 'custom', + 'connector', + 'connector_client', + 'zoom', + ...nativeSearchTag, + ], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=zoom', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/zoom.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); + + customIntegrations.registerCustomIntegration({ + id: 'teams', + title: i18n.translate('xpack.enterpriseSearch.integrations.connectors.teamsTitle', { + defaultMessage: 'Teams', + }), + description: i18n.translate( + 'xpack.enterpriseSearch.integrations.connectors.teamsDescription', + { + defaultMessage: 'Search over your content on Teams.', + } + ), + categories: [ + 'enterprise_search', + 'elastic_stack', + 'custom', + 'connector', + 'connector_client', + 'teams', + ...nativeSearchTag, + ], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=teams', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/teams.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); + + customIntegrations.registerCustomIntegration({ + id: 'box', + title: i18n.translate('xpack.enterpriseSearch.integrations.connectors.boxTitle', { + defaultMessage: 'Box', + }), + description: i18n.translate('xpack.enterpriseSearch.integrations.connectors.boxDescription', { + defaultMessage: 'Search over your content on Box.', + }), + categories: [ + 'enterprise_search', + 'elastic_stack', + 'custom', + 'connector', + 'connector_client', + 'box', + ...nativeSearchTag, + ], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=box', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/box.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); } }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 4ca039b28c2a1..19c63121a62b8 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -14715,8 +14715,6 @@ "xpack.enterpriseSearch.workplaceSearch.groups.sourcesModalLabel": "sources de contenu organisationnelles", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlob": "Stockage Blob Azure", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "Effectuez des recherches sur votre contenu sur Stockage Blob Azure avec Enterprise Search.", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "Effectuez des recherches dans vos fichiers et dossiers stockés sur Box avec Workplace Search.", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "Effectuez des recherches sur votre contenu sur Google Cloud Storage avec Enterprise Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "Effectuez des recherches dans vos documents sur Google Drive avec Workplace Search.", @@ -14739,8 +14737,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "SharePoint Online", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "Effectuez des recherches dans vos fichiers stockés sur le serveur Microsoft SharePoint avec Workplace Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "Serveur SharePoint", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "Effectuez des recherches dans vos tickets sur Zendesk avec Workplace Search.", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "Continuer la modification", "xpack.enterpriseSearch.workplaceSearch.label.label": "Étiquette", "xpack.enterpriseSearch.workplaceSearch.name.label": "Nom", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 7eab39e0ae1b2..89c3b1a590be5 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14729,8 +14729,6 @@ "xpack.enterpriseSearch.workplaceSearch.groups.sourcesModalLabel": "組織コンテンツソース", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlob": "Azure Blob Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "エンタープライズ サーチでAzure Blob Storageのコンテンツを検索します。", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "Workplace Searchを使用して、Boxに保存されたファイルとフォルダーを検索します。", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "エンタープライズ サーチでGoogle Cloud Storageのコンテンツを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "Workplace Searchを使用して、Google Driveのドキュメントを検索します。", @@ -14753,8 +14751,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "SharePoint Online", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "Workplace Searchを使用して、Microsoft SharePoint Serverに保存されたファイルを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "SharePoint Server", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "Workplace Searchを使用して、Zendeskのチケットを検索します。", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "編集を続行", "xpack.enterpriseSearch.workplaceSearch.label.label": "ラベル", "xpack.enterpriseSearch.workplaceSearch.name.label": "名前", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f9190f9a3c5a4..46482145dcf97 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14729,8 +14729,6 @@ "xpack.enterpriseSearch.workplaceSearch.groups.sourcesModalLabel": "组织内容源", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlob": "Azure Blob 存储", "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "使用 Enterprise Search 在 Azure Blob 存储上搜索您的内容。", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "通过 Workplace Search 搜索存储在 Box 上的文件和文件夹。", - "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "使用 Enterprise Search 在 Google Cloud Storage 上搜索您的内容。", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "通过 Workplace Search 搜索 Google 云端硬盘上的文档。", @@ -14753,8 +14751,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "Sharepoint", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "通过 Workplace Search 搜索存储在 Microsoft SharePoint Server 上的文件。", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "SharePoint Server", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "通过 Workplace Search 搜索 Zendesk 上的工单。", - "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "继续编辑", "xpack.enterpriseSearch.workplaceSearch.label.label": "标签", "xpack.enterpriseSearch.workplaceSearch.name.label": "名称", From 7f1f1a8ee07a21c5cf0d945eaec19ad935582819 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Tue, 3 Oct 2023 15:27:44 +0200 Subject: [PATCH 006/170] [Security Solution] Unskipping `x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/` working tests on serverless (#167513) --- .../alerts/alert_table_action_column.cy.ts | 54 ++++---- .../alerts/alert_table_controls.cy.ts | 14 +- .../alerts/alerts_cell_actions.cy.ts | 7 +- .../alerts/alerts_details.cy.ts | 31 +++-- .../alerts/building_block_alerts.cy.ts | 64 +++++---- .../alerts/changing_alert_status.cy.ts | 1 + .../alerts/detection_page_filters.cy.ts | 2 +- .../alerts/event_rendered_view.cy.ts | 4 +- .../alerts/investigate_in_timeline.cy.ts | 122 +++++++++--------- .../e2e/investigations/alerts/resolver.cy.ts | 50 ++++--- 10 files changed, 166 insertions(+), 183 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_action_column.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_action_column.cy.ts index be3664c8f7812..d35cc7dd1f7c1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_action_column.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_action_column.cy.ts @@ -16,37 +16,33 @@ import { login } from '../../../tasks/login'; import { visitWithTimeRange } from '../../../tasks/navigation'; import { ALERTS_URL } from '../../../urls/navigation'; -describe( - 'Alerts Table Action column', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - cy.task('esArchiverLoad', { - archiveName: 'process_ancestry', - useCreate: true, - docsOnly: true, - }); +describe('Alerts Table Action column', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + cy.task('esArchiverLoad', { + archiveName: 'process_ancestry', + useCreate: true, + docsOnly: true, }); + }); - beforeEach(() => { - login(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); + beforeEach(() => { + login(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); - after(() => { - cy.task('esArchiverUnload', 'process_ancestry'); - }); + after(() => { + cy.task('esArchiverUnload', 'process_ancestry'); + }); - it('should have session viewer button visible & open session viewer on click', () => { - openSessionViewerFromAlertTable(); - cy.get(OVERLAY_CONTAINER).should('be.visible'); - }); + it('should have session viewer button visible & open session viewer on click', () => { + openSessionViewerFromAlertTable(); + cy.get(OVERLAY_CONTAINER).should('be.visible'); + }); - it('should have analyzer button visible & open analyzer on click', () => { - openAnalyzerForFirstAlertInTimeline(); - cy.get(OVERLAY_CONTAINER).should('be.visible'); - }); - } -); + it('should have analyzer button visible & open analyzer on click', () => { + openAnalyzerForFirstAlertInTimeline(); + cy.get(OVERLAY_CONTAINER).should('be.visible'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_controls.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_controls.cy.ts index 1028efc8422ba..fbdfd47249941 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_controls.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alert_table_controls.cy.ts @@ -10,7 +10,6 @@ import { switchAlertTableToGridView, waitForAlerts, } from '../../../tasks/alerts'; -import { navigateFromHeaderTo } from '../../../tasks/security_header'; import { FIELDS_BROWSER_BTN } from '../../../screens/rule_details'; import { addsFields, @@ -32,9 +31,8 @@ import { cleanKibana } from '../../../tasks/common'; import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; -import { ALERTS_URL } from '../../../urls/navigation'; +import { ALERTS_URL, TIMELINES_URL } from '../../../urls/navigation'; import { DATAGRID_HEADER } from '../../../screens/timeline'; -import { TIMELINES, ALERTS } from '../../../screens/security_header'; /* * @@ -43,7 +41,7 @@ import { TIMELINES, ALERTS } from '../../../screens/security_header'; * * */ -describe(`Alert Table Controls`, () => { +describe(`Alert Table Controls`, { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); }); @@ -102,8 +100,8 @@ describe(`Alert Table Controls`, () => { closeFieldsBrowser(); cy.get(DATAGRID_HEADER(fieldName)).should('not.exist'); - navigateFromHeaderTo(TIMELINES); - navigateFromHeaderTo(ALERTS); + visit(TIMELINES_URL); + visit(ALERTS_URL); waitForAlerts(); cy.get(DATAGRID_HEADER('_id')).should('not.exist'); }); @@ -115,8 +113,8 @@ describe(`Alert Table Controls`, () => { closeFieldsBrowser(); cy.get(DATAGRID_HEADER('_id')).should('be.visible'); - navigateFromHeaderTo(TIMELINES); - navigateFromHeaderTo(ALERTS); + visit(TIMELINES_URL); + visit(ALERTS_URL); waitForAlerts(); cy.get(DATAGRID_HEADER('_id')).should('be.visible'); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_cell_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_cell_actions.cy.ts index 6ac1048c0f928..c19ffc4d8ac6b 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_cell_actions.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_cell_actions.cy.ts @@ -29,7 +29,6 @@ import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; import { - clearKqlQueryBar, fillAddFilterForm, fillKqlQueryBar, openAddFilterPopover, @@ -38,7 +37,7 @@ import { openActiveTimeline } from '../../../tasks/timeline'; import { ALERTS_URL } from '../../../urls/navigation'; -describe('Alerts cell actions', { tags: ['@ess', '@brokenInServerless'] }, () => { +describe('Alerts cell actions', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); createRule(getNewRule()); @@ -70,8 +69,6 @@ describe('Alerts cell actions', { tags: ['@ess', '@brokenInServerless'] }, () => filterForAlertProperty(ALERT_TABLE_FILE_NAME_VALUES, 0); cy.get(FILTER_BADGE).first().should('have.text', 'NOT file.name: exists'); - - clearKqlQueryBar(); }); it('should filter out a non-empty property', () => { @@ -95,8 +92,6 @@ describe('Alerts cell actions', { tags: ['@ess', '@brokenInServerless'] }, () => filterOutAlertProperty(ALERT_TABLE_FILE_NAME_VALUES, 0); cy.get(FILTER_BADGE).first().should('have.text', 'file.name: exists'); - - clearKqlQueryBar(); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_details.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_details.cy.ts index 19cf0274b148b..bfa5a98921be0 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_details.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_details.cy.ts @@ -40,7 +40,7 @@ import { waitForPageToBeLoaded as waitForRuleDetailsPageToBeLoaded, } from '../../../tasks/rule_details'; -describe('Alert details flyout', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Alert details flyout', () => { describe('Basic functions', () => { beforeEach(() => { cleanKibana(); @@ -52,18 +52,23 @@ describe('Alert details flyout', { tags: ['@ess', '@serverless', '@brokenInServe expandFirstAlert(); }); - it('should update the table when status of the alert is updated', () => { - cy.get(OVERVIEW_RULE).should('be.visible'); - cy.get(ALERTS_TABLE_COUNT).should('have.text', '2 alerts'); - cy.get(ALERT_SUMMARY_SEVERITY_DONUT_CHART).should('contain.text', '2alerts'); - expandFirstAlert(); - changeAlertStatusTo('acknowledged'); - cy.get(ALERTS_TABLE_COUNT).should('have.text', '1 alert'); - cy.get(ALERT_SUMMARY_SEVERITY_DONUT_CHART).should('contain.text', '1alert'); - }); + // Issue tracked in: https://github.com/elastic/kibana/issues/167809 + it( + 'should update the table when status of the alert is updated', + { tags: ['@ess', '@brokenInServerless'] }, + () => { + cy.get(OVERVIEW_RULE).should('be.visible'); + cy.get(ALERTS_TABLE_COUNT).should('have.text', '2 alerts'); + cy.get(ALERT_SUMMARY_SEVERITY_DONUT_CHART).should('contain.text', '2alerts'); + expandFirstAlert(); + changeAlertStatusTo('acknowledged'); + cy.get(ALERTS_TABLE_COUNT).should('have.text', '1 alert'); + cy.get(ALERT_SUMMARY_SEVERITY_DONUT_CHART).should('contain.text', '1alert'); + } + ); }); - describe('With unmapped fields', () => { + describe('With unmapped fields', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverLoad', { archiveName: 'unmapped_fields' }); @@ -136,7 +141,7 @@ describe('Alert details flyout', { tags: ['@ess', '@serverless', '@brokenInServe }); }); - describe('Url state management', () => { + describe('Url state management', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverLoad', { archiveName: 'query_alert', useCreate: true, docsOnly: true }); @@ -182,7 +187,7 @@ describe('Alert details flyout', { tags: ['@ess', '@serverless', '@brokenInServe }); }); - describe('Localstorage management', () => { + describe('Localstorage management', { tags: ['@ess', '@serverless'] }, () => { const ARCHIVED_RULE_ID = '7015a3e2-e4ea-11ed-8c11-49608884878f'; const ARCHIVED_RULE_NAME = 'Endpoint Security'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/building_block_alerts.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/building_block_alerts.cy.ts index 64fbb36effebf..5efdfb7d94c8f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/building_block_alerts.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/building_block_alerts.cy.ts @@ -18,37 +18,33 @@ import { navigateFromHeaderTo } from '../../../tasks/security_header'; const EXPECTED_NUMBER_OF_ALERTS = 5; -describe( - 'Alerts generated by building block rules', - { tags: ['@ess', '@brokenInServerless'] }, - () => { - before(() => { - cy.task('esArchiverLoad', { archiveName: 'auditbeat_big' }); - }); - - after(() => { - cy.task('esArchiverUnload', 'auditbeat_big'); - }); - - beforeEach(() => { - cleanKibana(); - login(); - createRule(getBuildingBlockRule()).then((rule) => visitRuleDetailsPage(rule.body.id)); - }); - - it('Alerts should be visible on the Rule Detail page and not visible on the Overview page', () => { - waitForTheRuleToBeExecuted(); - - // Check that generated events are visible on the Details page - waitForAlertsToPopulate(EXPECTED_NUMBER_OF_ALERTS); - - // Make sure rows are highlighted - cy.get(HIGHLIGHTED_ROWS_IN_TABLE).should('exist'); - - navigateFromHeaderTo(OVERVIEW); - - // Check that generated events are hidden on the Overview page - cy.get(OVERVIEW_ALERTS_HISTOGRAM_EMPTY).should('contain.text', 'No results found'); - }); - } -); +describe('Alerts generated by building block rules', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cy.task('esArchiverLoad', { archiveName: 'auditbeat_big' }); + }); + + after(() => { + cy.task('esArchiverUnload', 'auditbeat_big'); + }); + + beforeEach(() => { + cleanKibana(); + login(); + createRule(getBuildingBlockRule()).then((rule) => visitRuleDetailsPage(rule.body.id)); + }); + + it('Alerts should be visible on the Rule Detail page and not visible on the Overview page', () => { + waitForTheRuleToBeExecuted(); + + // Check that generated events are visible on the Details page + waitForAlertsToPopulate(EXPECTED_NUMBER_OF_ALERTS); + + // Make sure rows are highlighted + cy.get(HIGHLIGHTED_ROWS_IN_TABLE).should('exist'); + + navigateFromHeaderTo(OVERVIEW); + + // Check that generated events are hidden on the Overview page + cy.get(OVERVIEW_ALERTS_HISTOGRAM_EMPTY).should('contain.text', 'No results found'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/changing_alert_status.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/changing_alert_status.cy.ts index c01cd6522c975..7a413849559bb 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/changing_alert_status.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/changing_alert_status.cy.ts @@ -39,6 +39,7 @@ import { visit } from '../../../tasks/navigation'; import { ALERTS_URL } from '../../../urls/navigation'; +// Iusse tracked in: https://github.com/elastic/kibana/issues/167809 describe('Changing alert status', { tags: ['@ess', '@brokenInServerless'] }, () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'auditbeat_big' }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts index 234eb4193179b..113c10cf2d910 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts @@ -108,7 +108,7 @@ const assertFilterControlsWithFilterObject = ( }); }; -describe(`Detections : Page Filters`, { tags: ['@ess', '@brokenInServerless'] }, () => { +describe(`Detections : Page Filters`, { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); createRule(getNewRule({ rule_id: 'custom_rule_filters' })); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/event_rendered_view.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/event_rendered_view.cy.ts index 6bc165f26f075..66672cf66ec19 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/event_rendered_view.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/event_rendered_view.cy.ts @@ -34,7 +34,7 @@ import { XY_CHART, } from '../../../screens/shared'; -describe(`Event Rendered View`, () => { +describe(`Event Rendered View`, { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); }); @@ -60,7 +60,7 @@ describe(`Event Rendered View`, () => { cy.get(SHOW_TOP_N_HEADER).first().should('have.text', 'Top host.name'); cy.get(XY_CHART).should('be.visible'); cy.get(TOP_N_CONTAINER_CLOSE_BTN).trigger('click'); - cy.get(XY_CHART).should('not.be.visible'); + cy.get(XY_CHART).should('not.exist'); }); /* diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts index ff8350f54a3c4..89bae99047759 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/investigate_in_timeline.cy.ts @@ -28,80 +28,76 @@ import { } from '../../../screens/alerts_details'; import { verifyInsightCount } from '../../../tasks/alerts_details'; -describe( - 'Investigate in timeline', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - createRule(getNewRule()); - }); +describe('Investigate in timeline', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + createRule(getNewRule()); + }); - describe('From alerts table', () => { - beforeEach(() => { - login(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); + describe('From alerts table', () => { + beforeEach(() => { + login(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); - it('should open new timeline from alerts table', () => { - investigateFirstAlertInTimeline(); - cy.get(PROVIDER_BADGE) - .first() - .invoke('text') - .then((eventId) => { - cy.get(PROVIDER_BADGE).filter(':visible').should('have.text', eventId); - }); - }); + it('should open new timeline from alerts table', () => { + investigateFirstAlertInTimeline(); + cy.get(PROVIDER_BADGE) + .first() + .invoke('text') + .then((eventId) => { + cy.get(PROVIDER_BADGE).filter(':visible').should('have.text', eventId); + }); }); + }); - describe('From alerts details flyout', () => { - beforeEach(() => { - login(); - disableExpandableFlyout(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - expandFirstAlert(); - }); + describe('From alerts details flyout', () => { + beforeEach(() => { + login(); + disableExpandableFlyout(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlert(); + }); - it('should open a new timeline from a prevalence field', () => { - // Only one alert matches the exact process args in this case - const alertCount = 1; + it('should open a new timeline from a prevalence field', () => { + // Only one alert matches the exact process args in this case + const alertCount = 1; - // Click on the last button that lets us investigate in timeline. - // We expect this to be the `process.args` row. - cy.get(ALERT_FLYOUT) - .find(SUMMARY_VIEW_INVESTIGATE_IN_TIMELINE_BUTTON) - .last() - .should('have.text', alertCount) - .click(); + // Click on the last button that lets us investigate in timeline. + // We expect this to be the `process.args` row. + cy.get(ALERT_FLYOUT) + .find(SUMMARY_VIEW_INVESTIGATE_IN_TIMELINE_BUTTON) + .last() + .should('have.text', alertCount) + .click(); - // Make sure a new timeline is created and opened - cy.get(TIMELINE_TITLE).should('have.text', 'Untitled timeline'); + // Make sure a new timeline is created and opened + cy.get(TIMELINE_TITLE).should('have.text', 'Untitled timeline'); - // The alert count in this timeline should match the count shown on the alert flyout - cy.get(QUERY_TAB_BUTTON).should('contain.text', alertCount); + // The alert count in this timeline should match the count shown on the alert flyout + cy.get(QUERY_TAB_BUTTON).should('contain.text', alertCount); - // The correct filter is applied to the timeline query - cy.get(FILTER_BADGE).should( - 'have.text', - ' {"bool":{"must":[{"term":{"process.args":"-zsh"}},{"term":{"process.args":"unique"}}]}}' - ); - }); + // The correct filter is applied to the timeline query + cy.get(FILTER_BADGE).should( + 'have.text', + ' {"bool":{"must":[{"term":{"process.args":"-zsh"}},{"term":{"process.args":"unique"}}]}}' + ); + }); - it('should open a new timeline from an insights module', () => { - verifyInsightCount({ - tableSelector: INSIGHTS_RELATED_ALERTS_BY_SESSION, - investigateSelector: INSIGHTS_INVESTIGATE_IN_TIMELINE_BUTTON, - }); + it('should open a new timeline from an insights module', () => { + verifyInsightCount({ + tableSelector: INSIGHTS_RELATED_ALERTS_BY_SESSION, + investigateSelector: INSIGHTS_INVESTIGATE_IN_TIMELINE_BUTTON, }); + }); - it('should open a new timeline with alert ids from the process ancestry', () => { - verifyInsightCount({ - tableSelector: INSIGHTS_RELATED_ALERTS_BY_ANCESTRY, - investigateSelector: INSIGHTS_INVESTIGATE_ANCESTRY_ALERTS_IN_TIMELINE_BUTTON, - }); + it('should open a new timeline with alert ids from the process ancestry', () => { + verifyInsightCount({ + tableSelector: INSIGHTS_RELATED_ALERTS_BY_ANCESTRY, + investigateSelector: INSIGHTS_INVESTIGATE_ANCESTRY_ALERTS_IN_TIMELINE_BUTTON, }); }); - } -); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/resolver.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/resolver.cy.ts index cc62c05e5949b..ba33a9fde8902 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/resolver.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/resolver.cy.ts @@ -18,33 +18,29 @@ import { login } from '../../../tasks/login'; import { visitWithTimeRange } from '../../../tasks/navigation'; import { ALERTS_URL } from '../../../urls/navigation'; -describe( - 'Analyze events view for alerts', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - createRule(getNewRule()); - }); +describe('Analyze events view for alerts', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + createRule(getNewRule()); + }); - beforeEach(() => { - login(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); + beforeEach(() => { + login(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); - it('should render when button is clicked', () => { - openAnalyzerForFirstAlertInTimeline(); - cy.get(ANALYZER_NODE).first().should('be.visible'); - }); + it('should render when button is clicked', () => { + openAnalyzerForFirstAlertInTimeline(); + cy.get(ANALYZER_NODE).first().should('be.visible'); + }); - it('should display a toast indicating the date range of found events when a time range has 0 events in it', () => { - const dateContainingZeroEvents = 'Jul 27, 2022 @ 00:00:00.000'; - setStartDate(dateContainingZeroEvents); - waitForAlertsToPopulate(); - openAnalyzerForFirstAlertInTimeline(); - cy.get(TOASTER).should('be.visible'); - cy.get(ANALYZER_NODE).first().should('be.visible'); - }); - } -); + it('should display a toast indicating the date range of found events when a time range has 0 events in it', () => { + const dateContainingZeroEvents = 'Jul 27, 2022 @ 00:00:00.000'; + setStartDate(dateContainingZeroEvents); + waitForAlertsToPopulate(); + openAnalyzerForFirstAlertInTimeline(); + cy.get(TOASTER).should('be.visible'); + cy.get(ANALYZER_NODE).first().should('be.visible'); + }); +}); From 8d78de92ea54fe6ce41d02d1ed7d9604c71d3160 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Tue, 3 Oct 2023 15:40:12 +0200 Subject: [PATCH 007/170] [Security Solution] Unskipping `x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/` working tests on serverless (#167512) --- ..._details_left_panel_correlations_tab.cy.ts | 120 ++++---- ...lert_details_left_panel_entities_tab.cy.ts | 2 +- ...details_left_panel_investigation_tab.cy.ts | 2 +- ...rt_details_left_panel_prevalence_tab.cy.ts | 98 +++---- ...lert_details_left_panel_response_tab.cy.ts | 34 ++- ..._details_left_panel_session_view_tab.cy.ts | 2 +- ...s_left_panel_threat_intelligence_tab.cy.ts | 2 +- ...s_preview_panel_alert_reason_preview.cy.ts | 2 +- ...t_details_preview_panel_rule_preview.cy.ts | 40 +-- .../alert_details_right_panel.cy.ts | 257 +++++++++--------- .../alert_details_right_panel_json_tab.cy.ts | 2 +- ...ert_details_right_panel_overview_tab.cy.ts | 2 +- .../alert_details_right_panel_table_tab.cy.ts | 2 +- .../alert_details_url_sync.cy.ts | 2 +- 14 files changed, 286 insertions(+), 281 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts index 9acd2f2a222df..7a63d5ec09e18 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_correlations_tab.cy.ts @@ -34,77 +34,71 @@ import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; import { ALERTS_URL } from '../../../../urls/navigation'; -describe( - 'Expandable flyout left panel correlations', - { tags: ['@ess', '@brokenInServerless'] }, - () => { - beforeEach(() => { - cleanKibana(); - login(); - createRule(getNewRule()); - visit(ALERTS_URL); - waitForAlertsToPopulate(); - expandFirstAlertExpandableFlyout(); - expandDocumentDetailsExpandableFlyoutLeftSection(); - createNewCaseFromExpandableFlyout(); - openInsightsTab(); - openCorrelationsTab(); - }); +describe('Expandable flyout left panel correlations', { tags: ['@ess', '@serverless'] }, () => { + beforeEach(() => { + cleanKibana(); + login(); + createRule(getNewRule()); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + expandDocumentDetailsExpandableFlyoutLeftSection(); + createNewCaseFromExpandableFlyout(); + openInsightsTab(); + openCorrelationsTab(); + }); - it('should render correlations details correctly', () => { - cy.log('link the alert to a new case'); + it('should render correlations details correctly', () => { + cy.log('link the alert to a new case'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).scrollIntoView(); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).scrollIntoView(); - cy.log('should render the Insights header'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB) - .should('be.visible') - .and('have.text', 'Insights'); + cy.log('should render the Insights header'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights'); - cy.log('should render the inner tab switch'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible'); + cy.log('should render the inner tab switch'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible'); - cy.log('should render correlations tab activator / button'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON) - .should('be.visible') - .and('have.text', 'Correlations'); + cy.log('should render correlations tab activator / button'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON) + .should('be.visible') + .and('have.text', 'Correlations'); - cy.log('should render all the correlations sections'); + cy.log('should render all the correlations sections'); - cy.get(CORRELATIONS_ANCESTRY_SECTION_TITLE).scrollIntoView(); - cy.get(CORRELATIONS_ANCESTRY_SECTION_TITLE) - .should('be.visible') - .and('contain.text', '1 alert related by ancestry'); - cy.get(CORRELATIONS_ANCESTRY_SECTION_TABLE).should('be.visible'); - cy.get(CORRELATIONS_ANCESTRY_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); + cy.get(CORRELATIONS_ANCESTRY_SECTION_TITLE).scrollIntoView(); + cy.get(CORRELATIONS_ANCESTRY_SECTION_TITLE) + .should('be.visible') + .and('contain.text', '1 alert related by ancestry'); + cy.get(CORRELATIONS_ANCESTRY_SECTION_TABLE).should('be.visible'); + cy.get(CORRELATIONS_ANCESTRY_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); - // TODO get proper data to test this section - // cy.get(CORRELATIONS_SOURCE_SECTION).scrollIntoView(); - // cy.get(CORRELATIONS_SOURCE_SECTION) - // .should('be.visible') - // .and('contain.text', '0 alerts related by source event'); - // cy.get(CORRELATIONS_SOURCE_SECTION_TABLE).should('be.visible'); - // cy.get(CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); + // TODO get proper data to test this section + // cy.get(CORRELATIONS_SOURCE_SECTION).scrollIntoView(); + // cy.get(CORRELATIONS_SOURCE_SECTION) + // .should('be.visible') + // .and('contain.text', '0 alerts related by source event'); + // cy.get(CORRELATIONS_SOURCE_SECTION_TABLE).should('be.visible'); + // cy.get(CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); - cy.get(CORRELATIONS_SESSION_SECTION_TITLE).scrollIntoView(); - cy.get(CORRELATIONS_SESSION_SECTION_TITLE) - .should('be.visible') - .and('contain.text', '1 alert related by session'); - cy.get(CORRELATIONS_SESSION_SECTION_TABLE).should('be.visible'); - cy.get(CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); + cy.get(CORRELATIONS_SESSION_SECTION_TITLE).scrollIntoView(); + cy.get(CORRELATIONS_SESSION_SECTION_TITLE) + .should('be.visible') + .and('contain.text', '1 alert related by session'); + cy.get(CORRELATIONS_SESSION_SECTION_TABLE).should('be.visible'); + cy.get(CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); - cy.get(CORRELATIONS_CASES_SECTION_TITLE).scrollIntoView(); - cy.get(CORRELATIONS_CASES_SECTION_TITLE) - .should('be.visible') - .and('contain.text', '1 related case'); - cy.get(CORRELATIONS_CASES_SECTION_TABLE).should('be.visible'); + cy.get(CORRELATIONS_CASES_SECTION_TITLE).scrollIntoView(); + cy.get(CORRELATIONS_CASES_SECTION_TITLE) + .should('be.visible') + .and('contain.text', '1 related case'); + cy.get(CORRELATIONS_CASES_SECTION_TABLE).should('be.visible'); - // TODO get proper data to test suppressed alerts - // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_TITLE).scrollIntoView(); - // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_TITLE) - // .should('be.visible') - // .and('contain.text', '1 suppressed alert'); - // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); - }); - } -); + // TODO get proper data to test suppressed alerts + // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_TITLE).scrollIntoView(); + // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_TITLE) + // .should('be.visible') + // .and('contain.text', '1 suppressed alert'); + // cy.get(CORRELATIONS_SUPPRESSED_ALERTS_INVESTIGATE_IN_TIMELINE_BUTTON).should('be.visible'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts index ad051444d16b7..088a4c0dc87ee 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_entities_tab.cy.ts @@ -28,7 +28,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; describe( 'Alert details expandable flyout left panel entities', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts index 137beba1dfddb..de6bfd1272fec 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_investigation_tab.cy.ts @@ -22,7 +22,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; describe( 'Alert details expandable flyout left panel investigation', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts index 5c51ef21a499c..3979a28046790 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts @@ -32,54 +32,60 @@ import { getNewRule } from '../../../../objects/rule'; import { ALERTS_URL } from '../../../../urls/navigation'; import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; -describe('Alert details expandable flyout left panel prevalence', () => { - beforeEach(() => { - cleanKibana(); - login(); - createRule({ ...getNewRule(), investigation_fields: { field_names: ['host.os.name'] } }); - visit(ALERTS_URL); - waitForAlertsToPopulate(); - expandFirstAlertExpandableFlyout(); - expandDocumentDetailsExpandableFlyoutLeftSection(); - openInsightsTab(); - openPrevalenceTab(); - }); +describe( + 'Alert details expandable flyout left panel prevalence', + { tags: ['@ess', '@serverless'] }, + () => { + beforeEach(() => { + cleanKibana(); + login(); + createRule({ ...getNewRule(), investigation_fields: { field_names: ['host.os.name'] } }); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + expandDocumentDetailsExpandableFlyoutLeftSection(); + openInsightsTab(); + openPrevalenceTab(); + }); - it('should display prevalence tab', { tags: ['@ess', '@brokenInServerless'] }, () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB).should('be.visible').and('have.text', 'Insights'); + it('should display prevalence tab', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB) + .should('be.visible') + .and('have.text', 'Insights'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_BUTTON_GROUP).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON) - .should('be.visible') - .and('have.text', 'Prevalence'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON) + .should('be.visible') + .and('have.text', 'Prevalence'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_DATE_PICKER).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_DATE_PICKER).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_TYPE_CELL) - .should('contain.text', 'host.os.name') - .and('contain.text', 'host.name') - .and('contain.text', 'user.name'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_NAME_CELL) - .should('contain.text', 'Mac OS X') - .and('contain.text', 'siem-kibana') - .and('contain.text', 'test'); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_ALERT_COUNT_CELL).should( - 'contain.text', - 2 - ); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_DOC_COUNT_CELL).should( - 'contain.text', - '—' - ); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALENCE_CELL).should( - 'contain.text', - 100 - ); - cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL).should( - 'contain.text', - 100 - ); - }); -}); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_TYPE_CELL) + .should('contain.text', 'host.os.name') + .and('contain.text', 'host.name') + .and('contain.text', 'user.name'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_NAME_CELL) + .should('contain.text', 'Mac OS X') + .and('contain.text', 'siem-kibana') + .and('contain.text', 'test'); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_ALERT_COUNT_CELL).should( + 'contain.text', + 2 + ); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_DOC_COUNT_CELL).should( + 'contain.text', + '—' + ); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALENCE_CELL).should( + 'contain.text', + 100 + ); + cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL).should( + 'contain.text', + 100 + ); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts index 4631b64220b26..7ba5def9b29b2 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_response_tab.cy.ts @@ -17,19 +17,23 @@ import { getNewRule } from '../../../../objects/rule'; import { ALERTS_URL } from '../../../../urls/navigation'; import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; -describe('Alert details expandable flyout left panel investigation', () => { - beforeEach(() => { - cleanKibana(); - login(); - createRule(getNewRule()); - visit(ALERTS_URL); - waitForAlertsToPopulate(); - expandFirstAlertExpandableFlyout(); - expandDocumentDetailsExpandableFlyoutLeftSection(); - openResponseTab(); - }); +describe( + 'Alert details expandable flyout left panel investigation', + { tags: ['@ess', '@serverless'] }, + () => { + beforeEach(() => { + cleanKibana(); + login(); + createRule(getNewRule()); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + expandDocumentDetailsExpandableFlyoutLeftSection(); + openResponseTab(); + }); - it('should display empty response message', () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_RESPONSE_EMPTY).should('be.visible'); - }); -}); + it('should display empty response message', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_RESPONSE_EMPTY).should('be.visible'); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts index 4636b96beaa04..dd0af1e610b2c 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_session_view_tab.cy.ts @@ -23,7 +23,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; // TODO enable once the visualize tabs are back describe.skip( 'Alert details expandable flyout left panel session view', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts index a0720b026c5d5..a8c97d8beb9d7 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.cy.ts @@ -25,7 +25,7 @@ import { DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON } from describe( 'Expandable flyout left panel threat intelligence', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_alert_reason_preview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_alert_reason_preview.cy.ts index cc6b2a6e8c242..27e85c0066de5 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_alert_reason_preview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_alert_reason_preview.cy.ts @@ -18,7 +18,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; describe( 'Alert details expandable flyout rule preview panel', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { const rule = getNewRule(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts index 7ce841595f189..b56dfbfdf6ecf 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel_rule_preview.cy.ts @@ -35,24 +35,24 @@ import { getNewRule } from '../../../../objects/rule'; import { ALERTS_URL } from '../../../../urls/navigation'; import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; -describe('Alert details expandable flyout rule preview panel', () => { - const rule = getNewRule(); +describe( + 'Alert details expandable flyout rule preview panel', + { tags: ['@ess', '@serverless'] }, + () => { + const rule = getNewRule(); - beforeEach(() => { - cleanKibana(); - login(); - createRule(rule); - visit(ALERTS_URL); - waitForAlertsToPopulate(); - expandFirstAlertExpandableFlyout(); - clickRuleSummaryButton(); - }); + beforeEach(() => { + cleanKibana(); + login(); + createRule(rule); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + clickRuleSummaryButton(); + }); - describe('rule preview', () => { - it( - 'should display rule preview and its sub sections', - { tags: ['@ess', '@brokenInServerless'] }, - () => { + describe('rule preview', () => { + it('should display rule preview and its sub sections', () => { cy.log('rule preview panel'); cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SECTION).scrollIntoView(); @@ -97,7 +97,7 @@ describe('Alert details expandable flyout rule preview panel', () => { cy.log('footer'); cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).scrollIntoView(); cy.get(DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_FOOTER).should('be.visible'); - } - ); - }); -}); + }); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts index 9a64bd46c1e89..4a404496cbdcf 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel.cy.ts @@ -67,132 +67,133 @@ import { getNewRule } from '../../../../objects/rule'; import { ALERTS_URL } from '../../../../urls/navigation'; import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; -describe( - 'Alert details expandable flyout right panel', - { tags: ['@ess', '@brokenInServerless'] }, - () => { - const rule = getNewRule(); - - beforeEach(() => { - cleanKibana(); - login(); - createRule(rule); - visit(ALERTS_URL); - waitForAlertsToPopulate(); - }); - - it('should display header and footer basics', () => { - expandFirstAlertExpandableFlyout(); - - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name); - - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_CHAT_BUTTON).should('be.visible'); - - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_STATUS).should('be.visible'); - - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE_VALUE) - .should('be.visible') - .and('have.text', rule.risk_score); - - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY_VALUE) - .should('be.visible') - .and('have.text', upperFirst(rule.severity)); - - cy.log('Verify all 3 tabs are visible'); - - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB) - .should('be.visible') - .and('have.text', 'Overview'); - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).should('be.visible').and('have.text', 'Table'); - cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).should('be.visible').and('have.text', 'JSON'); - - cy.log('Verify the expand/collapse button is visible and functionality works'); - - expandDocumentDetailsExpandableFlyoutLeftSection(); - cy.get(DOCUMENT_DETAILS_FLYOUT_COLLAPSE_DETAILS_BUTTON) - .should('be.visible') - .and('have.text', 'Collapse details'); - - collapseDocumentDetailsExpandableFlyoutLeftSection(); - cy.get(DOCUMENT_DETAILS_FLYOUT_EXPAND_DETAILS_BUTTON) - .should('be.visible') - .and('have.text', 'Expand details'); - - cy.log('Verify the take action button is visible on all tabs'); - - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); - - openTableTab(); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); - - openJsonTab(); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); - }); - - // TODO this will change when add to existing case is improved - // https://github.com/elastic/security-team/issues/6298 - it('should add to existing case', () => { - navigateToCasesPage(); - createNewCaseFromCases(); - - cy.get(CASE_DETAILS_PAGE_TITLE).should('be.visible').and('have.text', 'case'); - navigateToAlertsPage(); - expandFirstAlertExpandableFlyout(); - openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_EXISTING_CASE); - - cy.get(EXISTING_CASE_SELECT_BUTTON).should('be.visible').contains('Select').click(); - cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case'); - }); - - // TODO this will change when add to new case is improved - // https://github.com/elastic/security-team/issues/6298 - it('should add to new case', () => { - expandFirstAlertExpandableFlyout(); - openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE); - - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_NAME_INPUT).type('case'); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_DESCRIPTION_INPUT).type( - 'case description' - ); - cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_CREATE_BUTTON).click(); - - cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case'); - }); - - it('should mark as acknowledged', () => { - cy.get(ALERT_CHECKBOX).should('have.length', 2); - - expandFirstAlertExpandableFlyout(); - openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_MARK_AS_ACKNOWLEDGED); - - // TODO figure out how to verify the toasts pops up - // cy.get(KIBANA_TOAST) - // .should('be.visible') - // .and('have.text', 'Successfully marked 1 alert as acknowledged.'); - cy.get(ALERT_CHECKBOX).should('have.length', 1); - }); - - it('should mark as closed', () => { - cy.get(ALERT_CHECKBOX).should('have.length', 2); - - expandFirstAlertExpandableFlyout(); - openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_MARK_AS_CLOSED); - - // TODO figure out how to verify the toasts pops up - // cy.get(KIBANA_TOAST).should('be.visible').and('have.text', 'Successfully closed 1 alert.'); - cy.get(ALERT_CHECKBOX).should('have.length', 1); - }); +describe('Alert details expandable flyout right panel', () => { + const rule = getNewRule(); - // these actions are now grouped together as we're not really testing their functionality but just the existence of the option in the dropdown - it('should test other action within take action dropdown', () => { + beforeEach(() => { + cleanKibana(); + login(); + createRule(rule); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + }); + + it('should display header and footer basics', { tags: ['@ess', '@serverless'] }, () => { + expandFirstAlertExpandableFlyout(); + + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).should('be.visible').and('have.text', rule.name); + + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_CHAT_BUTTON).should('be.visible'); + + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_STATUS).should('be.visible'); + + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_RISK_SCORE_VALUE) + .should('be.visible') + .and('have.text', rule.risk_score); + + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_SEVERITY_VALUE) + .should('be.visible') + .and('have.text', upperFirst(rule.severity)); + + cy.log('Verify all 3 tabs are visible'); + + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB).should('be.visible').and('have.text', 'Overview'); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).should('be.visible').and('have.text', 'Table'); + cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).should('be.visible').and('have.text', 'JSON'); + + cy.log('Verify the expand/collapse button is visible and functionality works'); + + expandDocumentDetailsExpandableFlyoutLeftSection(); + cy.get(DOCUMENT_DETAILS_FLYOUT_COLLAPSE_DETAILS_BUTTON) + .should('be.visible') + .and('have.text', 'Collapse details'); + + collapseDocumentDetailsExpandableFlyoutLeftSection(); + cy.get(DOCUMENT_DETAILS_FLYOUT_EXPAND_DETAILS_BUTTON) + .should('be.visible') + .and('have.text', 'Expand details'); + + cy.log('Verify the take action button is visible on all tabs'); + + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); + + openTableTab(); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); + + openJsonTab(); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).scrollIntoView(); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible'); + }); + + // TODO this will change when add to existing case is improved + // https://github.com/elastic/security-team/issues/6298 + it('should add to existing case', { tags: ['@ess', '@serverless'] }, () => { + navigateToCasesPage(); + createNewCaseFromCases(); + + cy.get(CASE_DETAILS_PAGE_TITLE).should('be.visible').and('have.text', 'case'); + navigateToAlertsPage(); + expandFirstAlertExpandableFlyout(); + openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_EXISTING_CASE); + + cy.get(EXISTING_CASE_SELECT_BUTTON).should('be.visible').contains('Select').click(); + cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case'); + }); + + // TODO this will change when add to new case is improved + // https://github.com/elastic/security-team/issues/6298 + it('should add to new case', { tags: ['@ess', '@serverless'] }, () => { + expandFirstAlertExpandableFlyout(); + openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE); + + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_NAME_INPUT).type('case'); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_DESCRIPTION_INPUT).type( + 'case description' + ); + cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_TO_NEW_CASE_CREATE_BUTTON).click(); + + cy.get(VIEW_CASE_TOASTER_LINK).should('be.visible').and('contain.text', 'View case'); + }); + + // Issue reported int: https://github.com/elastic/kibana/issues/167809 + it('should mark as acknowledged', { tags: ['@ess', '@brokenInServerless'] }, () => { + cy.get(ALERT_CHECKBOX).should('have.length', 2); + + expandFirstAlertExpandableFlyout(); + openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_ADD_MARK_AS_ACKNOWLEDGED); + + // TODO figure out how to verify the toasts pops up + // cy.get(KIBANA_TOAST) + // .should('be.visible') + // .and('have.text', 'Successfully marked 1 alert as acknowledged.'); + cy.get(ALERT_CHECKBOX).should('have.length', 1); + }); + + // Issue reported int: https://github.com/elastic/kibana/issues/167809 + it('should mark as closed', { tags: ['@ess', '@brokenInServerless'] }, () => { + cy.get(ALERT_CHECKBOX).should('have.length', 2); + + expandFirstAlertExpandableFlyout(); + openTakeActionButtonAndSelectItem(DOCUMENT_DETAILS_FLYOUT_FOOTER_MARK_AS_CLOSED); + + // TODO figure out how to verify the toasts pops up + // cy.get(KIBANA_TOAST).should('be.visible').and('have.text', 'Successfully closed 1 alert.'); + cy.get(ALERT_CHECKBOX).should('have.length', 1); + }); + + // these actions are now grouped together as we're not really testing their functionality but just the existence of the option in the dropdown + // Issue reported int: https://github.com/elastic/kibana/issues/167809 + it( + 'should test other action within take action dropdown', + { tags: ['@ess', '@brokenInServerless'] }, + () => { expandFirstAlertExpandableFlyout(); cy.log('should add endpoint exception'); @@ -234,6 +235,6 @@ describe( .within(() => cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_INVESTIGATE_IN_TIMELINE_ENTRY).should('be.visible') ); - }); - } -); + } + ); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts index a00e109bfc4f4..ca2605c47a1a2 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_json_tab.cy.ts @@ -18,7 +18,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; describe( 'Alert details expandable flyout right panel json tab', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts index 691a1626cf174..ba0d5d984dfbe 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts @@ -70,7 +70,7 @@ import { describe( 'Alert details expandable flyout right panel overview tab', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { const rule = { ...getNewRule(), investigation_fields: { field_names: ['host.os.name'] } }; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts index b5b00989df772..7b0625607d8b2 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_table_tab.cy.ts @@ -34,7 +34,7 @@ import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; describe( 'Alert details expandable flyout right panel table tab', - { tags: ['@ess', '@brokenInServerless'] }, + { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts index ba6f38d494c03..e4025c4679534 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_url_sync.cy.ts @@ -16,7 +16,7 @@ import { closeFlyout } from '../../../../tasks/expandable_flyout/alert_details_r import { expandFirstAlertExpandableFlyout } from '../../../../tasks/expandable_flyout/common'; import { DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE } from '../../../../screens/expandable_flyout/alert_details_right_panel'; -describe('Expandable flyout state sync', { tags: ['@ess', '@brokenInServerless'] }, () => { +describe('Expandable flyout state sync', { tags: ['@ess', '@serverless'] }, () => { const rule = getNewRule(); beforeEach(() => { From 5a219625651cdf08b50f94025b2119d54a0d54a1 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Tue, 3 Oct 2023 06:43:42 -0700 Subject: [PATCH 008/170] [Security Solution] fix serverless nextLastSuccessfulReport.toISOString logs (#167540) --- .../task_manager/usage_reporting_task.test.ts | 35 ++++++++++++++----- .../task_manager/usage_reporting_task.ts | 25 ++++++++----- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts index abd36d9ccb8da..915f07ea283c1 100644 --- a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts +++ b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts @@ -47,7 +47,7 @@ describe('SecurityUsageReportingTask', () => { let usageRecord: UsageRecord; function buildMockTaskInstance(overrides?: Partial): ConcreteTaskInstance { - const timestamp = new Date(new Date().setMinutes(-15)); + const timestamp = new Date(new Date().setMinutes(-15)).toISOString(); return assign( { id: `${TYPE}:${VERSION}`, @@ -173,7 +173,7 @@ describe('SecurityUsageReportingTask', () => { cloudSetup: taskArgs.cloudSetup, taskId: TASK_ID, config: taskArgs.config, - lastSuccessfulReport: task?.state.lastSuccessfulReport, + lastSuccessfulReport: new Date(task?.state.lastSuccessfulReport as string), }) ); }); @@ -203,7 +203,16 @@ describe('SecurityUsageReportingTask', () => { const taskInstance = buildMockTaskInstance(); const task = await runTask(taskInstance); const newLastSuccessfulReport = task?.state.lastSuccessfulReport; - expect(newLastSuccessfulReport).toEqual(expect.any(Date)); + expect(newLastSuccessfulReport).toEqual(expect.any(String)); + expect(newLastSuccessfulReport).not.toEqual(taskInstance.state.lastSuccessfulReport); + }); + + it('should set lastSuccessfulReport correctly if no usage records found', async () => { + meteringCallbackMock.mockResolvedValueOnce([]); + const taskInstance = buildMockTaskInstance({ state: { lastSuccessfulReport: null } }); + const task = await runTask(taskInstance); + const newLastSuccessfulReport = task?.state.lastSuccessfulReport; + expect(newLastSuccessfulReport).toEqual(expect.any(String)); expect(newLastSuccessfulReport).not.toEqual(taskInstance.state.lastSuccessfulReport); }); @@ -213,23 +222,31 @@ describe('SecurityUsageReportingTask', () => { }); it('should set lastSuccessfulReport correctly', async () => { - const lastSuccessfulReport = new Date(new Date().setMinutes(-15)); + const lastSuccessfulReport = new Date(new Date().setMinutes(-15)).toISOString(); const taskInstance = buildMockTaskInstance({ state: { lastSuccessfulReport } }); const task = await runTask(taskInstance); - const newLastSuccessfulReport = task?.state.lastSuccessfulReport as Date; + const newLastSuccessfulReport = task?.state.lastSuccessfulReport; expect(newLastSuccessfulReport).toEqual(taskInstance.state.lastSuccessfulReport); }); + it('should set lastSuccessfulReport correctly if previously null', async () => { + const taskInstance = buildMockTaskInstance({ state: { lastSuccessfulReport: null } }); + const task = await runTask(taskInstance); + const newLastSuccessfulReport = task?.state.lastSuccessfulReport; + + expect(newLastSuccessfulReport).toEqual(expect.any(String)); + }); + describe('and lookBackLimitMinutes is set', () => { it('should limit lastSuccessfulReport if past threshold', async () => { taskArgs = buildTaskArgs({ options: { lookBackLimitMinutes: 5 } }); mockTask = new SecurityUsageReportingTask(taskArgs); - const lastSuccessfulReport = new Date(new Date().setMinutes(-30)); + const lastSuccessfulReport = new Date(new Date().setMinutes(-30)).toISOString(); const taskInstance = buildMockTaskInstance({ state: { lastSuccessfulReport } }); const task = await runTask(taskInstance, 1); - const newLastSuccessfulReport = task?.state.lastSuccessfulReport as Date; + const newLastSuccessfulReport = new Date(task?.state.lastSuccessfulReport as string); // should be ~5 minutes so asserting between 4-6 minutes ago const sixMinutesAgo = new Date().setMinutes(-6); @@ -242,10 +259,10 @@ describe('SecurityUsageReportingTask', () => { taskArgs = buildTaskArgs({ options: { lookBackLimitMinutes: 30 } }); mockTask = new SecurityUsageReportingTask(taskArgs); - const lastSuccessfulReport = new Date(new Date().setMinutes(-15)); + const lastSuccessfulReport = new Date(new Date().setMinutes(-15)).toISOString(); const taskInstance = buildMockTaskInstance({ state: { lastSuccessfulReport } }); const task = await runTask(taskInstance, 1); - const newLastSuccessfulReport = task?.state.lastSuccessfulReport as Date; + const newLastSuccessfulReport = task?.state.lastSuccessfulReport; expect(newLastSuccessfulReport).toEqual(taskInstance.state.lastSuccessfulReport); }); diff --git a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts index f2947bef9602f..a292d7646791d 100644 --- a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts +++ b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts @@ -124,7 +124,8 @@ export class SecurityUsageReportingTask { const [{ elasticsearch }] = await core.getStartServices(); const esClient = elasticsearch.client.asInternalUser; - const lastSuccessfulReport = taskInstance.state.lastSuccessfulReport; + const lastSuccessfulReport = + taskInstance.state.lastSuccessfulReport && new Date(taskInstance.state.lastSuccessfulReport); let usageRecords: UsageRecord[] = []; // save usage record query time so we can use it to know where @@ -168,14 +169,13 @@ export class SecurityUsageReportingTask { } const state = { - lastSuccessfulReport: - usageReportResponse?.status === 201 - ? meteringCallbackTime - : this.getFailedLastSuccessfulReportTime( - meteringCallbackTime, - taskInstance.state.lastSuccessfulReport, - lookBackLimitMinutes - ), + lastSuccessfulReport: this.shouldUpdateLastSuccessfulReport(usageRecords, usageReportResponse) + ? meteringCallbackTime.toISOString() + : this.getFailedLastSuccessfulReportTime( + meteringCallbackTime, + lastSuccessfulReport, + lookBackLimitMinutes + ).toISOString(), }; return { state }; }; @@ -203,6 +203,13 @@ export class SecurityUsageReportingTask { return lookBackLimitTime; } + private shouldUpdateLastSuccessfulReport( + usageRecords: UsageRecord[], + usageReportResponse: Response | undefined + ): boolean { + return !usageRecords.length || usageReportResponse?.status === 201; + } + private get taskId() { return `${this.taskType}:${this.version}`; } From b53bdd6420f1b03d96e4f2a8d2b8d363343b02d2 Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Tue, 3 Oct 2023 07:06:23 -0700 Subject: [PATCH 009/170] [Cloud Security][BugFix] Fix for missing account_type on env created via Github action (#167690) ## Summary This PR is for Fix for issue where account_type is missing if that integration was made via Github Action (https://github.com/elastic/security-team/issues/7686) --- .../components/fleet_extensions/policy_template_form.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a75f933b9bd36..a7828296dc0dd 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 @@ -198,7 +198,7 @@ const AwsAccountTypeSelect = ({ ); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [input]); + }, [input, updatePolicy]); return ( <> @@ -341,7 +341,7 @@ const GcpAccountTypeSelect = ({ ); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [input]); + }, [input, updatePolicy]); return ( <> From b3b947248031633aab22087ae3377eb199042532 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Tue, 3 Oct 2023 08:36:30 -0600 Subject: [PATCH 010/170] [ML] Anomaly detection results functional tests: retry forecast chart check (#167820) ## Summary Fixes https://github.com/elastic/kibana/issues/164381 Flaky test runner build: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3279 This PR ensures enough time is given for the forecast chart to show up correctly by adding retries. ### Checklist Delete any items that are not applicable to this PR. - [ ] 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) - [ ] [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 --- .../forecasts.ts | 3 +-- .../test/functional/services/ml/forecast.ts | 21 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/forecasts.ts b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/forecasts.ts index 63f72381d0185..93ec331230a8a 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/forecasts.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/forecasts.ts @@ -42,8 +42,7 @@ export default function ({ getService }: FtrProviderContext) { describe('forecasts', function () { this.tags(['ml']); - // FLAKY: https://github.com/elastic/kibana/issues/164381 - describe.skip('with single metric job', function () { + describe('with single metric job', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); await ml.testResources.createIndexPatternIfNeeded('ft_farequote', '@timestamp'); diff --git a/x-pack/test/functional/services/ml/forecast.ts b/x-pack/test/functional/services/ml/forecast.ts index c26216c97adfe..8b131578fd65f 100644 --- a/x-pack/test/functional/services/ml/forecast.ts +++ b/x-pack/test/functional/services/ml/forecast.ts @@ -11,6 +11,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export function MachineLearningForecastProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); + const retry = getService('retry'); return { async assertForecastButtonExists() { @@ -32,14 +33,22 @@ export function MachineLearningForecastProvider({ getService }: FtrProviderConte }, async assertForecastChartElementsExists() { - await testSubjects.existOrFail(`mlForecastArea`, { - timeout: 30 * 1000, + await retry.tryForTime(3000, async () => { + await testSubjects.existOrFail(`mlForecastArea`, { + timeout: 30 * 1000, + }); }); - await testSubjects.existOrFail(`mlForecastValuesline`, { - timeout: 30 * 1000, + + await retry.tryForTime(3000, async () => { + await testSubjects.existOrFail(`mlForecastValuesline`, { + timeout: 30 * 1000, + }); }); - await testSubjects.existOrFail(`mlForecastMarkers`, { - timeout: 30 * 1000, + + await retry.tryForTime(3000, async () => { + await testSubjects.existOrFail(`mlForecastMarkers`, { + timeout: 30 * 1000, + }); }); }, From 8e7b2338ba414c58872d36973ab30813cd93cea2 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 3 Oct 2023 15:44:35 +0100 Subject: [PATCH 011/170] skip flaky suite (#167869) --- .../functional/test_suites/observability/cases/configure.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index a19ef4ebf2e4a..ef58b18181f7b 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -49,7 +49,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); }); - describe('Connectors', function () { + // FLAKY: https://github.com/elastic/kibana/issues/167869 + describe.skip('Connectors', function () { it('defaults the connector to none correctly', async () => { expect(await testSubjects.exists('dropdown-connector-no-connector')).to.be(true); }); From 43a04a4205ede340c6fba2b3b06a7a2b1ce5d855 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 3 Oct 2023 17:14:00 +0200 Subject: [PATCH 012/170] [ML] Transforms: Use `delete_dest_index` flag instead of ES call to delete destination index. (#166797) Part of #166796. Depends on https://github.com/elastic/elasticsearch/pull/99738. Uses the `delete_dest_index` flag instead of ES call to delete destination index in the transforms UI when deleting transforms. The PR also fixes some code related to destination indices for transforms and data frame analytics. A destination index can be just a single string. Before the properly typed transform APIs were available via `estypes`, we accidentally treated destination indices similar to source indices which might also be arrays of indices. --- .../common/get_destination_index.ts | 2 +- .../action_delete/use_delete_action.tsx | 4 +++- .../analytics_service/delete_analytics.ts | 4 +--- .../public/app/hooks/use_data_view_exists.ts | 2 +- .../public/app/hooks/use_delete_transform.tsx | 2 +- .../action_discover/use_action_discover.tsx | 9 ++------- .../transform_list/expanded_row.tsx | 6 ++---- .../transform/server/routes/api/transforms.ts | 20 ++++--------------- 8 files changed, 15 insertions(+), 34 deletions(-) diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_destination_index.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_destination_index.ts index 20de54fe54828..792c5d12a1923 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_destination_index.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/common/get_destination_index.ts @@ -8,4 +8,4 @@ import type { DataFrameAnalyticsConfig } from '@kbn/ml-data-frame-analytics-utils'; export const getDestinationIndex = (jobConfig: DataFrameAnalyticsConfig | undefined) => - (Array.isArray(jobConfig?.dest.index) ? jobConfig?.dest.index[0] : jobConfig?.dest.index) ?? ''; + jobConfig?.dest.index ?? ''; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_delete/use_delete_action.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_delete/use_delete_action.tsx index 01b6e3a3f50ad..1a828f6b6cdf0 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_delete/use_delete_action.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_delete/use_delete_action.tsx @@ -29,6 +29,8 @@ import { deleteActionNameText, DeleteActionName } from './delete_action_name'; import { JobType } from '../../../../../../../common/types/saved_objects'; +import { getDestinationIndex } from '../../../../common/get_destination_index'; + const DF_ANALYTICS_JOB_TYPE: JobType = 'data-frame-analytics'; type DataFrameAnalyticsListRowEssentials = Pick; @@ -51,7 +53,7 @@ export const useDeleteAction = (canDeleteDataFrameAnalytics: boolean) => { application: { capabilities }, } = useMlKibana().services; - const indexName = item?.config.dest.index ?? ''; + const indexName = getDestinationIndex(item?.config); const toastNotificationService = useToastNotificationService(); diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/services/analytics_service/delete_analytics.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/services/analytics_service/delete_analytics.ts index 535424650d1df..8929f39bea43c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/services/analytics_service/delete_analytics.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/services/analytics_service/delete_analytics.ts @@ -51,9 +51,7 @@ export const deleteAnalyticsAndDestIndex = async ( deleteDestIndexPattern: boolean, toastNotificationService: ToastNotificationService ) => { - const destinationIndex = Array.isArray(analyticsConfig.dest.index) - ? analyticsConfig.dest.index[0] - : analyticsConfig.dest.index; + const destinationIndex = analyticsConfig.dest.index; try { if (isDataFrameAnalyticsFailed(analyticsStats.state)) { await ml.dataFrameAnalytics.stopDataFrameAnalytics(analyticsConfig.id, true); diff --git a/x-pack/plugins/transform/public/app/hooks/use_data_view_exists.ts b/x-pack/plugins/transform/public/app/hooks/use_data_view_exists.ts index d74fa9c909a5d..b81a5e7f9eb25 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_data_view_exists.ts +++ b/x-pack/plugins/transform/public/app/hooks/use_data_view_exists.ts @@ -26,7 +26,7 @@ export const useDataViewExists = (items: TransformListRow[]) => { return false; } const config = items[0].config; - const indexName = Array.isArray(config.dest.index) ? config.dest.index[0] : config.dest.index; + const indexName = config.dest.index; if (indexName === undefined) { return false; diff --git a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx index a7ed779c47cc7..f88ef1e39d446 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx @@ -56,7 +56,7 @@ export const useDeleteIndexAndTargetIndex = (items: TransformListRow[]) => { useEffect(() => { if (dataViewExistsError !== null && items.length === 1) { const config = items[0].config; - const indexName = Array.isArray(config.dest.index) ? config.dest.index[0] : config.dest.index; + const indexName = config.dest.index; toastNotifications.addDanger( i18n.translate( diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/use_action_discover.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/use_action_discover.tsx index 24ee1f9dfe092..6d818c90ba7fc 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/use_action_discover.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/use_action_discover.tsx @@ -19,9 +19,6 @@ import { DiscoverActionName, } from './discover_action_name'; -const getDataViewTitleFromTargetIndex = (item: TransformListRow) => - Array.isArray(item.config.dest.index) ? item.config.dest.index.join(',') : item.config.dest.index; - export type DiscoverAction = ReturnType; export const useDiscoverAction = (forceDisable: boolean) => { const { @@ -48,8 +45,7 @@ export const useDiscoverAction = (forceDisable: boolean) => { (item: TransformListRow) => { const locator = share.url.locators.get(DISCOVER_APP_LOCATOR); if (!locator) return; - const dataViewTitle = getDataViewTitleFromTargetIndex(item); - const dataViewId = getDataViewIdByTitle(dataViewTitle); + const dataViewId = getDataViewIdByTitle(item.config.dest.index); locator.navigateSync({ indexPatternId: dataViewId, }); @@ -59,8 +55,7 @@ export const useDiscoverAction = (forceDisable: boolean) => { const dataViewExists = useCallback( (item: TransformListRow) => { - const dataViewTitle = getDataViewTitleFromTargetIndex(item); - const dataViewId = getDataViewIdByTitle(dataViewTitle); + const dataViewId = getDataViewIdByTitle(item.config.dest.index); return dataViewId !== undefined; }, [getDataViewIdByTitle] diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx index 079b3f72b59bd..0ab68c5481387 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx @@ -101,7 +101,7 @@ export const ExpandedRow: FC = ({ item, onAlertEdit, transformsStatsLoadi }, { title: 'transform_version', - description: item.config.version, + description: item.config.version ?? '', }, { title: 'description', @@ -120,9 +120,7 @@ export const ExpandedRow: FC = ({ item, onAlertEdit, transformsStatsLoadi }, { title: 'destination_index', - description: Array.isArray(item.config.dest.index) - ? item.config.dest.index[0] - : item.config.dest.index, + description: item.config.dest.index, }, { title: 'authorization', diff --git a/x-pack/plugins/transform/server/routes/api/transforms.ts b/x-pack/plugins/transform/server/routes/api/transforms.ts index 822441c07812b..80d44c0e907bf 100644 --- a/x-pack/plugins/transform/server/routes/api/transforms.ts +++ b/x-pack/plugins/transform/server/routes/api/transforms.ts @@ -677,9 +677,7 @@ async function deleteTransforms( transform_id: transformId, }); const transformConfig = body.transforms[0]; - destinationIndex = Array.isArray(transformConfig.dest.index) - ? transformConfig.dest.index[0] - : transformConfig.dest.index; + destinationIndex = transformConfig.dest.index; } catch (getTransformConfigError) { transformDeleted.error = getTransformConfigError.meta.body.error; results[transformId] = { @@ -692,19 +690,6 @@ async function deleteTransforms( continue; } } - // If user checks box to delete the destinationIndex associated with the job - if (destinationIndex && deleteDestIndex) { - try { - // If user does have privilege to delete the index, then delete the index - // if no permission then return 403 forbidden - await esClient.asCurrentUser.indices.delete({ - index: destinationIndex, - }); - destIndexDeleted.success = true; - } catch (deleteIndexError) { - destIndexDeleted.error = deleteIndexError.meta.body.error; - } - } // Delete the data view if there's a data view that matches the name of dest index if (destinationIndex && deleteDestDataView) { @@ -723,8 +708,11 @@ async function deleteTransforms( await esClient.asCurrentUser.transform.deleteTransform({ transform_id: transformId, force: shouldForceDelete && needToForceDelete, + // @ts-expect-error ES type needs to be updated + delete_dest_index: deleteDestIndex, }); transformDeleted.success = true; + destIndexDeleted.success = deleteDestIndex; } catch (deleteTransformJobError) { transformDeleted.error = deleteTransformJobError.meta.body.error; if (deleteTransformJobError.statusCode === 403) { From 2daa9dc3a7bb7bee19ac9936063275b94c6f1045 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 3 Oct 2023 16:20:07 +0100 Subject: [PATCH 013/170] skip flaky suite (#167175) --- test/functional/apps/dashboard/group2/dashboard_filter_bar.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts index da9660ac4f4cb..044339930ae16 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts @@ -193,7 +193,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('saved search filtering', function () { + // FLAKY: https://github.com/elastic/kibana/issues/167175 + describe.skip('saved search filtering', function () { before(async () => { await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); From 671158973949f3ae72e9708e2991ea5ee6ecc5f6 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 3 Oct 2023 16:21:32 +0100 Subject: [PATCH 014/170] skip flaky suite (#167812) --- x-pack/test/saved_object_tagging/functional/tests/create.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/saved_object_tagging/functional/tests/create.ts b/x-pack/test/saved_object_tagging/functional/tests/create.ts index 16c8958c0fa62..a2bde4ab579dc 100644 --- a/x-pack/test/saved_object_tagging/functional/tests/create.ts +++ b/x-pack/test/saved_object_tagging/functional/tests/create.ts @@ -15,7 +15,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const tagManagementPage = PageObjects.tagManagement; - describe('create tag', () => { + // FLAKY: https://github.com/elastic/kibana/issues/167812 + describe.skip('create tag', () => { let tagModal: typeof tagManagementPage['tagModal']; before(async () => { From 7550f9e0de83d3e785661459a03796e8cb3118f0 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 3 Oct 2023 09:24:29 -0600 Subject: [PATCH 015/170] [inspector] rename clusters tab to 'Clustesrs and shards' (#167814) Updated figma designs have change label to 'Clustesrs and shards' Screenshot 2023-10-02 at 11 24 42 AM --- .../public/views/requests/components/request_details.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/inspector/public/views/requests/components/request_details.tsx b/src/plugins/inspector/public/views/requests/components/request_details.tsx index 9c1b4d3d51ba9..7677cca66b369 100644 --- a/src/plugins/inspector/public/views/requests/components/request_details.tsx +++ b/src/plugins/inspector/public/views/requests/components/request_details.tsx @@ -36,7 +36,7 @@ const DETAILS: DetailViewData[] = [ { name: 'Clusters', label: i18n.translate('inspector.requests.clustersTabLabel', { - defaultMessage: 'Clusters', + defaultMessage: 'Clusters and shards', }), component: ClustersView, }, From 0fc24f4181b70c88bc7cacbe0d295b6dd5255438 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Tue, 3 Oct 2023 09:14:26 -0700 Subject: [PATCH 016/170] [DOCS] Move preconfigured ServiceNow connector details (#166202) --- .../action-types/servicenow-itom.asciidoc | 60 +------ .../action-types/servicenow-sir.asciidoc | 66 +------- .../action-types/servicenow.asciidoc | 66 +------- .../pre-configured-connectors.asciidoc | 155 +++++++++++++++++- docs/settings/alert-action-settings.asciidoc | 33 +++- 5 files changed, 197 insertions(+), 183 deletions(-) diff --git a/docs/management/connectors/action-types/servicenow-itom.asciidoc b/docs/management/connectors/action-types/servicenow-itom.asciidoc index 1549949cd23b9..3f104006cd1e7 100644 --- a/docs/management/connectors/action-types/servicenow-itom.asciidoc +++ b/docs/management/connectors/action-types/servicenow-itom.asciidoc @@ -3,6 +3,10 @@ ++++ {sn-itom} ++++ +:frontmatter-description: Add a connector that can create {sn} events. +:frontmatter-tags-products: [kibana] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The {sn-itom} connector uses the https://docs.servicenow.com/bundle/rome-it-operations-management/page/product/event-management/task/send-events-via-web-service.html[event API] @@ -79,62 +83,6 @@ JWT Key ID:: The key ID assigned to the JWT verifier map of your OAuth applicati Private Key:: The RSA private key generated during setup. Private Key Password:: The password for the RSA private key generated during setup, if set. -[float] -[[preconfigured-servicenow-itom-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. -For example: - -Connector using Basic Authentication -[source,text] --- -xpack.actions.preconfigured: - my-servicenow-itom: - name: preconfigured-servicenow-connector-type - actionTypeId: .servicenow-itom - config: - apiUrl: https://example.service-now.com/ - secrets: - username: testuser - password: passwordkeystorevalue --- - -Connector using OAuth -[source,text] --- - my-servicenow: - name: preconfigured-oauth-servicenow-connector-type - actionTypeId: .servicenow-itom - config: - apiUrl: https://example.service-now.com/ - usesTableApi: false - isOAuth: true - userIdentifierValue: testuser@email.com - clientId: abcdefghijklmnopqrstuvwxyzabcdef - jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba - secrets: - clientSecret: secretsecret - privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- --- - -Config defines information for the connector type. - -`apiUrl`:: An address that corresponds to *URL*. -`isOAuth`:: A boolean that corresponds to *Is OAuth* and indicates if the connector uses Basic Authentication or OAuth. -`userIdentifierValue`:: A string that corresponds to *User Identifier*. Required if `isOAuth` is set to `true`. -`clientId`:: A string that corresponds to *Client ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. -`jwtKeyId`:: A string that corresponds to *JWT Key ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. - -Secrets defines sensitive information for the connector type. - -`username`:: A string that corresponds to *Username*. Required if `isOAuth` is set to `false`. -`password`:: A string that corresponds to *Password*. Should be stored in the <>. Required if `isOAuth` is set to `false`. -`clientSecret`:: A string that corresponds to *Client Secret*. Required if `isOAuth` is set to `true`. -`privateKey`:: A string that corresponds to *Private Key*. Required if `isOAuth` is set to `true`. -`privateKeyPassword`:: A string that corresponds to *Private Key Password*. - [float] [[servicenow-itom-action-configuration]] === Test connectors diff --git a/docs/management/connectors/action-types/servicenow-sir.asciidoc b/docs/management/connectors/action-types/servicenow-sir.asciidoc index 0fc96f9baa85c..30ea222aa4e14 100644 --- a/docs/management/connectors/action-types/servicenow-sir.asciidoc +++ b/docs/management/connectors/action-types/servicenow-sir.asciidoc @@ -3,6 +3,10 @@ ++++ {sn-sir} ++++ +:frontmatter-description: Add a connector that can create {sn} security incidents. +:frontmatter-tags-products: [kibana] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The {sn-sir} connector uses the https://developer.servicenow.com/dev.do#!/reference/api/sandiego/rest/c_ImportSetAPI[import set API] @@ -122,68 +126,6 @@ JWT Key ID:: The key ID assigned to the JWT verifier map of your OAuth applicati Private Key:: The RSA private key generated during setup. Private Key Password:: The password for the RSA private key generated during setup, if set. -[float] -[[preconfigured-servicenow-sir-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. -For example: - -Connector using Basic Authentication -[source,text] --- -xpack.actions.preconfigured: - my-servicenow-sir: - name: preconfigured-servicenow-connector-type - actionTypeId: .servicenow-sir - config: - apiUrl: https://example.service-now.com/ - usesTableApi: false - secrets: - username: testuser - password: passwordkeystorevalue --- - -Connector using OAuth -[source,text] --- -xpack.actions.preconfigured: - my-servicenow: - name: preconfigured-oauth-servicenow-connector-type - actionTypeId: .servicenow-sir - config: - apiUrl: https://example.service-now.com/ - usesTableApi: false - isOAuth: true - userIdentifierValue: testuser@email.com - clientId: abcdefghijklmnopqrstuvwxyzabcdef - jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba - secrets: - clientSecret: secretsecret - privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- --- - -Config defines information for the connector type. - -`apiUrl`:: An address that corresponds to *URL*. -`usesTableApi`:: A boolean that indicates if the connector uses the Table API or the Import Set API. - -NOTE: If `usesTableApi` is set to false, the Elastic application should be installed in {sn}. - -`isOAuth`:: A boolean that corresponds to *Is OAuth* and indicates if the connector uses Basic Authentication or OAuth. -`userIdentifierValue`:: A string that corresponds to *User Identifier*. Required if `isOAuth` is set to `true`. -`clientId`:: A string that corresponds to *Client ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. -`jwtKeyId`:: A string that corresponds to *JWT Key ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. - -Secrets defines sensitive information for the connector type. - -`username`:: A string that corresponds to *Username*. Required if `isOAuth` is set to `false`. -`password`:: A string that corresponds to *Password*. Should be stored in the <>. Required if `isOAuth` is set to `false`. -`clientSecret`:: A string that corresponds to *Client Secret*. Required if `isOAuth` is set to `true`. -`privateKey`:: A string that corresponds to *Private Key*. Required if `isOAuth` is set to `true`. -`privateKeyPassword`:: A string that corresponds to *Private Key Password*. - [float] [[servicenow-sir-action-configuration]] === Test connectors diff --git a/docs/management/connectors/action-types/servicenow.asciidoc b/docs/management/connectors/action-types/servicenow.asciidoc index 2151100451232..f3c636df29b6b 100644 --- a/docs/management/connectors/action-types/servicenow.asciidoc +++ b/docs/management/connectors/action-types/servicenow.asciidoc @@ -3,6 +3,10 @@ ++++ {sn-itsm} ++++ +:frontmatter-description: Add a connector that can create {sn} incidents. +:frontmatter-tags-products: [kibana] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The {sn-itsm} connector uses the https://developer.servicenow.com/dev.do#!/reference/api/sandiego/rest/c_ImportSetAPI[import set API] @@ -206,68 +210,6 @@ JWT Key ID:: The key ID assigned to the JWT Verifier Map of your OAuth applicati Private Key:: The RSA private key generated during setup. Private Key Password:: The password for the RSA private key generated during setup, if set. -[float] -[[preconfigured-servicenow-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. -For example: - -Connector using Basic Authentication -[source,text] --- -xpack.actions.preconfigured: - my-servicenow: - name: preconfigured-servicenow-connector-type - actionTypeId: .servicenow - config: - apiUrl: https://example.service-now.com/ - usesTableApi: false - secrets: - username: testuser - password: passwordkeystorevalue --- - -Connector using OAuth -[source,text] --- -xpack.actions.preconfigured: - my-servicenow: - name: preconfigured-oauth-servicenow-connector-type - actionTypeId: .servicenow - config: - apiUrl: https://example.service-now.com/ - usesTableApi: false - isOAuth: true - userIdentifierValue: testuser@email.com - clientId: abcdefghijklmnopqrstuvwxyzabcdef - jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba - secrets: - clientSecret: secretsecret - privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- --- - -Config defines information for the connector type. - -`apiUrl`:: An address that corresponds to *URL*. -`usesTableApi`:: A boolean that indicates if the connector uses the Table API or the Import Set API. - -NOTE: If `usesTableApi` is set to false, the Elastic application should be installed in {sn}. - -`isOAuth`:: A boolean that corresponds to *Is OAuth* and indicates if the connector uses Basic Authentication or OAuth. -`userIdentifierValue`:: A string that corresponds to *User Identifier*. Required if `isOAuth` is set to `true`. -`clientId`:: A string that corresponds to *Client ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. -`jwtKeyId`:: A string that corresponds to *JWT Key ID*, used for OAuth authentication. Required if `isOAuth` is set to `true`. - -Secrets defines sensitive information for the connector type. - -`username`:: A string that corresponds to *Username*. Required if `isOAuth` is set to `false`. -`password`:: A string that corresponds to *Password*. Should be stored in the <>. Required if `isOAuth` is set to `false`. -`clientSecret`:: A string that corresponds to *Client Secret*. Required if `isOAuth` is set to `true`. -`privateKey`:: A string that corresponds to *Private Key*. Required if `isOAuth` is set to `true`. -`privateKeyPassword`:: A string that corresponds to *Private Key Password*. - [float] [[servicenow-action-configuration]] === Test connectors diff --git a/docs/management/connectors/pre-configured-connectors.asciidoc b/docs/management/connectors/pre-configured-connectors.asciidoc index 79b4e331fa19a..6e6694e8a839d 100644 --- a/docs/management/connectors/pre-configured-connectors.asciidoc +++ b/docs/management/connectors/pre-configured-connectors.asciidoc @@ -117,6 +117,9 @@ Index names must start with `kibana-alert-history-` to take advantage of the pre * <> * <> * <> +* <> +* <> +* <> * <> * <> * <> @@ -442,6 +445,155 @@ xpack.actions.preconfigured: actionTypeId: .server-log -- +[float] +[[preconfigured-servicenow-itom-configuration]] +==== {sn-itom} connectors + +The following example creates a <> with basic authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow-itom: + name: preconfigured-servicenow-connector-type + actionTypeId: .servicenow-itom + config: + apiUrl: https://example.service-now.com/ <1> + secrets: + username: testuser <2> + password: passwordkeystorevalue <3> +-- +<1> The ServiceNow instance URL. +<2> A user name. +<3> A password. NOTE: This value should be stored in the <>. + +The following example creates a {sn-itom} connector with OAuth authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow: + name: preconfigured-oauth-servicenow-connector-type + actionTypeId: .servicenow-itom + config: + apiUrl: https://example.service-now.com/ + isOAuth: true <1> + userIdentifierValue: testuser@email.com <2> + clientId: abcdefghijklmnopqrstuvwxyzabcdef <3> + jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba <4> + secrets: + clientSecret: secretsecret <5> + privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- <6> +-- +<1> Specifies whether the connector uses basic or OAuth authentication. +<2> The user identifier. +<3> The client identifier assigned to your OAuth application. +<4> The key identifier assigned to the JWT verifier map of your OAuth application. +<5> The client secret assigned to your OAuth application. +<6> The RSA private key. If it has a password, you must also provide `privateKeyPassword`. + +[float] +[[preconfigured-servicenow-configuration]] +==== {sn-itsm} connectors + +The following example creates a <> with basic authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow: + name: preconfigured-servicenow-connector-type + actionTypeId: .servicenow + config: + apiUrl: https://example.service-now.com/ <1> + usesTableApi: false <2> + secrets: + username: testuser <3> + password: passwordkeystorevalue <4> +-- +<1> The ServiceNow instance URL. +<2> Specifies whether the connector uses the Table API or the Import Set API. If `usesTableApi` is `false`, the Elastic application should be installed in {sn}. +<3> The user name. +<4> The password. NOTE: This value should be stored in the <>. + +The following example creates a {sn-itsm} connector with OAuth authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow: + name: preconfigured-oauth-servicenow-connector-type + actionTypeId: .servicenow + config: + apiUrl: https://example.service-now.com/ + usesTableApi: false + isOAuth: true <1> + userIdentifierValue: testuser@email.com <2> + clientId: abcdefghijklmnopqrstuvwxyzabcdef <3> + jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba <4> + secrets: + clientSecret: secretsecret <5> + privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- <6> +-- +<1> Specifies whether the connector uses basic or OAuth authentication. +<2> The user identifier. +<3> The client identifier assigned to your OAuth application. +<4> The key ID assigned to the JWT verifier map of your OAuth application. +<5> The client secret assigned to the OAuth application. +<6> The RSA private key. If it has a password, you must also provide `privateKeyPassword`. + +[float] +[[preconfigured-servicenow-sir-configuration]] +==== {sn-sir} connectors + +The following example creates a <> with basic authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow-sir: + name: preconfigured-servicenow-connector-type + actionTypeId: .servicenow-sir + config: + apiUrl: https://example.service-now.com/ <1> + usesTableApi: false <2> + secrets: + username: testuser <3> + password: passwordkeystorevalue <4> +-- +<1> The ServiceNow instance URL. +<2> Specifies whether the connector uses the Table API or the Import Set API. If `usesTableApi` is false, the Elastic application should be installed in {sn}. +<3> The user name. +<4> The password. NOTE: This value should be stored in the <>. + +The following example creates a {sn-sir} connector with OAuth authentication: + +[source,text] +-- +xpack.actions.preconfigured: + my-servicenow: + name: preconfigured-oauth-servicenow-connector-type + actionTypeId: .servicenow-sir + config: + apiUrl: https://example.service-now.com/ + usesTableApi: false + isOAuth: true <1> + userIdentifierValue: testuser@email.com <2> + clientId: abcdefghijklmnopqrstuvwxyzabcdef <3> + jwtKeyId: fedcbazyxwvutsrqponmlkjihgfedcba <4> + secrets: + clientSecret: secretsecret <5> + privateKey: -----BEGIN RSA PRIVATE KEY-----\nprivatekeyhere\n-----END RSA PRIVATE KEY----- <6> +-- +<1> Specifies whether the connector uses basic or OAuth authentication. +<2> The user identifier. +<3> The client identifier assigned to the OAuth application. +<4> The key ID assigned to the JWT verifier map of your OAuth application. +<5> The client secret assigned to the OAuth application. +<6> The RSA private key. If it has a password, you must also specify +`privateKeyPassword`. + + [float] [[preconfigured-slack-configuration]] ==== Slack connectors @@ -605,7 +757,6 @@ xpack.actions.preconfigured: NOTE: SSL authentication is not supported in preconfigured webhook connectors. - [float] [[preconfigured-cases-webhook-configuration]] ==== {webhook-cm} connectors @@ -664,7 +815,7 @@ The following example creates an <> wit [source,text] -- xpack.actions.preconfigured: -my-xmatters: + my-xmatters: name: preconfigured-xmatters-connector-type actionTypeId: .xmatters config: diff --git a/docs/settings/alert-action-settings.asciidoc b/docs/settings/alert-action-settings.asciidoc index 76b1ebadc98d1..4312d2825a9d4 100644 --- a/docs/settings/alert-action-settings.asciidoc +++ b/docs/settings/alert-action-settings.asciidoc @@ -272,6 +272,7 @@ A configuration URL that varies by connector: * For a <>, specifies the Jira instance URL. * For an <>, specifies the {opsgenie} URL. For example, `https://api.opsgenie.com` or `https://api.eu.opsgenie.com`. * For a <>, specifies the PagerDuty event URL. Defaults to `https://events.pagerduty.com/v2/enqueue`. +* For a <>, <>, or <> specifies the ServiceNow instance URL. * For a <>, specifies the {swimlane} instance URL. NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the hostname in the URL is added to the allowed hosts. @@ -285,7 +286,12 @@ An application ID that varies by connector: -- `xpack.actions.preconfigured..config.clientId`:: -For an <>, specifies a GUID format value that corresponds to the client ID, which is a part of OAuth 2.0 client credentials authentication. +A client identifier that varies by connector: ++ +-- +* For an <>, specifies a GUID format value that corresponds to the client ID, which is a part of OAuth 2.0 client credentials authentication. +* For a <>, <>, or <> specifies the client identifier assigned to the OAuth application. +-- `xpack.actions.preconfigured..config.configUrl`:: For an <> with basic authentication, specifies the request URL for the Elastic Alerts trigger in xMatters. @@ -350,6 +356,12 @@ For an <>, specifies the host name of the ser `xpack.actions.preconfigured..config.index`:: For an <>, specifies the {es} index. +`xpack.actions.preconfigured..config.isOAuth`:: +For a <>, <>, or <>, specifies whether to use basic or OAuth authentication. + +`xpack.actions.preconfigured..config.jwtKeyId`:: +For a <>, <>, or <>, specifies the key ID assigned to the JWT verifier map of your OAuth application. It is required when `xpack.actions.preconfigured..config.isOAuth` is `true`. + `xpack.actions.preconfigured..config.mappings`:: For a <>, specifies field mappings. @@ -427,9 +439,16 @@ A configuration URL that varies by connector: NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure this hostname is added to the allowed hosts. -- +`xpack.actions.preconfigured..config.userIdentifierValue`:: +For a <>, <>, or <>, specifies the user identifier. It is required when required when `xpack.actions.preconfigured..config.isOAuth` is `true`. + `xpack.actions.preconfigured..config.usesBasic`:: For an <>, specifies whether it uses HTTP basic authentication. Defaults to `true`. +`xpack.actions.preconfigured..config.usesTableApi`:: +For a <> or <>, specifies whether the connector uses the Table API or the Import Set API. +If set to `false`, the Elastic application should be installed in ServiceNow. + `xpack.actions.preconfigured..config.viewIncidentUrl`:: For a <>, specifies a URL string with either the external service ID or external service title Mustache variable to view a case in the external system. @@ -466,6 +485,7 @@ A client secret that varies by connector: + -- * For an <>, specifies the client secret that you generated for your app in the app registration portal. It is required when the email service is `exchange_server`, which uses OAuth 2.0 client credentials authentication. +* For a <>, <>, or <>, specifies the client secret assigned to the OAuth application. It is required when `xpack.actions.preconfigured..config.isOAuth` is `true`. NOTE: The client secret must be URL-encoded. -- @@ -482,10 +502,18 @@ An email address that varies by connector: A password secret that varies by connector: + -- + * For an <>, <>, or <>, specifies a password that is required when `xpack.actions.preconfigured..config.hasAuth` is `true`. +* For a <>, <>, or <>, specifies a password that is required when `xpack.actions.preconfigured..config.isOAuth` is `false`. * For an <>, specifies a password that is required when `xpack.actions.preconfigured..config.usesBasic` is `true`. -- +`xpack.actions.preconfigured..secrets.privateKey`:: +For a <>, <>, or <>, specifies the RSA private key. It is required when `xpack.actions.preconfigured..config.isOAuth` is `true`. + +`xpack.actions.preconfigured..secrets.privateKeyPassword`:: +For a <>, <>, or <>, specifies the password for the RSA private key. + `xpack.actions.preconfigured..secrets.routingKey`:: For a <>, specifies the 32 character PagerDuty Integration Key for an integration on a service, also referred to as the routing key. @@ -523,6 +551,9 @@ For a <>, specifies the Slack webhook URL. NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the hostname is added to the allowed hosts. -- +`xpack.actions.preconfigured..secrets.username`:: +For a <>, <>, or <>, specifies a user name that is required when `xpack.actions.preconfigured..config.isOAuth` is `false`. + [float] [[alert-settings]] === Alerting settings From 9f2cac09c8697fbcc17a3aa2f88006e5d42b6b82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Tue, 3 Oct 2023 19:15:30 +0200 Subject: [PATCH 017/170] [Console] Regenerate autocomplete definitions (#167431) --- .../lib/spec_definitions/json/generated/bulk.json | 2 ++ .../json/generated/cluster.get_settings.json | 2 +- .../json/generated/cluster.pending_tasks.json | 2 +- .../json/generated/cluster.put_settings.json | 2 +- .../json/generated/cluster.stats.json | 2 +- .../lib/spec_definitions/json/generated/create.json | 2 ++ .../lib/spec_definitions/json/generated/delete.json | 2 ++ .../json/generated/delete_by_query.json | 7 ++++++- .../json/generated/delete_script.json | 2 ++ .../spec_definitions/json/generated/eql.delete.json | 2 +- .../lib/spec_definitions/json/generated/eql.get.json | 2 +- .../json/generated/eql.get_status.json | 2 +- .../spec_definitions/json/generated/eql.search.json | 2 +- .../lib/spec_definitions/json/generated/explain.json | 2 +- .../json/generated/graph.explore.json | 2 +- .../lib/spec_definitions/json/generated/index.json | 2 ++ .../json/generated/indices.add_block.json | 2 +- .../json/generated/indices.analyze.json | 2 +- .../json/generated/indices.clone.json | 3 +++ .../json/generated/indices.close.json | 5 ++++- .../json/generated/indices.create.json | 5 ++++- .../json/generated/indices.delete.json | 2 ++ .../json/generated/indices.delete_alias.json | 2 ++ .../json/generated/indices.delete_data_lifecycle.json | 2 +- .../json/generated/indices.delete_template.json | 4 +++- .../json/generated/indices.disk_usage.json | 4 ++-- .../json/generated/indices.downsample.json | 2 +- .../json/generated/indices.exists_template.json | 2 +- .../generated/indices.explain_data_lifecycle.json | 2 +- .../json/generated/indices.flush.json | 2 +- .../json/generated/indices.get_data_lifecycle.json | 2 +- .../json/generated/indices.get_mapping.json | 1 + .../json/generated/indices.get_template.json | 3 ++- .../spec_definitions/json/generated/indices.open.json | 3 +++ .../json/generated/indices.put_alias.json | 2 ++ .../json/generated/indices.put_data_lifecycle.json | 4 +++- .../json/generated/indices.put_mapping.json | 2 ++ .../json/generated/indices.put_template.json | 1 + .../json/generated/indices.refresh.json | 2 +- .../json/generated/indices.rollover.json | 5 ++++- .../json/generated/indices.shrink.json | 5 ++++- .../json/generated/indices.split.json | 5 ++++- .../json/generated/indices.unfreeze.json | 6 +++++- .../json/generated/indices.update_aliases.json | 2 ++ .../json/generated/ingest.delete_pipeline.json | 2 ++ .../json/generated/ingest.geo_ip_stats.json | 2 +- .../json/generated/ingest.processor_grok.json | 2 +- .../json/generated/ingest.put_pipeline.json | 2 +- .../spec_definitions/json/generated/license.get.json | 2 +- .../json/generated/nodes.reload_secure_settings.json | 1 + .../spec_definitions/json/generated/nodes.usage.json | 1 + .../spec_definitions/json/generated/put_script.json | 2 ++ .../lib/spec_definitions/json/generated/reindex.json | 9 +++++++-- .../json/generated/rollup.stop_job.json | 1 + .../spec_definitions/json/generated/search_mvt.json | 2 +- .../json/generated/security.clear_api_key_cache.json | 2 +- .../json/generated/security.has_privileges.json | 2 +- .../json/generated/sql.clear_cursor.json | 2 +- .../json/generated/sql.delete_async.json | 2 +- .../json/generated/sql.get_async.json | 2 +- .../json/generated/sql.get_async_status.json | 2 +- .../spec_definitions/json/generated/sql.query.json | 2 +- .../json/generated/sql.translate.json | 2 +- ...onyms.delete.json => synonyms.delete_synonym.json} | 4 ++-- ....delete.json => synonyms.delete_synonym_rule.json} | 4 ++-- .../{synonyms.get.json => synonyms.get_synonym.json} | 8 +++++--- ...m_rule.get.json => synonyms.get_synonym_rule.json} | 4 ++-- ..._sets.get.json => synonyms.get_synonyms_sets.json} | 6 ++++-- .../{synonyms.put.json => synonyms.put_synonym.json} | 4 ++-- ...m_rule.put.json => synonyms.put_synonym_rule.json} | 4 ++-- .../spec_definitions/json/generated/tasks.get.json | 3 ++- .../json/generated/update_by_query.json | 11 +++++++++-- .../json/generated/update_by_query_rethrottle.json | 4 +++- .../{synonyms.put.json => synonyms.put_synonym.json} | 2 +- ...m_rule.put.json => synonyms.put_synonym_rule.json} | 2 +- 75 files changed, 150 insertions(+), 67 deletions(-) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonyms.delete.json => synonyms.delete_synonym.json} (87%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonym_rule.delete.json => synonyms.delete_synonym_rule.json} (84%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonyms.get.json => synonyms.get_synonym.json} (82%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonym_rule.get.json => synonyms.get_synonym_rule.json} (84%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonyms_sets.get.json => synonyms.get_synonyms_sets.json} (85%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonyms.put.json => synonyms.put_synonym.json} (88%) rename src/plugins/console/server/lib/spec_definitions/json/generated/{synonym_rule.put.json => synonyms.put_synonym_rule.json} (84%) rename src/plugins/console/server/lib/spec_definitions/json/overrides/{synonyms.put.json => synonyms.put_synonym.json} (83%) rename src/plugins/console/server/lib/spec_definitions/json/overrides/{synonym_rule.put.json => synonyms.put_synonym_rule.json} (67%) diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/bulk.json b/src/plugins/console/server/lib/spec_definitions/json/generated/bulk.json index b2304f6820209..863a6e6189d77 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/bulk.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/bulk.json @@ -16,10 +16,12 @@ "_source_excludes": [], "_source_includes": [], "timeout": [ + "1m", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.get_settings.json b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.get_settings.json index fece78e78a957..d9dac49f2ae8a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.get_settings.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.get_settings.json @@ -27,7 +27,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/cluster-get-settings.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.pending_tasks.json b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.pending_tasks.json index de56bdd39beb9..b6dcc75a38d3b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.pending_tasks.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.pending_tasks.json @@ -21,7 +21,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/cluster-pending.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_settings.json b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_settings.json index 45a00c8c9264b..7a9e5bcf5d313 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_settings.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_settings.json @@ -26,7 +26,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/cluster-update-settings.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.stats.json b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.stats.json index afa73eb2e247a..b8ec786416310 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.stats.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.stats.json @@ -21,7 +21,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/cluster-stats.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/create.json b/src/plugins/console/server/lib/spec_definitions/json/generated/create.json index 8df30b59b667d..bff286eb029fd 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/create.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/create.json @@ -13,6 +13,7 @@ ], "routing": "", "timeout": [ + "1m", "-1", "0" ], @@ -24,6 +25,7 @@ "force" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/delete.json index ba53dcd65a5a9..0267f7191b44a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/delete.json @@ -14,6 +14,7 @@ ], "routing": "", "timeout": [ + "1m", "-1", "0" ], @@ -25,6 +26,7 @@ "force" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/delete_by_query.json b/src/plugins/console/server/lib/spec_definitions/json/generated/delete_by_query.json index 071071d4255b0..f4b0048b7c72a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/delete_by_query.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/delete_by_query.json @@ -38,7 +38,9 @@ "-1", "0" ], - "scroll_size": "", + "scroll_size": [ + "1000" + ], "search_timeout": [ "-1", "0" @@ -48,17 +50,20 @@ "dfs_query_then_fetch" ], "slices": [ + "1", "auto" ], "sort": "", "stats": "", "terminate_after": "", "timeout": [ + "1m", "-1", "0" ], "version": "__flag__", "wait_for_active_shards": [ + "1", "all", "index-setting" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/delete_script.json b/src/plugins/console/server/lib/spec_definitions/json/generated/delete_script.json index 838b35c4049e2..cf71108e29add 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/delete_script.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/delete_script.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.delete.json index 03f4d173141f4..1273848309b56 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.delete.json @@ -15,7 +15,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get.json index 5fac8429f3660..78e7f48069cb8 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get.json @@ -23,7 +23,7 @@ "documentation": " https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-async-eql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get_status.json b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get_status.json index b814a29e51d4e..74683e246654a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get_status.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.get_status.json @@ -15,7 +15,7 @@ "documentation": " https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-async-eql-status-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.search.json b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.search.json index cddd1ed088a8a..77cd26f4989ab 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/eql.search.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/eql.search.json @@ -35,7 +35,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/explain.json b/src/plugins/console/server/lib/spec_definitions/json/generated/explain.json index 759d8231be36f..a45b7b8174227 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/explain.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/explain.json @@ -31,7 +31,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/search-explain.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/graph.explore.json b/src/plugins/console/server/lib/spec_definitions/json/generated/graph.explore.json index 681bb8d255d1a..a35cac6b59b49 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/graph.explore.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/graph.explore.json @@ -18,7 +18,7 @@ "patterns": [ "{index}/_graph/explore" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/graph-explore-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/graph-explore-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/index.json b/src/plugins/console/server/lib/spec_definitions/json/generated/index.json index 6773c25aa6b2a..a39a0aa7c2162 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/index.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/index.json @@ -19,6 +19,7 @@ ], "routing": "", "timeout": [ + "1m", "-1", "0" ], @@ -30,6 +31,7 @@ "force" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.add_block.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.add_block.json index c7b876c42b21c..07c9950394e5d 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.add_block.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.add_block.json @@ -40,7 +40,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules-blocks.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.analyze.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.analyze.json index 305e8e21aa773..c9d523a77873b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.analyze.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.analyze.json @@ -14,7 +14,7 @@ "_analyze", "{index}/_analyze" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-analyze.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-analyze.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.clone.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.clone.json index 0c1203ec256bc..4a80c853cb679 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.clone.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.clone.json @@ -6,14 +6,17 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.close.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.close.json index 9b06b6ce40b91..24d156e636b37 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.close.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.close.json @@ -15,14 +15,17 @@ ], "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] @@ -33,7 +36,7 @@ "patterns": [ "{index}/_close" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-close.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.create.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.create.json index f5925f9311e93..e8f1699416f25 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.create.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.create.json @@ -6,14 +6,17 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] @@ -24,7 +27,7 @@ "patterns": [ "{index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-create-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-create-index.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete.json index 0d8f7dc354559..845b9e60b861e 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete.json @@ -15,10 +15,12 @@ ], "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json index dfc26fc89d24c..fdff5139506fd 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_data_lifecycle.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_data_lifecycle.json index a73fb1be20dc7..73b6ce6d5916b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_data_lifecycle.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_data_lifecycle.json @@ -27,7 +27,7 @@ "patterns": [ "_data_stream/{name}/_lifecycle" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/dlm-delete-lifecycle.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams-delete-lifecycle.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_template.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_template.json index 3d51659ef7600..99e379a038b9f 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_template.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.delete_template.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] @@ -23,7 +25,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-templates.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.disk_usage.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.disk_usage.json index 49eadca2f194f..8b83b0f64dd51 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.disk_usage.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.disk_usage.json @@ -23,10 +23,10 @@ "patterns": [ "{index}/_disk_usage" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-disk-usage.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-disk-usage.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.downsample.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.downsample.json index a51b465f964d0..c3752ef1c2ce0 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.downsample.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.downsample.json @@ -12,7 +12,7 @@ "patterns": [ "{index}/_downsample/{target_index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-rollup.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-downsample-data-stream.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.exists_template.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.exists_template.json index adc9c7a6ddb98..ecfbd25d0b60d 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.exists_template.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.exists_template.json @@ -21,7 +21,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-templates.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.explain_data_lifecycle.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.explain_data_lifecycle.json index 0869814bc94d9..ea5cbbc1d74ce 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.explain_data_lifecycle.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.explain_data_lifecycle.json @@ -17,7 +17,7 @@ "patterns": [ "{index}/_lifecycle/explain" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/dlm-explain-lifecycle.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams-explain-lifecycle.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.flush.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.flush.json index d021851331d8e..263eae37c6435 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.flush.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.flush.json @@ -25,7 +25,7 @@ "_flush", "{index}/_flush" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-flush.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-flush.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle.json index f774ae29c048d..a76f0214dba7c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle.json @@ -20,7 +20,7 @@ "patterns": [ "_data_stream/{name}/_lifecycle" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/dlm-get-lifecycle.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams-get-lifecycle.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json index 561368173d057..46c2425b1ceb8 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json @@ -16,6 +16,7 @@ "ignore_unavailable": "__flag__", "local": "__flag__", "master_timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_template.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_template.json index 2926f21a08dce..9556552da5c9c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_template.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.get_template.json @@ -8,6 +8,7 @@ "flat_settings": "__flag__", "local": "__flag__", "master_timeout": [ + "30s", "-1", "0" ] @@ -22,7 +23,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-templates.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.open.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.open.json index 0132181928b5b..0125fc7f4d729 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.open.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.open.json @@ -15,14 +15,17 @@ ], "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_alias.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_alias.json index 741d0cee9fd0d..fe8044e5f0834 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_alias.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_alias.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_data_lifecycle.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_data_lifecycle.json index 03536defd4bbe..9812babcf68f5 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_data_lifecycle.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_data_lifecycle.json @@ -13,10 +13,12 @@ "none" ], "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] @@ -27,7 +29,7 @@ "patterns": [ "_data_stream/{name}/_lifecycle" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/dlm-put-lifecycle.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams-put-lifecycle.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json index 381559aff4624..f9c661b283e3c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json @@ -15,10 +15,12 @@ ], "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_template.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_template.json index e2583840f4199..79d1b509f3a87 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_template.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.put_template.json @@ -13,6 +13,7 @@ "0" ], "timeout": [ + "30s", "-1", "0" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.refresh.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.refresh.json index b4dfd2893db22..8e631a9a4b567 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.refresh.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.refresh.json @@ -26,7 +26,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-refresh.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.rollover.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.rollover.json index 5c29c31eb2b7b..a5db7cf65966b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.rollover.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.rollover.json @@ -7,14 +7,17 @@ "pretty": "__flag__", "dry_run": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] @@ -26,7 +29,7 @@ "{alias}/_rollover", "{alias}/_rollover/{new_index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-rollover-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-rollover-index.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.shrink.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.shrink.json index d1d98561a2f7b..82b5854dd4642 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.shrink.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.shrink.json @@ -6,14 +6,17 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] @@ -25,7 +28,7 @@ "patterns": [ "{index}/_shrink/{target}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-shrink-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-shrink-index.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.split.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.split.json index 156fef6d2ea7c..bd9ebf0b1097c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.split.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.split.json @@ -6,14 +6,17 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ] @@ -25,7 +28,7 @@ "patterns": [ "{index}/_split/{target}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-split-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-split-index.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json index a55bbaadfadf0..9b9789d3d9772 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json @@ -15,14 +15,18 @@ ], "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], - "wait_for_active_shards": "" + "wait_for_active_shards": [ + "1" + ] }, "methods": [ "POST" diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.update_aliases.json b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.update_aliases.json index dfd0b52dafa32..5044968a4f593 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/indices.update_aliases.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/indices.update_aliases.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.delete_pipeline.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.delete_pipeline.json index 676940ce9ed05..c92d22288dd54 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.delete_pipeline.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.delete_pipeline.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.geo_ip_stats.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.geo_ip_stats.json index 071ce1b5e89fd..1cd9132dd7d15 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.geo_ip_stats.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.geo_ip_stats.json @@ -12,7 +12,7 @@ "patterns": [ "_ingest/geoip/stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/geoip-stats-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/geoip-processor.html", "availability": { "stack": true, "serverless": false diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.processor_grok.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.processor_grok.json index 0d1c76a56eef6..6cc97c5525167 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.processor_grok.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.processor_grok.json @@ -12,7 +12,7 @@ "patterns": [ "_ingest/processor/grok" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html#grok-processor-rest-get", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/grok-processor.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.put_pipeline.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.put_pipeline.json index 71083c1bc7dd0..364011946fa2e 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.put_pipeline.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ingest.put_pipeline.json @@ -23,7 +23,7 @@ "patterns": [ "_ingest/pipeline/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-pipeline-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/ingest.html", "availability": { "stack": true, "serverless": true diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/license.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/license.get.json index 194c4fa7158e1..f28214188e79a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/license.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/license.get.json @@ -17,7 +17,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-license.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.reload_secure_settings.json b/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.reload_secure_settings.json index 8605011a1afde..bd7c158796de7 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.reload_secure_settings.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.reload_secure_settings.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.usage.json b/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.usage.json index 2c2c870c650bd..f84b1d2d48a9c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.usage.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/nodes.usage.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/put_script.json b/src/plugins/console/server/lib/spec_definitions/json/generated/put_script.json index 529be68f97c10..85cd77924ee9d 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/put_script.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/put_script.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/reindex.json b/src/plugins/console/server/lib/spec_definitions/json/generated/reindex.json index edb56b62dcd6d..423a8fda844c8 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/reindex.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/reindex.json @@ -6,19 +6,24 @@ "human": "__flag__", "pretty": "__flag__", "refresh": "__flag__", - "requests_per_second": "", + "requests_per_second": [ + "-1" + ], "scroll": [ "-1", "0" ], "slices": [ + "1", "auto" ], "timeout": [ + "1m", "-1", "0" ], "wait_for_active_shards": [ + "1", "all", "index-setting" ], @@ -34,7 +39,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-reindex.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json b/src/plugins/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json index d67ebe0768c82..ecdb9372b22e8 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "timeout": [ + "30s", "-1", "0" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/search_mvt.json b/src/plugins/console/server/lib/spec_definitions/json/generated/search_mvt.json index be7602ac954c2..6691874a137be 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/search_mvt.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/search_mvt.json @@ -36,7 +36,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/search-vector-tile-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/security.clear_api_key_cache.json b/src/plugins/console/server/lib/spec_definitions/json/generated/security.clear_api_key_cache.json index 73dfb64627879..04cc162e377f4 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/security.clear_api_key_cache.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/security.clear_api_key_cache.json @@ -15,7 +15,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-clear-api-key-cache.html", "availability": { "stack": true, - "serverless": true + "serverless": false } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/security.has_privileges.json b/src/plugins/console/server/lib/spec_definitions/json/generated/security.has_privileges.json index 2e051b7ffc9f9..9c678e7bc5c8e 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/security.has_privileges.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/security.has_privileges.json @@ -17,7 +17,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-has-privileges.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json index 707b10430d4c6..f66c1e55c31e4 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json @@ -15,7 +15,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/clear-sql-cursor-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.delete_async.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.delete_async.json index 06635b945741a..184d2f2a16445 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.delete_async.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.delete_async.json @@ -15,7 +15,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-async-sql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async.json index dc88affe81c36..4a24f3f2b1563 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async.json @@ -27,7 +27,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-async-sql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json index 4b6020f23a18b..7d4a714a1e77d 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json @@ -15,7 +15,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-async-sql-search-status-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.query.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.query.json index 3ac18e2b81035..565281f08349a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.query.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.query.json @@ -17,7 +17,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.translate.json b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.translate.json index a75471e3c7450..fda9def4a1b5b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/sql.translate.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/sql.translate.json @@ -16,7 +16,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-translate-api.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json similarity index 87% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json index e931ac69c473e..9c2b72d8d3a6c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json @@ -1,5 +1,5 @@ { - "synonyms.delete": { + "synonyms.delete_synonym": { "url_params": { "error_trace": "__flag__", "filter_path": [], @@ -10,7 +10,7 @@ "DELETE" ], "patterns": [ - "_synonyms/{synonyms_set}" + "_synonyms/{id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-synonyms-set.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json similarity index 84% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.delete.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json index a4f50d9ea08fc..fc5b150337d89 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.delete.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json @@ -1,5 +1,5 @@ { - "synonym_rule.delete": { + "synonyms.delete_synonym_rule": { "url_params": { "error_trace": "__flag__", "filter_path": [], @@ -10,7 +10,7 @@ "DELETE" ], "patterns": [ - "_synonyms/{synonyms_set}/{synonym_rule}" + "_synonyms/{set_id}/{rule_id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-synonym-rule.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json similarity index 82% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json index 1fabfd8216929..b180ea625639a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json @@ -1,18 +1,20 @@ { - "synonyms.get": { + "synonyms.get_synonym": { "url_params": { "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", "from": "", - "size": "" + "size": [ + "10" + ] }, "methods": [ "GET" ], "patterns": [ - "_synonyms/{synonyms_set}" + "_synonyms/{id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-synonyms-set.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json similarity index 84% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.get.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json index 01f52d0dff733..b6c0a7c2e523c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json @@ -1,5 +1,5 @@ { - "synonym_rule.get": { + "synonyms.get_synonym_rule": { "url_params": { "error_trace": "__flag__", "filter_path": [], @@ -10,7 +10,7 @@ "GET" ], "patterns": [ - "_synonyms/{synonyms_set}/{synonym_rule}" + "_synonyms/{set_id}/{rule_id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-synonym-rule.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms_sets.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json similarity index 85% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonyms_sets.get.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json index 9addedfbb6f26..894bf417ef41b 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms_sets.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json @@ -1,12 +1,14 @@ { - "synonyms_sets.get": { + "synonyms.get_synonyms_sets": { "url_params": { "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", "from": "", - "size": "" + "size": [ + "10" + ] }, "methods": [ "GET" diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json similarity index 88% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json index 8184d8f17a851..519e2df3a7d69 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json @@ -1,5 +1,5 @@ { - "synonyms.put": { + "synonyms.put_synonym": { "url_params": { "error_trace": "__flag__", "filter_path": [], @@ -10,7 +10,7 @@ "PUT" ], "patterns": [ - "_synonyms/{synonyms_set}" + "_synonyms/{id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-synonyms-set.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json similarity index 84% rename from src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.put.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json index 4bfe6687e8b46..96dec0f4b5d40 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/synonym_rule.put.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json @@ -1,5 +1,5 @@ { - "synonym_rule.put": { + "synonyms.put_synonym_rule": { "url_params": { "error_trace": "__flag__", "filter_path": [], @@ -10,7 +10,7 @@ "PUT" ], "patterns": [ - "_synonyms/{synonyms_set}/{synonym_rule}" + "_synonyms/{set_id}/{rule_id}" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-synonym-rule.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/tasks.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/tasks.get.json index 466409ec48b60..d695d1285c7c7 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/tasks.get.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/tasks.get.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "timeout": [ + "30s", "-1", "0" ], @@ -20,7 +21,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/tasks.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query.json b/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query.json index 5063d21f55eb5..787d36fdb2ec6 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query.json @@ -32,13 +32,17 @@ "preference": "", "refresh": "__flag__", "request_cache": "__flag__", - "requests_per_second": "", + "requests_per_second": [ + "-1" + ], "routing": "", "scroll": [ "-1", "0" ], - "scroll_size": "", + "scroll_size": [ + "1000" + ], "search_timeout": [ "-1", "0" @@ -48,18 +52,21 @@ "dfs_query_then_fetch" ], "slices": [ + "1", "auto" ], "sort": "", "stats": "", "terminate_after": "", "timeout": [ + "1m", "-1", "0" ], "version": "__flag__", "version_type": "__flag__", "wait_for_active_shards": [ + "1", "all", "index-setting" ], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query_rethrottle.json b/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query_rethrottle.json index 722bd66411346..38a90b22ffa66 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query_rethrottle.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/update_by_query_rethrottle.json @@ -5,7 +5,9 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "requests_per_second": "" + "requests_per_second": [ + "-1" + ] }, "methods": [ "POST" diff --git a/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put.json b/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym.json similarity index 83% rename from src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put.json rename to src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym.json index 0f1b931c21736..d3f559626df90 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put.json +++ b/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym.json @@ -1,5 +1,5 @@ { - "synonyms.put": { + "synonyms.put_synonym": { "data_autocomplete_rules": { "synonyms_set": [ { diff --git a/src/plugins/console/server/lib/spec_definitions/json/overrides/synonym_rule.put.json b/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym_rule.json similarity index 67% rename from src/plugins/console/server/lib/spec_definitions/json/overrides/synonym_rule.put.json rename to src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym_rule.json index 1f02d1b495f7a..049382db1f9e1 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/overrides/synonym_rule.put.json +++ b/src/plugins/console/server/lib/spec_definitions/json/overrides/synonyms.put_synonym_rule.json @@ -1,5 +1,5 @@ { - "synonym_rule.put": { + "synonyms.put_synonym_rule": { "data_autocomplete_rules": { "synonyms": "" } From 60f66eaf06cd92967cb569a577b50d83e4c94b12 Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Tue, 3 Oct 2023 14:16:42 -0400 Subject: [PATCH 018/170] =?UTF-8?q?Upgrade=20postcss@8.4.14=E2=86=928.4.31?= =?UTF-8?q?=20(#167815)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Upgrades dev-only dependency `postcss` where possible (v8.4.14 to v8.4.31). --- package.json | 2 +- yarn.lock | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e5c77f4f844f5..6ade30114dcf0 100644 --- a/package.json +++ b/package.json @@ -1564,7 +1564,7 @@ "pixelmatch": "^5.3.0", "playwright": "=1.37.0", "pngjs": "^3.4.0", - "postcss": "^8.4.14", + "postcss": "^8.4.31", "postcss-loader": "^4.2.0", "postcss-prefix-selector": "^1.16.0", "postcss-scss": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index 81045d21f49ac..8efceaca77015 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22688,7 +22688,7 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanoid@^3.3.1, nanoid@^3.3.4: +nanoid@^3.3.1: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== @@ -24625,19 +24625,10 @@ postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0 picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.23: - version "8.4.25" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" - integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== +postcss@^8.4.14, postcss@^8.4.23, postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" From 959f6239b02ccf65f0330aea627ea98261786f75 Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Tue, 3 Oct 2023 11:43:23 -0700 Subject: [PATCH 019/170] [Cloud Security][CIS GCP]Migration for new fields (#167545) ## Summary This PR is for migrating account.type fields for GCP when it doesnt have it --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Kfir Peled Co-authored-by: Kfir Peled <61654899+kfirpeled@users.noreply.github.com> --- .../group2/check_registered_types.test.ts | 2 +- .../fleet/server/saved_objects/index.ts | 19 ++- .../cloud_security_posture/index.ts | 8 ++ .../cloud_security_posture/to_v8_11_0.test.ts | 125 ++++++++++++++++++ .../cloud_security_posture/to_v8_11_0.ts | 36 +++++ 5 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/index.ts create mode 100644 x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.test.ts create mode 100644 x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts index b5a1591e7a5bd..26ab99d41633d 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts @@ -107,7 +107,7 @@ describe('checking migration metadata changes on all registered SO types', () => "ingest-agent-policies": "f11cc19275f4c3e4ee7c5cd6423b6706b21b989d", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "b4e636b13a5d0f89f0400fb67811d4cca4736eb0", - "ingest-package-policies": "8ec637429836f80f1fcc798bcee7c5916eceaed5", + "ingest-package-policies": "a0c9fb48e04dcd638e593db55f1c6451523f90ea", "ingest_manager_settings": "64955ef1b7a9ffa894d4bb9cf863b5602bfa6885", "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index b21af06c38349..9bf37677ae905 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -30,17 +30,14 @@ import { migratePackagePolicyToV8110, } from './migrations/security_solution/to_v8_11_0'; +import { migrateCspPackagePolicyToV8110 } from './migrations/cloud_security_posture'; + import { migrateOutputEvictionsFromV8100, migrateOutputToV8100 } from './migrations/to_v8_10_0'; import { migrateSyntheticsPackagePolicyToV8100 } from './migrations/synthetics/to_v8_10_0'; import { migratePackagePolicyEvictionsFromV8100 } from './migrations/security_solution/to_v8_10_0'; -import { - migratePackagePolicyEvictionsFromV81102, - migratePackagePolicyToV81102, -} from './migrations/security_solution/to_v8_11_0_2'; - import { migrateAgentPolicyToV7100, migratePackagePolicyToV7100, @@ -78,6 +75,10 @@ import { } from './migrations/security_solution'; import { migratePackagePolicyToV880 } from './migrations/to_v8_8_0'; import { migrateAgentPolicyToV890 } from './migrations/to_v8_9_0'; +import { + migratePackagePolicyToV81102, + migratePackagePolicyEvictionsFromV81102, +} from './migrations/security_solution/to_v8_11_0_2'; /* * Saved object types and mappings @@ -351,6 +352,14 @@ const getSavedObjectTypes = (): { [key: string]: SavedObjectsType } => ({ forwardCompatibility: migratePackagePolicyEvictionsFromV81102, }, }, + '4': { + changes: [ + { + type: 'data_backfill', + backfillFn: migrateCspPackagePolicyToV8110, + }, + ], + }, }, migrations: { '7.10.0': migratePackagePolicyToV7100, diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/index.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/index.ts new file mode 100644 index 0000000000000..d9f2adb59e575 --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { migrateCspPackagePolicyToV8110 } from './to_v8_11_0'; diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.test.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.test.ts new file mode 100644 index 0000000000000..ec6313080642b --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.test.ts @@ -0,0 +1,125 @@ +/* + * Copyright 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 { SavedObjectModelTransformationContext } from '@kbn/core-saved-objects-server'; + +import { migrateCspPackagePolicyToV8110 as migration } from './to_v8_11_0'; + +describe('8.11.0 Cloud Security Posture Package Policy migration', () => { + const policyDoc = ( + accountType: string, + isAccountTypeCorrect: boolean, + packageName: string + ): any => { + return { + id: 'mock-saved-csp-object-id', + attributes: { + name: 'cloud_security_posture_test', + package: { + name: packageName, + title: '', + version: '', + }, + id: 'ID_123', + policy_id: '', + enabled: true, + namespace: '', + revision: 0, + updated_at: '', + updated_by: '', + created_at: '', + created_by: '', + inputs: [ + { + type: accountType, + enabled: true, + streams: [ + { + vars: { + ...(isAccountTypeCorrect && { + 'gcp.account_type': { value: 'single-account', type: 'text' }, + }), + }, + }, + ], + config: {}, + }, + ], + }, + type: ' nested', + }; + }; + + it('adds gcp.account_type to policy, set to single', () => { + const initialDoc = policyDoc('cloudbeat/cis_gcp', false, 'cloud_security_posture'); + const migratedDoc = policyDoc('cloudbeat/cis_gcp', true, 'cloud_security_posture'); + expect(migration(initialDoc, {} as SavedObjectModelTransformationContext)).toEqual({ + attributes: migratedDoc.attributes, + }); + }); + + it('if there are no type cloudbeat/cis_gcp, do not add gcp.account_type', () => { + const initialDoc = policyDoc('cloudbeat/cis_aws', false, 'cloud_security_posture'); + const migratedDoc = policyDoc('cloudbeat/cis_aws', false, 'cloud_security_posture'); + expect(migration(initialDoc, {} as SavedObjectModelTransformationContext)).toEqual({ + attributes: migratedDoc.attributes, + }); + }); + + it('if there are no cloud_security_posture package, do not change the doc', () => { + const initialDoc = policyDoc('cloudbeat/cis_gcp', false, 'NOT_cloud_security_posture'); + const migratedDoc = policyDoc('cloudbeat/cis_gcp', false, 'NOT_cloud_security_posture'); + expect(migration(initialDoc, {} as SavedObjectModelTransformationContext)).toEqual({ + attributes: migratedDoc.attributes, + }); + }); + + it('if gcp.account_type exist and already has a value, do not set it to single-account', () => { + const policyDocWithAccountType = (): any => { + return { + id: 'mock-saved-csp-object-id', + attributes: { + name: 'cloud_security_posture_test', + package: { + name: 'cloud_security_posture', + title: '', + version: '', + }, + id: 'ID_1234', + policy_id: '', + enabled: true, + namespace: '', + revision: 0, + updated_at: '', + updated_by: '', + created_at: '', + created_by: '', + inputs: [ + { + type: 'cloudbeat/cis_gcp', + enabled: true, + streams: [ + { + vars: { + 'gcp.account_type': { value: 'single-account-MAYBE', type: 'text' }, + }, + }, + ], + config: {}, + }, + ], + }, + type: ' nested', + }; + }; + const initialDoc = policyDocWithAccountType(); + const migratedDoc = policyDocWithAccountType(); + expect(migration(initialDoc, {} as SavedObjectModelTransformationContext)).toEqual({ + attributes: migratedDoc.attributes, + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts new file mode 100644 index 0000000000000..dd6760a9dc4ac --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectModelDataBackfillFn } from '@kbn/core-saved-objects-server'; + +import type { PackagePolicy } from '../../../../common'; + +export const migrateCspPackagePolicyToV8110: SavedObjectModelDataBackfillFn< + PackagePolicy, + PackagePolicy +> = (packagePolicyDoc) => { + if (packagePolicyDoc.attributes.package?.name !== 'cloud_security_posture') { + return { attributes: packagePolicyDoc.attributes }; + } + + const updatedAttributes = packagePolicyDoc.attributes; + + const gcpPackage = updatedAttributes.inputs.find((input) => input.type === 'cloudbeat/cis_gcp'); + + if (gcpPackage) { + const isGcpAccountTypeExists = gcpPackage.streams[0]?.vars?.hasOwnProperty('gcp.account_type'); + + if (!isGcpAccountTypeExists) { + const migratedPolicy = { 'gcp.account_type': { value: 'single-account', type: 'text' } }; + gcpPackage.streams[0].vars = { ...(gcpPackage.streams[0].vars || {}), ...migratedPolicy }; + } + } + + return { + attributes: updatedAttributes, + }; +}; From b39c608744f46bc0deac9b2268495cd02a315c15 Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Tue, 3 Oct 2023 21:24:16 +0200 Subject: [PATCH 020/170] [Cloud Security] add more information about testing to Cloud Security Posture plugin readme (#167508) --- .../plugins/cloud_security_posture/README.md | 63 ++++++++++++++++--- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/README.md b/x-pack/plugins/cloud_security_posture/README.md index f9c760fbeb99f..0befebb667de6 100755 --- a/x-pack/plugins/cloud_security_posture/README.md +++ b/x-pack/plugins/cloud_security_posture/README.md @@ -6,17 +6,21 @@ Cloud Posture automates the identification and remediation of risks across cloud ## Development -read [Kibana Contributing Guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for more details +Read [Kibana Contributing Guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for more details ## Testing -for general guidelines, read [Kibana Testing Guide](https://www.elastic.co/guide/en/kibana/current/development-tests.html) for more details +For general guidelines, read [Kibana Testing Guide](https://www.elastic.co/guide/en/kibana/current/development-tests.html) for more details ### Tests 1. Unit Tests (Jest) - located in sibling files to the source code -2. [Integration Tests](../../test/api_integration/apis/cloud_security_posture/index.ts) -3. [End-to-End Tests](../../test/cloud_security_posture_functional/pages/index.ts) +1. [API Integration Tests](../../test/api_integration/apis/cloud_security_posture/config.ts) +1. [Telemetry Integration Tests](../../test/cloud_security_posture_api/config.ts) +1. [End-to-End Tests](../../test/cloud_security_posture_functional/config.ts) +1. [Serverless API Integration tests](../../test_serverless/api_integration/test_suites/security/config.ts) +1. [Serverless End-to-End Tests](../../test_serverless/functional/test_suites/security/config.ts) + ### Tools @@ -32,6 +36,17 @@ Run **ESLint**: yarn lint:es x-pack/plugins/cloud_security_posture ``` +Run **i18n check**: +```bash +node scripts/i18n_check.js +``` + +> **Note** +> +> i18n should run on project scope as it checks translations files outside of our plugin. +> +> Fixes can be applied using the --fix flag + Run [**Unit Tests**](https://www.elastic.co/guide/en/kibana/current/development-tests.html#_unit_testing): ```bash @@ -39,6 +54,7 @@ yarn test:jest --config x-pack/plugins/cloud_security_posture/jest.config.js ``` > **Note** +> > for a coverage report, add the `--coverage` flag, and run `open target/kibana-coverage/jest/x-pack/plugins/cloud_security_posture/index.html` Run [**Integration Tests**](https://docs.elastic.dev/kibana-dev-docs/tutorials/testing-plugins#): @@ -50,14 +66,45 @@ yarn test:ftr --config x-pack/test/api_integration/config.ts Run [**End-to-End Tests**](https://www.elastic.co/guide/en/kibana/current/development-tests.html#_running_functional_tests): ```bash -yarn test:ftr --config x-pack/test/cloud_security_posture_functional/config.ts --debug +yarn test:ftr --config x-pack/test/cloud_security_posture_functional/config.ts +yarn test:ftr --config x-pack/test/api_integration/config.ts --include-tag=cloud_security_posture +yarn test:ftr --config x-pack/test/cloud_security_posture_api/config.ts +yarn test:ftr --config x-pack/test_serverless/api_integration/test_suites/security/config.ts --include-tag=cloud_security_posture +yarn test:ftr --config x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts ``` -
    +#### Run **FTR tests (integration or e2e) for development** + +Functional test runner (FTR) can be used separately with `ftr:runner` and `ftr:server`. This is convenient while developing tests. -test runner (FTR) can be used separately with `ftr:runner` and `ftr:server`: +For example, +run ESS (stateful) api integration tests: ```bash yarn test:ftr:server --config x-pack/test/api_integration/config.ts -yarn test:ftr:runner --include-tag=cloud_security_posture --config x-pack/test/api_integration/config.ts +yarn test:ftr:runner --config x-pack/test/api_integration/apis/cloud_security_posture/config.ts +``` + +run ESS (stateful) telemetry integration tests: +```bash +yarn test:ftr:server --config x-pack/test/cloud_security_posture_api/config.ts +yarn test:ftr:runner --config x-pack/test/cloud_security_posture_api/config.ts ``` + +run ESS (stateful) e2e tests: +```bash +yarn test:ftr:server --config x-pack/test/cloud_security_posture_functional/config.ts +yarn test:ftr:runner --config x-pack/test/cloud_security_posture_functional/config.ts +``` + +run serverless api integration tests: +```bash +yarn test:ftr:server --config x-pack/test_serverless/api_integration/test_suites/security/config.ts +yarn test:ftr:runner --config x-pack/test_serverless/api_integration/test_suites/security/config.ts --include-tag=cloud_security_posture +``` + +run serverless e2e tests: +```bash +yarn test:ftr:server --config x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts +yarn test:ftr:runner ---config x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts +``` \ No newline at end of file From d0c9f37d16af236f60edab5d86547af232b6b97f Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Tue, 3 Oct 2023 21:50:03 +0200 Subject: [PATCH 021/170] [Security Solution] Increassing parallelism for Serverless Investigations execution (#167920) --- .buildkite/pipelines/pull_request/base.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 977e46e2beaea..94f983f1d5e6f 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -87,7 +87,7 @@ steps: queue: n2-4-spot depends_on: build timeout_in_minutes: 40 - parallelism: 2 + parallelism: 4 retry: automatic: - exit_status: '*' From 39c98880099735c3f42dc25e989a4bdb87b63e65 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 3 Oct 2023 15:32:38 -0500 Subject: [PATCH 022/170] [ci] Synchronize serverless tests between pipelines (#167934) We're running serverless cypress tests in three locations 1) on-merge 2) pull requests 3) verifying the latest elasticsearch snapshot These have diverged slightly, causing a small issue where we missed timeouts in pull requests due to a longer timeout in on-merge (which triggers our notifications). Timeouts are all set to 60 minutes. Target time is 40 minutes, with a 20 minute buffer that we can use to increase the parallelism as needed. --- .../verify_es_serverless_image.yml | 6 +-- .buildkite/pipelines/on_merge.yml | 6 +-- .buildkite/pipelines/pull_request/base.yml | 42 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml index dd6fd12c7c013..aabbcbd3255a4 100644 --- a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml +++ b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml @@ -50,7 +50,7 @@ steps: agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 40 + timeout_in_minutes: 60 parallelism: 2 retry: automatic: @@ -74,8 +74,8 @@ steps: agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 120 - parallelism: 2 + timeout_in_minutes: 60 + parallelism: 4 retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index ed33671ee2ed1..d567ac16af588 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -84,7 +84,7 @@ steps: agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 40 + timeout_in_minutes: 60 parallelism: 2 retry: automatic: @@ -108,8 +108,8 @@ steps: agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 120 - parallelism: 2 + timeout_in_minutes: 60 + parallelism: 4 retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 94f983f1d5e6f..04861de3dfac9 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -62,49 +62,49 @@ steps: agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 40 + timeout_in_minutes: 60 parallelism: 2 retry: automatic: - exit_status: '*' limit: 1 - # status_exception: Native role management is not enabled in this Elasticsearch instance - # - command: .buildkite/scripts/steps/functional/security_serverless_defend_workflows.sh - # label: 'Serverless Security Defend Workflows Cypress Tests' - # agents: - # queue: n2-4-spot - # depends_on: build - # timeout_in_minutes: 40 - # retry: - # automatic: - # - exit_status: '*' - # limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh - label: 'Serverless Security Investigations Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh + label: 'Serverless Explore - Security Solution Cypress Tests' agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 40 - parallelism: 4 + timeout_in_minutes: 60 + parallelism: 2 retry: automatic: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh - label: 'Serverless Security Explore Cypress Tests' + - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh + label: 'Serverless Investigations - Security Solution Cypress Tests' agents: queue: n2-4-spot depends_on: build - timeout_in_minutes: 40 - parallelism: 2 + timeout_in_minutes: 60 + parallelism: 4 retry: automatic: - exit_status: '*' limit: 1 + # status_exception: Native role management is not enabled in this Elasticsearch instance + # - command: .buildkite/scripts/steps/functional/security_serverless_defend_workflows.sh + # label: 'Serverless Security Defend Workflows Cypress Tests' + # agents: + # queue: n2-4-spot + # depends_on: build + # timeout_in_minutes: 60 + # retry: + # automatic: + # - exit_status: '*' + # limit: 1 + - command: .buildkite/scripts/steps/lint.sh label: 'Linting' agents: From 172f2ebb82ab2b3793d689607a72739966cc02e9 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:36:59 -0400 Subject: [PATCH 023/170] skip failing test suite (#167914) --- .../e2e/investigations/alerts/detection_page_filters.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts index 113c10cf2d910..1b129d98d9e0d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts @@ -108,7 +108,8 @@ const assertFilterControlsWithFilterObject = ( }); }; -describe(`Detections : Page Filters`, { tags: ['@ess', '@serverless'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/167914 +describe.skip(`Detections : Page Filters`, { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); createRule(getNewRule({ rule_id: 'custom_rule_filters' })); From efdd5730a03d47f433abc794fe4d180cd5cd5b5b Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:38:43 -0400 Subject: [PATCH 024/170] skip failing test suite (#167915) --- .../e2e/investigations/alerts/detection_page_filters.cy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts index 1b129d98d9e0d..6aa483cf7f785 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts @@ -109,6 +109,7 @@ const assertFilterControlsWithFilterObject = ( }; // Failing: See https://github.com/elastic/kibana/issues/167914 +// Failing: See https://github.com/elastic/kibana/issues/167915 describe.skip(`Detections : Page Filters`, { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); From b804e10ce3fdb309aa238b878b751f0d105a9696 Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Tue, 3 Oct 2023 17:09:25 -0400 Subject: [PATCH 025/170] [Search][Search Experience] Gated form is shown only when user is admin and kibana_uis_enabled is false (#167918) ## Summary This PR fixes issue with non-admin user not able access WS personal path routes(`/p/`) routes when `kibana_uis_enabled` is `false`. The gated form will only be accessible when `kibana_uis_enabled = false` and `isAdmin == true` In other cases all routes are accessible by all users. ### 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 --- .../workplace_search/index.test.tsx | 84 +++++++++-- .../applications/workplace_search/index.tsx | 130 ++++++++++-------- 2 files changed, 143 insertions(+), 71 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx index 453a6346f8690..6771168239126 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx @@ -18,12 +18,20 @@ import { shallow } from 'enzyme'; import { VersionMismatchPage } from '../shared/version_mismatch'; import { WorkplaceSearchHeaderActions } from './components/layout'; +import { SourcesRouter } from './views/content_sources'; import { SourceAdded } from './views/content_sources/components/source_added'; import { ErrorState } from './views/error_state'; +import { NotFound } from './views/not_found'; import { Overview } from './views/overview'; +import { RoleMappings } from './views/role_mappings'; import { SetupGuide } from './views/setup_guide'; -import { WorkplaceSearch, WorkplaceSearchUnconfigured, WorkplaceSearchConfigured } from '.'; +import { + WorkplaceSearch, + WorkplaceSearchUnconfigured, + WorkplaceSearchConfigured, + WorkplaceSearchConfiguredRoutes, +} from '.'; describe('WorkplaceSearch', () => { it('renders VersionMismatchPage when there are mismatching versions', () => { @@ -89,24 +97,33 @@ describe('WorkplaceSearchConfigured', () => { }); it('renders chrome and header actions', () => { - setMockValues({ organization: { kibanaUIsEnabled: false } }); - const wrapper = shallow(); - expect(wrapper.find(Overview)).toHaveLength(1); + setMockValues({ + account: { isAdmin: true }, + organization: { kibanaUIsEnabled: true }, + }); + const props = { isAdmin: true, kibanaUIsEnabled: true }; + const wrapperConfiguredRoutes = shallow(); + expect(wrapperConfiguredRoutes.find(Overview)).toHaveLength(1); + shallow(); expect(mockKibanaValues.setChromeIsVisible).toHaveBeenCalledWith(true); expect(mockKibanaValues.renderHeaderActions).toHaveBeenCalledWith(WorkplaceSearchHeaderActions); }); it('initializes app data with passed props', () => { const { workplaceSearch } = DEFAULT_INITIAL_APP_DATA; - setMockValues({ organization: { kibanaUIsEnabled: false } }); + setMockValues({ account: { isAdmin: true }, organization: { kibanaUIsEnabled: false } }); shallow(); expect(initializeAppData).toHaveBeenCalledWith({ workplaceSearch }); }); it('does not re-initialize app data or re-render header actions', () => { - setMockValues({ hasInitialized: true, organization: { kibanaUIsEnabled: false } }); + setMockValues({ + account: { isAdmin: true }, + hasInitialized: true, + organization: { kibanaUIsEnabled: false }, + }); shallow(); @@ -115,14 +132,57 @@ describe('WorkplaceSearchConfigured', () => { }); it('renders SourceAdded', () => { - setMockValues({ organization: { kibanaUIsEnabled: true } }); - const wrapper = shallow(); + setMockValues({ organization: { kibanaUIsEnabled: true }, account: { isAdmin: true } }); + const props = { isAdmin: true, kibanaUIsEnabled: true }; + const wrapper = shallow(); expect(wrapper.find(SourceAdded)).toHaveLength(1); }); - it('renders Overview when kibanaUIsEnabled is true', () => { - setMockValues({ organization: { kibanaUIsEnabled: false } }); - const wrapper = shallow(); - expect(wrapper.find(Overview)).toHaveLength(1); + describe('when admin user is logged in', () => { + it('all routes accessible when kibanaUIsEnabled is true', () => { + setMockValues({ + account: { isAdmin: true }, + organization: { kibanaUIsEnabled: true }, + }); + const props = { isAdmin: true, kibanaUIsEnabled: true }; + + const wrapper = shallow(); + expect(wrapper.find(RoleMappings)).toHaveLength(1); + }); + + it('only Overview and Notfound routes are available when kibanaUIsEnabled is false', () => { + setMockValues({ + account: { isAdmin: true }, + organization: { kibanaUIsEnabled: false }, + }); + const props = { isAdmin: true, kibanaUIsEnabled: false }; + + const wrapper = shallow(); + expect(wrapper.find(RoleMappings)).toHaveLength(0); + expect(wrapper.find(Overview)).toHaveLength(1); + expect(wrapper.find(NotFound)).toHaveLength(1); + }); + }); + describe('when non admin user is logged in, all routes are accessible', () => { + it('when kibanaUIsEnabled is true ', () => { + setMockValues({ + account: { isAdmin: false }, + organization: { kibanaUIsEnabled: true }, + }); + const props = { isAdmin: true, kibanaUIsEnabled: true }; + + const wrapper = shallow(); + expect(wrapper.find(RoleMappings)).toHaveLength(1); + }); + it('when kibanaUIsEnabled is false ', () => { + setMockValues({ + account: { isAdmin: false }, + organization: { kibanaUIsEnabled: false }, + }); + const props = { isAdmin: false, kibanaUIsEnabled: false }; + + const wrapper = shallow(); + expect(wrapper.find(SourcesRouter)).toHaveLength(2); + }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx index 74921301669e7..e9332fe81bdab 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx @@ -73,10 +73,80 @@ export const WorkplaceSearch: React.FC = (props) => { return ; }; +export const WorkplaceSearchConfiguredRoutes: React.FC<{ + isAdmin: boolean; + kibanaUIsEnabled: boolean; +}> = ({ isAdmin, kibanaUIsEnabled }) => { + const isblockingRoutes = isAdmin && !kibanaUIsEnabled; + return !isblockingRoutes ? ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) : ( + + + + + + + + + ); +}; export const WorkplaceSearchConfigured: React.FC = (props) => { const { hasInitialized, organization: { kibanaUIsEnabled }, + account: { isAdmin }, } = useValues(AppLogic); const { initializeAppData, setContext } = useActions(AppLogic); const { renderHeaderActions, setChromeIsVisible } = useValues(KibanaLogic); @@ -100,65 +170,7 @@ export const WorkplaceSearchConfigured: React.FC = (props) => { } }, [hasInitialized]); - return ( - - - - - {kibanaUIsEnabled && ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )} - - - - - - ); + return ; }; export const WorkplaceSearchUnconfigured: React.FC = () => ( From 8b6ba3d15ff18de07d32ab2302bf9e18844ce25c Mon Sep 17 00:00:00 2001 From: Georgii Gorbachev Date: Tue, 3 Oct 2023 23:23:46 +0200 Subject: [PATCH 026/170] [Security Solution] Detection Engine health API: cluster health endpoint (#165602) **Epic:** https://github.com/elastic/kibana/issues/125642 ## Summary This PR implements the `_cluster` health endpoint. It returns the same metrics as the `_space` health endpoint. The difference is that: - the `_cluster` health endpoint calculates its metrics on top of data from all Kibana spaces - the `_space` health endpoint calculates its metrics on top of data from the current Kibana space (the one specified in the URL) Additionally, it fixes a few bugs in the existing health endpoints related to scoping. This PR ensures that we only aggregate _detection_ rules in the saved objects and the `.kibana-event-log-*` indices, and not any types of rules. ## RBAC The `_cluster` health endpoint can be called by any user with at least Read privilege to Security Solution. ## Documentation I also updated the health API's README and added a new document describing what health data we return from what endpoints: ``` security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_data.md ``` ### Checklist Delete any items that are not applicable to this PR. - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] Added more info to the dev docs - [ ] [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 --- .../detection_engine_health/README.md | 1718 +-------------- .../get_cluster_health_route.ts | 3 - .../detection_engine_health/health_data.md | 152 ++ .../health_endpoints.md | 1944 +++++++++++++++++ .../model/cluster_health.mock.ts | 10 +- .../model/cluster_health.ts | 19 +- .../model/health_stats.mock.ts | 17 +- .../model/health_stats.ts | 47 +- .../model/rule_health.mock.ts | 6 +- .../model/rule_health.ts | 16 +- .../model/space_health.mock.ts | 6 +- .../model/space_health.ts | 16 +- .../get_cluster_health_route.ts | 4 +- .../get_rule_health/get_rule_health_route.ts | 2 +- .../get_space_health_route.ts | 2 +- .../detection_engine_health_client.ts | 13 +- .../aggregations/health_stats_for_rule.ts | 8 +- .../aggregations/rule_execution_stats.ts | 61 +- .../event_log/event_log_health_client.ts | 135 +- .../aggregations/health_stats_for_cluster.ts | 23 + .../aggregations/health_stats_for_space.ts | 4 +- .../rule_objects/aggregations/rule_stats.ts | 6 +- .../rule_objects/filters.ts | 8 + .../rule_objects_health_client.ts | 84 +- .../rule_spaces/aggregations/spaces.ts | 48 + .../rule_spaces/rule_spaces_client.ts | 51 + .../logic/event_log/event_log_fields.ts | 1 + .../rule_monitoring/logic/service.ts | 47 +- 28 files changed, 2516 insertions(+), 1935 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_data.md create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_endpoints.md create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_cluster.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/filters.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/aggregations/spaces.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/rule_spaces_client.ts diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/README.md b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/README.md index 81ee936e714fe..949dc743dcefc 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/README.md +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/README.md @@ -6,1719 +6,7 @@ This health API allows users to get health overview of the Detection Engine acro In the future, this API might become helpful for building more Rule Monitoring UIs giving our users more clarity and transparency about the work of the Detection Engine. -## Rule health endpoint +See more info: -🚧 NOTE: this endpoint is **partially implemented**. 🚧 - -```txt -POST /internal/detection_engine/health/_rule -``` - -Get health overview of a rule. Scope: a given detection rule in the current Kibana space. -Returns: - -- health stats at the moment of the API call (rule and its execution summary) -- health stats over a specified period of time ("health interval") -- health stats history within the same interval in the form of a histogram - (the same stats are calculated over each of the discreet sub-intervals of the whole interval) - -Minimal required parameters: - -```json -{ - "rule_id": "d4beff10-f045-11ed-89d8-3b6931af10bc" -} -``` - -Response: - -```json -{ - "timings": { - "requested_at": "2023-05-26T16:09:54.128Z", - "processed_at": "2023-05-26T16:09:54.778Z", - "processing_time_ms": 650 - }, - "parameters": { - "interval": { - "type": "last_day", - "granularity": "hour", - "from": "2023-05-25T16:09:54.128Z", - "to": "2023-05-26T16:09:54.128Z", - "duration": "PT24H" - }, - "rule_id": "d4beff10-f045-11ed-89d8-3b6931af10bc" - }, - "health": { - "stats_at_the_moment": { - "rule": { - "id": "d4beff10-f045-11ed-89d8-3b6931af10bc", - "updated_at": "2023-05-26T15:44:21.689Z", - "updated_by": "elastic", - "created_at": "2023-05-11T21:50:23.830Z", - "created_by": "elastic", - "name": "Test rule", - "tags": ["foo"], - "interval": "1m", - "enabled": true, - "revision": 2, - "description": "-", - "risk_score": 21, - "severity": "low", - "license": "", - "output_index": "", - "meta": { - "from": "6h", - "kibana_siem_app_url": "http://localhost:5601/kbn/app/security" - }, - "author": [], - "false_positives": [], - "from": "now-21660s", - "rule_id": "e46eaaf3-6d81-4cdb-8cbb-b2201a11358b", - "max_signals": 100, - "risk_score_mapping": [], - "severity_mapping": [], - "threat": [], - "to": "now", - "references": [], - "version": 3, - "exceptions_list": [], - "immutable": false, - "related_integrations": [], - "required_fields": [], - "setup": "", - "type": "query", - "language": "kuery", - "index": [ - "apm-*-transaction*", - "auditbeat-*", - "endgame-*", - "filebeat-*", - "logs-*", - "packetbeat-*", - "traces-apm*", - "winlogbeat-*", - "-*elastic-cloud-logs-*", - "foo-*" - ], - "query": "*", - "filters": [], - "actions": [ - { - "group": "default", - "id": "bd59c4e0-f045-11ed-89d8-3b6931af10bc", - "params": { - "body": "Hello world" - }, - "action_type_id": ".webhook", - "uuid": "f8b87eb0-58bb-4d4b-a584-084d44ab847e", - "frequency": { - "summary": true, - "throttle": null, - "notifyWhen": "onActiveAlert" - } - } - ], - "execution_summary": { - "last_execution": { - "date": "2023-05-26T16:09:36.848Z", - "status": "succeeded", - "status_order": 0, - "message": "Rule execution completed successfully", - "metrics": { - "total_search_duration_ms": 2, - "execution_gap_duration_s": 80395 - } - } - } - } - }, - "stats_over_interval": { - "number_of_executions": { - "total": 21, - "by_outcome": { - "succeeded": 20, - "warning": 0, - "failed": 1 - } - }, - "number_of_logged_messages": { - "total": 42, - "by_level": { - "error": 1, - "warn": 0, - "info": 41, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 1, - "total_duration_s": 80395 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 3061, - "5.0": 3083, - "25.0": 3112, - "50.0": 6049, - "75.0": 6069.5, - "95.0": 100093.79999999986, - "99.0": 207687 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 226, - "5.0": 228.2, - "25.0": 355.5, - "50.0": 422, - "75.0": 447, - "95.0": 677.75, - "99.0": 719 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 1.1, - "25.0": 2.75, - "50.0": 7, - "75.0": 13.5, - "95.0": 29.59999999999998, - "99.0": 45 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - }, - "top_errors": [ - { - "count": 1, - "message": "day were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances" - } - ], - "top_warnings": [] - }, - "history_over_interval": { - "buckets": [ - { - "timestamp": "2023-05-26T15:00:00.000Z", - "stats": { - "number_of_executions": { - "total": 12, - "by_outcome": { - "succeeded": 11, - "warning": 0, - "failed": 1 - } - }, - "number_of_logged_messages": { - "total": 24, - "by_level": { - "error": 1, - "warn": 0, - "info": 23, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 1, - "total_duration_s": 80395 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 3106, - "5.0": 3106.8, - "25.0": 3124.5, - "50.0": 6067.5, - "75.0": 9060.5, - "95.0": 188124.59999999971, - "99.0": 207687 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 230, - "5.0": 236.2, - "25.0": 354, - "50.0": 405, - "75.0": 447.5, - "95.0": 563.3999999999999, - "99.0": 576 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0.20000000000000018, - "25.0": 2.5, - "50.0": 5, - "75.0": 14, - "95.0": 42.19999999999996, - "99.0": 45 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - }, - { - "timestamp": "2023-05-26T16:00:00.000Z", - "stats": { - "number_of_executions": { - "total": 9, - "by_outcome": { - "succeeded": 9, - "warning": 0, - "failed": 0 - } - }, - "number_of_logged_messages": { - "total": 18, - "by_level": { - "error": 0, - "warn": 0, - "info": 18, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 0, - "total_duration_s": 0 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 3061, - "5.0": 3061, - "25.0": 3104.75, - "50.0": 3115, - "75.0": 6053, - "95.0": 6068, - "99.0": 6068 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 226.00000000000003, - "5.0": 226, - "25.0": 356, - "50.0": 436, - "75.0": 495.5, - "95.0": 719, - "99.0": 719 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 2, - "5.0": 2, - "25.0": 5.75, - "50.0": 8, - "75.0": 13.75, - "95.0": 17, - "99.0": 17 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - } - ] - } - } -} -``` - -## Space health endpoint - -🚧 NOTE: this endpoint is **partially implemented**. 🚧 - -```txt -POST /internal/detection_engine/health/_space -GET /internal/detection_engine/health/_space -``` - -Get health overview of the current Kibana space. Scope: all detection rules in the space. -Returns: - -- health stats at the moment of the API call -- health stats over a specified period of time ("health interval") -- health stats history within the same interval in the form of a histogram - (the same stats are calculated over each of the discreet sub-intervals of the whole interval) - -Minimal required parameters for the `POST` route: empty object. - -```json -{} -``` - -The `GET` route doesn't accept any parameters and uses the default parameters instead: - -- interval: `last_day` -- granularity: `hour` -- debug: `false` - -Response: - -```json -{ - "timings": { - "requested_at": "2023-05-26T16:24:21.628Z", - "processed_at": "2023-05-26T16:24:22.880Z", - "processing_time_ms": 1252 - }, - "parameters": { - "interval": { - "type": "last_day", - "granularity": "hour", - "from": "2023-05-25T16:24:21.628Z", - "to": "2023-05-26T16:24:21.628Z", - "duration": "PT24H" - } - }, - "health": { - "stats_at_the_moment": { - "number_of_rules": { - "all": { - "total": 777, - "enabled": 777, - "disabled": 0 - }, - "by_origin": { - "prebuilt": { - "total": 776, - "enabled": 776, - "disabled": 0 - }, - "custom": { - "total": 1, - "enabled": 1, - "disabled": 0 - } - }, - "by_type": { - "siem.eqlRule": { - "total": 381, - "enabled": 381, - "disabled": 0 - }, - "siem.queryRule": { - "total": 325, - "enabled": 325, - "disabled": 0 - }, - "siem.mlRule": { - "total": 47, - "enabled": 47, - "disabled": 0 - }, - "siem.thresholdRule": { - "total": 18, - "enabled": 18, - "disabled": 0 - }, - "siem.newTermsRule": { - "total": 4, - "enabled": 4, - "disabled": 0 - }, - "siem.indicatorRule": { - "total": 2, - "enabled": 2, - "disabled": 0 - } - }, - "by_outcome": { - "warning": { - "total": 307, - "enabled": 307, - "disabled": 0 - }, - "succeeded": { - "total": 266, - "enabled": 266, - "disabled": 0 - }, - "failed": { - "total": 204, - "enabled": 204, - "disabled": 0 - } - } - } - }, - "stats_over_interval": { - "number_of_executions": { - "total": 5622, - "by_outcome": { - "succeeded": 1882, - "warning": 2129, - "failed": 2120 - } - }, - "number_of_logged_messages": { - "total": 11756, - "by_level": { - "error": 2120, - "warn": 2129, - "info": 7507, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 777, - "total_duration_s": 514415894 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 216, - "5.0": 3048.5, - "25.0": 3105, - "50.0": 3129, - "75.0": 6112.355119825708, - "95.0": 134006, - "99.0": 195578 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 275, - "5.0": 323.375, - "25.0": 370.80555555555554, - "50.0": 413.1122337092731, - "75.0": 502.25233127864715, - "95.0": 685.8055555555555, - "99.0": 1194.75 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 15, - "95.0": 30, - "99.0": 99.44000000000005 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - }, - "top_errors": [ - { - "count": 1202, - "message": "An error occurred during rule execution message verification_exception" - }, - { - "count": 777, - "message": "were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances" - }, - { - "count": 3, - "message": "An error occurred during rule execution message rare_error_code missing" - }, - { - "count": 3, - "message": "An error occurred during rule execution message v3_windows_anomalous_path_activity missing" - }, - { - "count": 3, - "message": "An error occurred during rule execution message v3_windows_rare_user_type10_remote_login missing" - } - ], - "top_warnings": [ - { - "count": 2129, - "message": "This rule is attempting to query data from Elasticsearch indices listed in the Index pattern section of the rule definition however no index matching was found This warning will continue to appear until matching index is created or this rule is disabled" - } - ] - }, - "history_over_interval": { - "buckets": [ - { - "timestamp": "2023-05-26T15:00:00.000Z", - "stats": { - "number_of_executions": { - "total": 2245, - "by_outcome": { - "succeeded": 566, - "warning": 849, - "failed": 1336 - } - }, - "number_of_logged_messages": { - "total": 4996, - "by_level": { - "error": 1336, - "warn": 849, - "info": 2811, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 777, - "total_duration_s": 514415894 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 256, - "5.0": 3086.9722222222217, - "25.0": 3133, - "50.0": 6126, - "75.0": 59484.25, - "95.0": 179817.25, - "99.0": 202613 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 280.6, - "5.0": 327.7, - "25.0": 371.5208333333333, - "50.0": 415.6190476190476, - "75.0": 505.7642857142857, - "95.0": 740.4375, - "99.0": 1446.1500000000005 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 8, - "95.0": 25, - "99.0": 46 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - }, - { - "timestamp": "2023-05-26T16:00:00.000Z", - "stats": { - "number_of_executions": { - "total": 3363, - "by_outcome": { - "succeeded": 1316, - "warning": 1280, - "failed": 784 - } - }, - "number_of_logged_messages": { - "total": 6760, - "by_level": { - "error": 784, - "warn": 1280, - "info": 4696, - "debug": 0, - "trace": 0 - } - }, - "number_of_detected_gaps": { - "total": 0, - "total_duration_s": 0 - }, - "schedule_delay_ms": { - "percentiles": { - "1.0": 207, - "5.0": 3042, - "25.0": 3098.46511627907, - "50.0": 3112, - "75.0": 3145.2820512820517, - "95.0": 6100.571428571428, - "99.0": 6123 - } - }, - "execution_duration_ms": { - "percentiles": { - "1.0": 275, - "5.0": 319.85714285714283, - "25.0": 370.0357142857143, - "50.0": 410.79999229108853, - "75.0": 500.7692307692308, - "95.0": 675, - "99.0": 781.3999999999996 - } - }, - "search_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 9, - "75.0": 17.555555555555557, - "95.0": 34, - "99.0": 110.5 - } - }, - "indexing_duration_ms": { - "percentiles": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - } - ] - } - } -} -``` - -## Cluster health endpoint - -🚧 NOTE: this endpoint is **not implemented**. 🚧 - -```txt -POST /internal/detection_engine/health/_cluster -GET /internal/detection_engine/health/_cluster -``` - -Minimal required parameters for the `POST` route: empty object. - -```json -{} -``` - -The `GET` route doesn't accept any parameters and uses the default parameters instead: - -- interval: `last_day` -- granularity: `hour` -- debug: `false` - -Response: - -```json -{ - "message": "Not implemented", - "timings": { - "requested_at": "2023-05-26T16:32:01.878Z", - "processed_at": "2023-05-26T16:32:01.881Z", - "processing_time_ms": 3 - }, - "parameters": { - "interval": { - "type": "last_week", - "granularity": "hour", - "from": "2023-05-19T16:32:01.878Z", - "to": "2023-05-26T16:32:01.878Z", - "duration": "PT168H" - } - }, - "health": { - "stats_at_the_moment": { - "number_of_rules": { - "all": { - "total": 0, - "enabled": 0, - "disabled": 0 - }, - "by_origin": { - "prebuilt": { - "total": 0, - "enabled": 0, - "disabled": 0 - }, - "custom": { - "total": 0, - "enabled": 0, - "disabled": 0 - } - }, - "by_type": {}, - "by_outcome": {} - } - }, - "stats_over_interval": { - "message": "Not implemented" - }, - "history_over_interval": { - "buckets": [] - } - } -} -``` - -## Optional parameters - -All the three endpoints accept optional `interval` and `debug` request parameters. - -### Health interval - -You can change the interval over which the health stats will be calculated. If you don't specify it, by default health stats will be calculated over the last day with the granularity of 1 hour. - -```json -{ - "interval": { - "type": "last_week", - "granularity": "day" - } -} -``` - -You can also specify a custom date range with exact interval bounds. - -```json -{ - "interval": { - "type": "custom_range", - "granularity": "minute", - "from": "2023-05-20T16:24:21.628Z", - "to": "2023-05-26T16:24:21.628Z" - } -} -``` - -Please keep in mind that requesting large intervals with small granularity can generate substantial load on the system and enormous API responses. - -### Debug mode - -You can also include various debug information in the response, such as queries and aggregations sent to Elasticsearch and response received from it. - -```json -{ - "debug": true -} -``` - -In the response you will find something like that: - -```json -{ - "health": { - "debug": { - "rulesClient": { - "request": { - "aggs": { - "rulesByEnabled": { - "terms": { - "field": "alert.attributes.enabled" - } - }, - "rulesByOrigin": { - "terms": { - "field": "alert.attributes.params.immutable" - }, - "aggs": { - "rulesByEnabled": { - "terms": { - "field": "alert.attributes.enabled" - } - } - } - }, - "rulesByType": { - "terms": { - "field": "alert.attributes.alertTypeId" - }, - "aggs": { - "rulesByEnabled": { - "terms": { - "field": "alert.attributes.enabled" - } - } - } - }, - "rulesByOutcome": { - "terms": { - "field": "alert.attributes.lastRun.outcome" - }, - "aggs": { - "rulesByEnabled": { - "terms": { - "field": "alert.attributes.enabled" - } - } - } - } - } - }, - "response": { - "aggregations": { - "rulesByOutcome": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "warning", - "doc_count": 307, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 307 - } - ] - } - }, - { - "key": "succeeded", - "doc_count": 266, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 266 - } - ] - } - }, - { - "key": "failed", - "doc_count": 204, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 204 - } - ] - } - } - ] - }, - "rulesByType": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "siem.eqlRule", - "doc_count": 381, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 381 - } - ] - } - }, - { - "key": "siem.queryRule", - "doc_count": 325, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 325 - } - ] - } - }, - { - "key": "siem.mlRule", - "doc_count": 47, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 47 - } - ] - } - }, - { - "key": "siem.thresholdRule", - "doc_count": 18, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 18 - } - ] - } - }, - { - "key": "siem.newTermsRule", - "doc_count": 4, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 4 - } - ] - } - }, - { - "key": "siem.indicatorRule", - "doc_count": 2, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 2 - } - ] - } - } - ] - }, - "rulesByOrigin": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "true", - "doc_count": 776, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 776 - } - ] - } - }, - { - "key": "false", - "doc_count": 1, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 1 - } - ] - } - } - ] - }, - "rulesByEnabled": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": 1, - "key_as_string": "true", - "doc_count": 777 - } - ] - } - } - } - }, - "eventLog": { - "request": { - "aggs": { - "totalExecutions": { - "cardinality": { - "field": "kibana.alert.rule.execution.uuid" - } - }, - "executeEvents": { - "filter": { - "term": { - "event.action": "execute" - } - }, - "aggs": { - "executionDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_run_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - }, - "scheduleDelayNs": { - "percentiles": { - "field": "kibana.task.schedule_delay", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - } - } - }, - "statusChangeEvents": { - "filter": { - "bool": { - "filter": [ - { - "term": { - "event.action": "status-change" - } - } - ], - "must_not": [ - { - "terms": { - "kibana.alert.rule.execution.status": ["running", "going to run"] - } - } - ] - } - }, - "aggs": { - "executionsByStatus": { - "terms": { - "field": "kibana.alert.rule.execution.status" - } - } - } - }, - "executionMetricsEvents": { - "filter": { - "term": { - "event.action": "execution-metrics" - } - }, - "aggs": { - "gaps": { - "filter": { - "exists": { - "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" - } - }, - "aggs": { - "totalGapDurationS": { - "sum": { - "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" - } - } - } - }, - "searchDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_search_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - }, - "indexingDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_indexing_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - } - } - }, - "messageContainingEvents": { - "filter": { - "terms": { - "event.action": ["status-change", "message"] - } - }, - "aggs": { - "messagesByLogLevel": { - "terms": { - "field": "log.level" - } - }, - "errors": { - "filter": { - "term": { - "log.level": "error" - } - }, - "aggs": { - "topErrors": { - "categorize_text": { - "field": "message", - "size": 5, - "similarity_threshold": 99 - } - } - } - }, - "warnings": { - "filter": { - "term": { - "log.level": "warn" - } - }, - "aggs": { - "topWarnings": { - "categorize_text": { - "field": "message", - "size": 5, - "similarity_threshold": 99 - } - } - } - } - } - }, - "statsHistory": { - "date_histogram": { - "field": "@timestamp", - "calendar_interval": "hour" - }, - "aggs": { - "totalExecutions": { - "cardinality": { - "field": "kibana.alert.rule.execution.uuid" - } - }, - "executeEvents": { - "filter": { - "term": { - "event.action": "execute" - } - }, - "aggs": { - "executionDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_run_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - }, - "scheduleDelayNs": { - "percentiles": { - "field": "kibana.task.schedule_delay", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - } - } - }, - "statusChangeEvents": { - "filter": { - "bool": { - "filter": [ - { - "term": { - "event.action": "status-change" - } - } - ], - "must_not": [ - { - "terms": { - "kibana.alert.rule.execution.status": ["running", "going to run"] - } - } - ] - } - }, - "aggs": { - "executionsByStatus": { - "terms": { - "field": "kibana.alert.rule.execution.status" - } - } - } - }, - "executionMetricsEvents": { - "filter": { - "term": { - "event.action": "execution-metrics" - } - }, - "aggs": { - "gaps": { - "filter": { - "exists": { - "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" - } - }, - "aggs": { - "totalGapDurationS": { - "sum": { - "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" - } - } - } - }, - "searchDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_search_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - }, - "indexingDurationMs": { - "percentiles": { - "field": "kibana.alert.rule.execution.metrics.total_indexing_duration_ms", - "missing": 0, - "percents": [1, 5, 25, 50, 75, 95, 99] - } - } - } - }, - "messageContainingEvents": { - "filter": { - "terms": { - "event.action": ["status-change", "message"] - } - }, - "aggs": { - "messagesByLogLevel": { - "terms": { - "field": "log.level" - } - } - } - } - } - } - } - }, - "response": { - "aggregations": { - "statsHistory": { - "buckets": [ - { - "key_as_string": "2023-05-26T15:00:00.000Z", - "key": 1685113200000, - "doc_count": 11388, - "statusChangeEvents": { - "doc_count": 2751, - "executionsByStatus": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "failed", - "doc_count": 1336 - }, - { - "key": "partial failure", - "doc_count": 849 - }, - { - "key": "succeeded", - "doc_count": 566 - } - ] - } - }, - "totalExecutions": { - "value": 2245 - }, - "messageContainingEvents": { - "doc_count": 4996, - "messagesByLogLevel": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "info", - "doc_count": 2811 - }, - { - "key": "error", - "doc_count": 1336 - }, - { - "key": "warn", - "doc_count": 849 - } - ] - } - }, - "executeEvents": { - "doc_count": 2245, - "scheduleDelayNs": { - "values": { - "1.0": 256000000, - "5.0": 3086972222.222222, - "25.0": 3133000000, - "50.0": 6126000000, - "75.0": 59484250000, - "95.0": 179817250000, - "99.0": 202613000000 - } - }, - "executionDurationMs": { - "values": { - "1.0": 280.6, - "5.0": 327.7, - "25.0": 371.5208333333333, - "50.0": 415.6190476190476, - "75.0": 505.575, - "95.0": 740.4375, - "99.0": 1446.1500000000005 - } - } - }, - "executionMetricsEvents": { - "doc_count": 1902, - "searchDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 8, - "95.0": 25, - "99.0": 46 - } - }, - "gaps": { - "doc_count": 777, - "totalGapDurationS": { - "value": 514415894 - } - }, - "indexingDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - }, - { - "key_as_string": "2023-05-26T16:00:00.000Z", - "key": 1685116800000, - "doc_count": 28325, - "statusChangeEvents": { - "doc_count": 6126, - "executionsByStatus": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "succeeded", - "doc_count": 2390 - }, - { - "key": "partial failure", - "doc_count": 2305 - }, - { - "key": "failed", - "doc_count": 1431 - } - ] - } - }, - "totalExecutions": { - "value": 6170 - }, - "messageContainingEvents": { - "doc_count": 12252, - "messagesByLogLevel": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "info", - "doc_count": 8516 - }, - { - "key": "warn", - "doc_count": 2305 - }, - { - "key": "error", - "doc_count": 1431 - } - ] - } - }, - "executeEvents": { - "doc_count": 6126, - "scheduleDelayNs": { - "values": { - "1.0": 193000000, - "5.0": 3017785185.1851854, - "25.0": 3086000000, - "50.0": 3105877192.982456, - "75.0": 3134645161.290323, - "95.0": 6081772222.222222, - "99.0": 6122000000 - } - }, - "executionDurationMs": { - "values": { - "1.0": 275.17333333333335, - "5.0": 324.8014285714285, - "25.0": 377.0752688172043, - "50.0": 431, - "75.0": 532.3870967741935, - "95.0": 720.6761904761904, - "99.0": 922.6799999999985 - } - } - }, - "executionMetricsEvents": { - "doc_count": 3821, - "searchDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 9.8, - "75.0": 18, - "95.0": 40.17499999999999, - "99.0": 124 - } - }, - "gaps": { - "doc_count": 0, - "totalGapDurationS": { - "value": 0 - } - }, - "indexingDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - } - ] - }, - "statusChangeEvents": { - "doc_count": 8877, - "executionsByStatus": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "partial failure", - "doc_count": 3154 - }, - { - "key": "succeeded", - "doc_count": 2956 - }, - { - "key": "failed", - "doc_count": 2767 - } - ] - } - }, - "totalExecutions": { - "value": 8455 - }, - "messageContainingEvents": { - "doc_count": 17248, - "messagesByLogLevel": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 0, - "buckets": [ - { - "key": "info", - "doc_count": 11327 - }, - { - "key": "warn", - "doc_count": 3154 - }, - { - "key": "error", - "doc_count": 2767 - } - ] - }, - "warnings": { - "doc_count": 3154, - "topWarnings": { - "buckets": [ - { - "doc_count": 3154, - "key": "This rule is attempting to query data from Elasticsearch indices listed in the Index pattern section of the rule definition however no index matching was found This warning will continue to appear until matching index is created or this rule is disabled", - "regex": ".*?This.+?rule.+?is.+?attempting.+?to.+?query.+?data.+?from.+?Elasticsearch.+?indices.+?listed.+?in.+?the.+?Index.+?pattern.+?section.+?of.+?the.+?rule.+?definition.+?however.+?no.+?index.+?matching.+?was.+?found.+?This.+?warning.+?will.+?continue.+?to.+?appear.+?until.+?matching.+?index.+?is.+?created.+?or.+?this.+?rule.+?is.+?disabled.*?", - "max_matching_length": 342 - } - ] - } - }, - "errors": { - "doc_count": 2767, - "topErrors": { - "buckets": [ - { - "doc_count": 1802, - "key": "An error occurred during rule execution message verification_exception", - "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?verification_exception.*?", - "max_matching_length": 2064 - }, - { - "doc_count": 777, - "key": "were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances", - "regex": ".*?were.+?not.+?queried.+?between.+?this.+?rule.+?execution.+?and.+?the.+?last.+?execution.+?so.+?signals.+?may.+?have.+?been.+?missed.+?Consider.+?increasing.+?your.+?look.+?behind.+?time.+?or.+?adding.+?more.+?Kibana.+?instances.*?", - "max_matching_length": 216 - }, - { - "doc_count": 4, - "key": "An error occurred during rule execution message rare_error_code missing", - "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?rare_error_code.+?missing.*?", - "max_matching_length": 82 - }, - { - "doc_count": 4, - "key": "An error occurred during rule execution message v3_windows_anomalous_path_activity missing", - "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?v3_windows_anomalous_path_activity.+?missing.*?", - "max_matching_length": 103 - }, - { - "doc_count": 4, - "key": "An error occurred during rule execution message v3_windows_rare_user_type10_remote_login missing", - "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?v3_windows_rare_user_type10_remote_login.+?missing.*?", - "max_matching_length": 110 - } - ] - } - } - }, - "executeEvents": { - "doc_count": 8371, - "scheduleDelayNs": { - "values": { - "1.0": 206000000, - "5.0": 3027000000, - "25.0": 3092000000, - "50.0": 3116000000, - "75.0": 3278666666.6666665, - "95.0": 99656950000, - "99.0": 186632790000 - } - }, - "executionDurationMs": { - "values": { - "1.0": 275.5325, - "5.0": 326.07857142857137, - "25.0": 375.68969144460027, - "50.0": 427, - "75.0": 526.2948717948718, - "95.0": 727.2480952380952, - "99.0": 1009.5299999999934 - } - } - }, - "executionMetricsEvents": { - "doc_count": 5723, - "searchDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 4, - "75.0": 16, - "95.0": 34.43846153846145, - "99.0": 116.51333333333302 - } - }, - "gaps": { - "doc_count": 777, - "totalGapDurationS": { - "value": 514415894 - } - }, - "indexingDurationMs": { - "values": { - "1.0": 0, - "5.0": 0, - "25.0": 0, - "50.0": 0, - "75.0": 0, - "95.0": 0, - "99.0": 0 - } - } - } - } - } - } - } - } -} -``` +- [Detection Engine health data](./health_data.md) +- [Detection Engine health endpoints](./health_endpoints.md) diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/get_cluster_health/get_cluster_health_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/get_cluster_health/get_cluster_health_route.ts index dafa1e4a4a1df..fd2c07352dc95 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/get_cluster_health/get_cluster_health_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/get_cluster_health/get_cluster_health_route.ts @@ -51,9 +51,6 @@ export interface GetClusterHealthRequest { * Response body of the endpoint. */ export interface GetClusterHealthResponse { - // TODO: https://github.com/elastic/kibana/issues/125642 Implement the endpoint and remove the `message` property - message: 'Not implemented'; - /** * Request processing times and durations. */ diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_data.md b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_data.md new file mode 100644 index 0000000000000..052d81d9ffe6a --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_data.md @@ -0,0 +1,152 @@ +# Detection Engine health data + +This document describes the data (state, aggregated metrics, aggregated logs, and other data) we return or are planning to return from the Detection Engine health API. + +Legend for the tables below: + +- ✅ - implemented +- 🚧 - in development +- 👍 - planned +- ❓ - maybe planned +- ❌ - not planned or applicable +- TED - "total, enabled, disabled" (applies to the "number of rules" state or metrics) + +## Health overview + +Health overview data is intended to give a broad, high-level picture of detection rules' health and performance. It is returned from the following three endpoints: + +- **Cluster health**: `/internal/detection_engine/health/_cluster` + - Returns: health overview of the whole cluster + - Scope: all detection rules in all Kibana spaces +- **Space health**: `/internal/detection_engine/health/_space` + - Returns: health overview of a given Kibana space + - Scope: all detection rules in the space +- **Rule health**: `/internal/detection_engine/health/_rule` + - Returns: health overview of a given rule + - Scope: a given detection rule in a given Kibana space + +All three endpoints accept a datetime interval parameter (**"health interval"**) over which they calculate health metrics, such as the number of rule executions happened during this interval. + +All three endpoints return: + +- **Health state at the moment of the API call**. Applies to the "now" moment. Can answer the following type of questions: + - "What rules do I have now?" + - "Are my rules healthy now? What are their last execution statuses?" + - "Are my rules running fast enough now? What are their last execution durations?" +- **Health stats over the specified "health interval"**. Can answer the following type of questions: + - "Overall, were my rules healthy and performant last 24 hours?" + - "How many rule executions in total happened last 24 hours?" + - "What were typical rule execution errors and warnings last 24 hours?" + - "How fast, on average, were my rules executing during this timeframe?", where "on average" can be, for example, a median, or a 95th percentile of the "execution duration" metric. +- **Health history over the specified "health interval"**. Shows dynamics of change of health stats, calculated within the "health interval" in the form of a histogram (the same stats are calculated over each of the discreet sub-intervals of the whole interval). Can answer the following type of questions: + - "How was my rules' health and performance changing during the last 24 hours? Show me stats calculated for each hour." + - "How many rule executions happened every hour of the last 24 hours?" + - "What were typical rule execution errors and warnings every hour of the last 24 hours?" + - "How fast, on average, were my rules executing every hour of the last 24 hours?" + +Below is the data we return or could return from these three endpoints. + +### Health overview: state at the moment of the API call + +ℹ️ When we say "rule" we mean `{ space_id, rule_id, rule_name? }`. + +| Data | `_cluster` | `_space` | `_rule` | +| ------------------------------------------------------------------------ | ---------- | -------- | ------- | +| **RULE OBJECT** | | | | +| rule object with all attributes | ❌ | ❌ | ✅ | +| rule's execution summary (contains last execution status and metrics) | ❌ | ❌ | ✅ | +| rule's exceptions | ❌ | ❌ | ❓ | +| rule's actions | ❌ | ❌ | ✅ | +| rule's action connectors | ❌ | ❌ | ❓ | +| **SYSTEM** | | | | +| number of ES nodes: total | 👍 | ❌ | ❌ | +| number of ES nodes of each role | 👍 | ❌ | ❌ | +| number of Kibana instances: total | 👍 | ❌ | ❌ | +| number of Kibana instances of each role | 👍 | ❌ | ❌ | +| number of Kibana spaces: total | 👍 | ❌ | ❌ | +| number of Kibana spaces: w/ alerting rules (of all types) | 👍 | ❌ | ❌ | +| number of Kibana spaces: w/ detection rules | 👍 | ❌ | ❌ | +| **AGGREGATED RULES** | | | | +| number of all rules: TED | ✅ | ✅ | ❌ | +| number of prebuilt rules: TED | ✅ | ✅ | ❌ | +| number of custom rules: TED | ✅ | ✅ | ❌ | +| number of rules of each type: TED | ✅ | ✅ | ❌ | +| number of prebuilt rules of each type: TED | 👍 | 👍 | ❌ | +| number of custom rules of each type: TED | 👍 | 👍 | ❌ | +| number of rules with exceptions: TED | ❓ | ❓ | ❌ | +| number of rules with notification actions: TED | ❓ | ❓ | ❌ | +| number of rules with legacy notification actions: TED | ❓ | ❓ | ❌ | +| number of rules with response actions: TED | ❓ | ❓ | ❌ | +| **AGGREGATED LAST EXECUTION RESULTS** | | | | +| number of rules by execution outcome ("succeeded", "warning", "failed") | ✅ | ✅ | ❌ | +| top X most common "failed" outcomes | 👍 | 👍 | ❌ | +| top X most common "warning" outcomes | 👍 | 👍 | ❌ | +| number of rules for each most common execution outcome | 👍 | 👍 | ❌ | +| rules for each most common execution outcome | 👍 | 👍 | ❌ | +| top X rules by execution duration (desc) | 👍 | 👍 | ❌ | +| top X rules by search duration (desc) | 👍 | 👍 | ❌ | +| top X rules by indexing duration (desc) | 👍 | 👍 | ❌ | +| top X rules by detected gap duration (desc) | 👍 | 👍 | ❌ | +| top X rules by schedule delay aka drift (desc) | 👍 | 👍 | ❌ | +| top X rules by number of shards queried (desc) | 👍 | 👍 | ❌ | +| top X rules by number of shards queried in a particular data tier (desc) | 👍 | 👍 | ❌ | + +### Health overview: stats and history over interval + +ℹ️ [S, H] == [Stats over interval, History over interval] + +| Data | `_cluster` [S,H] | `_space` [S,H] | `_rule` [S,H] | +| ------------------------------------------------------------------- | ---------------- | -------------- | ------------- | +| **AGGREGATED EXECUTION STATUSES** | | | | +| number of executions: total | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| number of executions: by outcome ("succeeded", "warning", "failed") | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| top X "failed" outcomes (status messages) | [👍, ❓] | [👍, ❓] | [👍, ❓] | +| top X "warning" outcomes (status messages) | [👍, ❓] | [👍, ❓] | [👍, ❓] | +| **AGGREGATED EXECUTION METRICS** | | | | +| aggregated execution duration (percentiles: 50, 95, 99, 99.9) | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| aggregated search duration (percentiles: 50, 95, 99, 99.9) | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| aggregated indexing duration (percentiles: 50, 95, 99, 99.9) | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| aggregated schedule delay aka drift (percentiles: 50, 95, 99, 99.9) | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| detected gaps: total number | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| detected gaps: total duration | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| number of detected alerts (those we generated in memory) | [👍, 👍] | [👍, 👍] | [👍, 👍] | +| number of created alerts (those we wrote to the `.alerts-*` index) | [👍, 👍] | [👍, 👍] | [👍, 👍] | +| number of not created alerts because of cirquit breaker | [👍, 👍] | [👍, 👍] | [👍, 👍] | +| number of executions when cirquit breaker was hit | [👍, 👍] | [👍, 👍] | [👍, 👍] | +| number of triggered actions | [❓, ❓] | [❓, ❓] | [❓, ❓] | +| **AGGREGATED EXECUTION LOGS (MESSAGE EVENTS)** | | | | +| number of logged messages: total | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| number of logged messages: by log level | [✅, ✅] | [✅, ✅] | [✅, ✅] | +| top X errors (messages with log level "error") | [✅, ❓] | [✅, ❓] | [✅, ❓] | +| top X warnings (messages with log level "warn") | [✅, ❓] | [✅, ❓] | [✅, ❓] | +| top X error codes (we don't have error codes in our logs yet) | | | | + +## Health details + +Detailed health data can be used for digging deeper into detection rules' health and performance, when the overall picture is clear. It should be returned from dedicated endpoints. Each kind of details we can calculate within either of two scopes: + +- The whole cluster, i.e. all Kibana spaces. +- A given Kibana space. + +**NOTE**: As of now, we don't have any endpoints that would return detailed data. + +ℹ️ When we say "rule" we mean `{ space_id, rule_id, rule_name? }`. + +| Data | Scope: cluster | Scope: space | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------ | +| **RULES SORTED BY EXECUTION STATUSES** | | | +| top X rules by number of execution outcomes: total (desc) - in other words, rules that were running most often within a given interval | 👍 | 👍 | +| top X rules by number of execution outcomes: by outcome (desc) - in other words, rules that were failing/succeeding/etc most often within a given interval | 👍 | 👍 | +| **RULES SORTED BY EXECUTION METRICS** | | | +| top X rules by execution duration (percentile, desc) | 👍 | 👍 | +| top X rules by search duration (percentile, desc) | 👍 | 👍 | +| top X rules by indexing duration (percentile, desc) | 👍 | 👍 | +| top X rules by detected gap duration (percentile, desc) | 👍 | 👍 | +| top X rules by schedule delay aka drift (percentile, desc) | 👍 | 👍 | +| top X rules by number of shards queried (percentile, desc) | 👍 | 👍 | +| top X rules by number of shards queried in a particular data tier (percentile, desc) | 👍 | 👍 | +| top X rules that are consuming the most total execution time - summing execution time over the executions for that rule, so it accounts for rules that are running more often | 👍 | 👍 | +| **RULES SORTED BY EXECUTION LOGS (MESSAGE EVENTS)** | | | +| top X rules by number of logged messages (log level, desc) - errors and warnings are most interesting | 👍 | 👍 | +| **SOURCE INDICES / DATA QUALITY** | | | +| all rules that are querying indices with future timestamps + the actual index names with future timestamps in them (the API would need to check all rule's index patterns and data views) | 👍 | 👍 | diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_endpoints.md b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_endpoints.md new file mode 100644 index 0000000000000..c82153a0dad4e --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/health_endpoints.md @@ -0,0 +1,1944 @@ +# Detection Engine health endpoints + +## Rule health endpoint + +🚧 NOTE: this endpoint is **partially implemented**. 🚧 + +```txt +POST /internal/detection_engine/health/_rule +``` + +Get health overview of a rule. Scope: a given detection rule in the current Kibana space. +Returns: + +- health stats at the moment of the API call (rule and its execution summary) +- health stats over a specified period of time ("health interval") +- health stats history within the same interval in the form of a histogram + (the same stats are calculated over each of the discreet sub-intervals of the whole interval) + +Minimal required parameters: + +```json +{ + "rule_id": "d4beff10-f045-11ed-89d8-3b6931af10bc" +} +``` + +Response: + +```json +{ + "timings": { + "requested_at": "2023-05-26T16:09:54.128Z", + "processed_at": "2023-05-26T16:09:54.778Z", + "processing_time_ms": 650 + }, + "parameters": { + "interval": { + "type": "last_day", + "granularity": "hour", + "from": "2023-05-25T16:09:54.128Z", + "to": "2023-05-26T16:09:54.128Z", + "duration": "PT24H" + }, + "rule_id": "d4beff10-f045-11ed-89d8-3b6931af10bc" + }, + "health": { + "state_at_the_moment": { + "rule": { + "id": "d4beff10-f045-11ed-89d8-3b6931af10bc", + "updated_at": "2023-05-26T15:44:21.689Z", + "updated_by": "elastic", + "created_at": "2023-05-11T21:50:23.830Z", + "created_by": "elastic", + "name": "Test rule", + "tags": ["foo"], + "interval": "1m", + "enabled": true, + "revision": 2, + "description": "-", + "risk_score": 21, + "severity": "low", + "license": "", + "output_index": "", + "meta": { + "from": "6h", + "kibana_siem_app_url": "http://localhost:5601/kbn/app/security" + }, + "author": [], + "false_positives": [], + "from": "now-21660s", + "rule_id": "e46eaaf3-6d81-4cdb-8cbb-b2201a11358b", + "max_signals": 100, + "risk_score_mapping": [], + "severity_mapping": [], + "threat": [], + "to": "now", + "references": [], + "version": 3, + "exceptions_list": [], + "immutable": false, + "related_integrations": [], + "required_fields": [], + "setup": "", + "type": "query", + "language": "kuery", + "index": [ + "apm-*-transaction*", + "auditbeat-*", + "endgame-*", + "filebeat-*", + "logs-*", + "packetbeat-*", + "traces-apm*", + "winlogbeat-*", + "-*elastic-cloud-logs-*", + "foo-*" + ], + "query": "*", + "filters": [], + "actions": [ + { + "group": "default", + "id": "bd59c4e0-f045-11ed-89d8-3b6931af10bc", + "params": { + "body": "Hello world" + }, + "action_type_id": ".webhook", + "uuid": "f8b87eb0-58bb-4d4b-a584-084d44ab847e", + "frequency": { + "summary": true, + "throttle": null, + "notifyWhen": "onActiveAlert" + } + } + ], + "execution_summary": { + "last_execution": { + "date": "2023-05-26T16:09:36.848Z", + "status": "succeeded", + "status_order": 0, + "message": "Rule execution completed successfully", + "metrics": { + "total_search_duration_ms": 2, + "execution_gap_duration_s": 80395 + } + } + } + } + }, + "stats_over_interval": { + "number_of_executions": { + "total": 21, + "by_outcome": { + "succeeded": 20, + "warning": 0, + "failed": 1 + } + }, + "number_of_logged_messages": { + "total": 42, + "by_level": { + "error": 1, + "warn": 0, + "info": 41, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 1, + "total_duration_s": 80395 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 3061, + "5.0": 3083, + "25.0": 3112, + "50.0": 6049, + "75.0": 6069.5, + "95.0": 100093.79999999986, + "99.0": 207687 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 226, + "5.0": 228.2, + "25.0": 355.5, + "50.0": 422, + "75.0": 447, + "95.0": 677.75, + "99.0": 719 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 1.1, + "25.0": 2.75, + "50.0": 7, + "75.0": 13.5, + "95.0": 29.59999999999998, + "99.0": 45 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + }, + "top_errors": [ + { + "count": 1, + "message": "day were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances" + } + ], + "top_warnings": [] + }, + "history_over_interval": { + "buckets": [ + { + "timestamp": "2023-05-26T15:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 12, + "by_outcome": { + "succeeded": 11, + "warning": 0, + "failed": 1 + } + }, + "number_of_logged_messages": { + "total": 24, + "by_level": { + "error": 1, + "warn": 0, + "info": 23, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 1, + "total_duration_s": 80395 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 3106, + "5.0": 3106.8, + "25.0": 3124.5, + "50.0": 6067.5, + "75.0": 9060.5, + "95.0": 188124.59999999971, + "99.0": 207687 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 230, + "5.0": 236.2, + "25.0": 354, + "50.0": 405, + "75.0": 447.5, + "95.0": 563.3999999999999, + "99.0": 576 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0.20000000000000018, + "25.0": 2.5, + "50.0": 5, + "75.0": 14, + "95.0": 42.19999999999996, + "99.0": 45 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + }, + { + "timestamp": "2023-05-26T16:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 9, + "by_outcome": { + "succeeded": 9, + "warning": 0, + "failed": 0 + } + }, + "number_of_logged_messages": { + "total": 18, + "by_level": { + "error": 0, + "warn": 0, + "info": 18, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 0, + "total_duration_s": 0 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 3061, + "5.0": 3061, + "25.0": 3104.75, + "50.0": 3115, + "75.0": 6053, + "95.0": 6068, + "99.0": 6068 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 226.00000000000003, + "5.0": 226, + "25.0": 356, + "50.0": 436, + "75.0": 495.5, + "95.0": 719, + "99.0": 719 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 2, + "5.0": 2, + "25.0": 5.75, + "50.0": 8, + "75.0": 13.75, + "95.0": 17, + "99.0": 17 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + } + ] + } + } +} +``` + +## Space health endpoint + +🚧 NOTE: this endpoint is **partially implemented**. 🚧 + +```txt +POST /internal/detection_engine/health/_space +GET /internal/detection_engine/health/_space +``` + +Get health overview of the current Kibana space. Scope: all detection rules in the space. +Returns: + +- health stats at the moment of the API call +- health stats over a specified period of time ("health interval") +- health stats history within the same interval in the form of a histogram + (the same stats are calculated over each of the discreet sub-intervals of the whole interval) + +Minimal required parameters for the `POST` route: empty object. + +```json +{} +``` + +The `GET` route doesn't accept any parameters and uses the default parameters instead: + +- interval: `last_day` +- granularity: `hour` +- debug: `false` + +Response: + +```json +{ + "timings": { + "requested_at": "2023-05-26T16:24:21.628Z", + "processed_at": "2023-05-26T16:24:22.880Z", + "processing_time_ms": 1252 + }, + "parameters": { + "interval": { + "type": "last_day", + "granularity": "hour", + "from": "2023-05-25T16:24:21.628Z", + "to": "2023-05-26T16:24:21.628Z", + "duration": "PT24H" + } + }, + "health": { + "state_at_the_moment": { + "number_of_rules": { + "all": { + "total": 777, + "enabled": 777, + "disabled": 0 + }, + "by_origin": { + "prebuilt": { + "total": 776, + "enabled": 776, + "disabled": 0 + }, + "custom": { + "total": 1, + "enabled": 1, + "disabled": 0 + } + }, + "by_type": { + "siem.eqlRule": { + "total": 381, + "enabled": 381, + "disabled": 0 + }, + "siem.queryRule": { + "total": 325, + "enabled": 325, + "disabled": 0 + }, + "siem.mlRule": { + "total": 47, + "enabled": 47, + "disabled": 0 + }, + "siem.thresholdRule": { + "total": 18, + "enabled": 18, + "disabled": 0 + }, + "siem.newTermsRule": { + "total": 4, + "enabled": 4, + "disabled": 0 + }, + "siem.indicatorRule": { + "total": 2, + "enabled": 2, + "disabled": 0 + } + }, + "by_outcome": { + "warning": { + "total": 307, + "enabled": 307, + "disabled": 0 + }, + "succeeded": { + "total": 266, + "enabled": 266, + "disabled": 0 + }, + "failed": { + "total": 204, + "enabled": 204, + "disabled": 0 + } + } + } + }, + "stats_over_interval": { + "number_of_executions": { + "total": 5622, + "by_outcome": { + "succeeded": 1882, + "warning": 2129, + "failed": 2120 + } + }, + "number_of_logged_messages": { + "total": 11756, + "by_level": { + "error": 2120, + "warn": 2129, + "info": 7507, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 777, + "total_duration_s": 514415894 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 216, + "5.0": 3048.5, + "25.0": 3105, + "50.0": 3129, + "75.0": 6112.355119825708, + "95.0": 134006, + "99.0": 195578 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 275, + "5.0": 323.375, + "25.0": 370.80555555555554, + "50.0": 413.1122337092731, + "75.0": 502.25233127864715, + "95.0": 685.8055555555555, + "99.0": 1194.75 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 15, + "95.0": 30, + "99.0": 99.44000000000005 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + }, + "top_errors": [ + { + "count": 1202, + "message": "An error occurred during rule execution message verification_exception" + }, + { + "count": 777, + "message": "were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances" + }, + { + "count": 3, + "message": "An error occurred during rule execution message rare_error_code missing" + }, + { + "count": 3, + "message": "An error occurred during rule execution message v3_windows_anomalous_path_activity missing" + }, + { + "count": 3, + "message": "An error occurred during rule execution message v3_windows_rare_user_type10_remote_login missing" + } + ], + "top_warnings": [ + { + "count": 2129, + "message": "This rule is attempting to query data from Elasticsearch indices listed in the Index pattern section of the rule definition however no index matching was found This warning will continue to appear until matching index is created or this rule is disabled" + } + ] + }, + "history_over_interval": { + "buckets": [ + { + "timestamp": "2023-05-26T15:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 2245, + "by_outcome": { + "succeeded": 566, + "warning": 849, + "failed": 1336 + } + }, + "number_of_logged_messages": { + "total": 4996, + "by_level": { + "error": 1336, + "warn": 849, + "info": 2811, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 777, + "total_duration_s": 514415894 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 256, + "5.0": 3086.9722222222217, + "25.0": 3133, + "50.0": 6126, + "75.0": 59484.25, + "95.0": 179817.25, + "99.0": 202613 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 280.6, + "5.0": 327.7, + "25.0": 371.5208333333333, + "50.0": 415.6190476190476, + "75.0": 505.7642857142857, + "95.0": 740.4375, + "99.0": 1446.1500000000005 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 8, + "95.0": 25, + "99.0": 46 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + }, + { + "timestamp": "2023-05-26T16:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 3363, + "by_outcome": { + "succeeded": 1316, + "warning": 1280, + "failed": 784 + } + }, + "number_of_logged_messages": { + "total": 6760, + "by_level": { + "error": 784, + "warn": 1280, + "info": 4696, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 0, + "total_duration_s": 0 + }, + "schedule_delay_ms": { + "percentiles": { + "1.0": 207, + "5.0": 3042, + "25.0": 3098.46511627907, + "50.0": 3112, + "75.0": 3145.2820512820517, + "95.0": 6100.571428571428, + "99.0": 6123 + } + }, + "execution_duration_ms": { + "percentiles": { + "1.0": 275, + "5.0": 319.85714285714283, + "25.0": 370.0357142857143, + "50.0": 410.79999229108853, + "75.0": 500.7692307692308, + "95.0": 675, + "99.0": 781.3999999999996 + } + }, + "search_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 9, + "75.0": 17.555555555555557, + "95.0": 34, + "99.0": 110.5 + } + }, + "indexing_duration_ms": { + "percentiles": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + } + ] + } + } +} +``` + +## Cluster health endpoint + +🚧 NOTE: this endpoint is **partially implemented**. 🚧 + +```txt +POST /internal/detection_engine/health/_cluster +GET /internal/detection_engine/health/_cluster +``` + +Minimal required parameters for the `POST` route: empty object. + +```json +{} +``` + +The `GET` route doesn't accept any parameters and uses the default parameters instead: + +- interval: `last_day` +- granularity: `hour` +- debug: `false` + +Response: + +```json +{ + "timings": { + "requested_at": "2023-09-15T13:41:44.565Z", + "processed_at": "2023-09-15T13:41:44.648Z", + "processing_time_ms": 83 + }, + "parameters": { + "interval": { + "type": "last_day", + "granularity": "hour", + "from": "2023-09-14T13:41:44.565Z", + "to": "2023-09-15T13:41:44.565Z", + "duration": "PT24H" + } + }, + "health": { + "state_at_the_moment": { + "number_of_rules": { + "all": { + "total": 40, + "enabled": 40, + "disabled": 0 + }, + "by_origin": { + "prebuilt": { + "total": 40, + "enabled": 40, + "disabled": 0 + }, + "custom": { + "total": 0, + "enabled": 0, + "disabled": 0 + } + }, + "by_type": { + "siem.queryRule": { + "total": 28, + "enabled": 28, + "disabled": 0 + }, + "siem.mlRule": { + "total": 10, + "enabled": 10, + "disabled": 0 + }, + "siem.newTermsRule": { + "total": 2, + "enabled": 2, + "disabled": 0 + } + }, + "by_outcome": { + "warning": { + "total": 30, + "enabled": 30, + "disabled": 0 + }, + "failed": { + "total": 10, + "enabled": 10, + "disabled": 0 + } + } + } + }, + "stats_over_interval": { + "number_of_executions": { + "total": 290, + "by_outcome": { + "succeeded": 0, + "warning": 240, + "failed": 90 + } + }, + "number_of_logged_messages": { + "total": 620, + "by_level": { + "error": 90, + "warn": 240, + "info": 290, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 40, + "total_duration_s": 12986680 + }, + "schedule_delay_ms": { + "percentiles": { + "50.0": 261, + "95.0": 330999215.3, + "99.0": 331057597, + "99.9": 331057597 + } + }, + "execution_duration_ms": { + "percentiles": { + "50.0": 530.5, + "95.0": 1864.350000000016, + "99.0": 13863.33, + "99.9": 13871.133 + } + }, + "search_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + }, + "indexing_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + }, + "top_errors": [ + { + "count": 40, + "message": "days were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances" + }, + { + "count": 10, + "message": "An error occurred during rule execution message high_distinct_count_error_message missing" + }, + { + "count": 10, + "message": "An error occurred during rule execution message rare_error_code missing" + }, + { + "count": 10, + "message": "An error occurred during rule execution message rare_method_for_a_city missing" + }, + { + "count": 10, + "message": "An error occurred during rule execution message rare_method_for_a_username missing" + } + ], + "top_warnings": [ + { + "count": 240, + "message": "This rule is attempting to query data from Elasticsearch indices listed in the Index pattern section of the rule definition however no index matching filebeat logs-aws was found This warning will continue to appear until matching index is created or this rule is disabled" + } + ] + }, + "history_over_interval": { + "buckets": [ + { + "timestamp": "2023-09-15T12:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 110, + "by_outcome": { + "succeeded": 0, + "warning": 90, + "failed": 60 + } + }, + "number_of_logged_messages": { + "total": 260, + "by_level": { + "error": 60, + "warn": 90, + "info": 110, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 40, + "total_duration_s": 12986680 + }, + "schedule_delay_ms": { + "percentiles": { + "50.0": 2975, + "95.0": 331046564.55, + "99.0": 331057597, + "99.9": 331057597 + } + }, + "execution_duration_ms": { + "percentiles": { + "50.0": 677.5, + "95.0": 8943.65, + "99.0": 13868.73, + "99.9": 13871.673 + } + }, + "search_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + }, + "indexing_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + } + } + }, + { + "timestamp": "2023-09-15T13:00:00.000Z", + "stats": { + "number_of_executions": { + "total": 180, + "by_outcome": { + "succeeded": 0, + "warning": 150, + "failed": 30 + } + }, + "number_of_logged_messages": { + "total": 360, + "by_level": { + "error": 30, + "warn": 150, + "info": 180, + "debug": 0, + "trace": 0 + } + }, + "number_of_detected_gaps": { + "total": 0, + "total_duration_s": 0 + }, + "schedule_delay_ms": { + "percentiles": { + "50.0": 246.5, + "95.0": 3245.35, + "99.0": 3905.0100000000216, + "99.9": 6173.243000000005 + } + }, + "execution_duration_ms": { + "percentiles": { + "50.0": 503.5, + "95.0": 692.15, + "99.0": 758.63, + "99.9": 763.4630000000001 + } + }, + "search_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + }, + "indexing_duration_ms": { + "percentiles": { + "50.0": 0, + "95.0": 0, + "99.0": 0, + "99.9": 0 + } + } + } + } + ] + } + } +} +``` + +## Optional parameters + +All the three endpoints accept optional `interval` and `debug` request parameters. + +### Health interval + +You can change the interval over which the health stats will be calculated. If you don't specify it, by default health stats will be calculated over the last day with the granularity of 1 hour. + +```json +{ + "interval": { + "type": "last_week", + "granularity": "day" + } +} +``` + +You can also specify a custom date range with exact interval bounds. + +```json +{ + "interval": { + "type": "custom_range", + "granularity": "minute", + "from": "2023-05-20T16:24:21.628Z", + "to": "2023-05-26T16:24:21.628Z" + } +} +``` + +Please keep in mind that requesting large intervals with small granularity can generate substantial load on the system and enormous API responses. + +### Debug mode + +You can also include various debug information in the response, such as queries and aggregations sent to Elasticsearch and response received from it. + +```json +{ + "debug": true +} +``` + +In the response you will find something like that: + +```json +{ + "health": { + "debug": { + "rulesClient": { + "request": { + "aggs": { + "rulesByEnabled": { + "terms": { + "field": "alert.attributes.enabled" + } + }, + "rulesByOrigin": { + "terms": { + "field": "alert.attributes.params.immutable" + }, + "aggs": { + "rulesByEnabled": { + "terms": { + "field": "alert.attributes.enabled" + } + } + } + }, + "rulesByType": { + "terms": { + "field": "alert.attributes.alertTypeId" + }, + "aggs": { + "rulesByEnabled": { + "terms": { + "field": "alert.attributes.enabled" + } + } + } + }, + "rulesByOutcome": { + "terms": { + "field": "alert.attributes.lastRun.outcome" + }, + "aggs": { + "rulesByEnabled": { + "terms": { + "field": "alert.attributes.enabled" + } + } + } + } + } + }, + "response": { + "aggregations": { + "rulesByOutcome": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "warning", + "doc_count": 307, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 307 + } + ] + } + }, + { + "key": "succeeded", + "doc_count": 266, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 266 + } + ] + } + }, + { + "key": "failed", + "doc_count": 204, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 204 + } + ] + } + } + ] + }, + "rulesByType": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "siem.eqlRule", + "doc_count": 381, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 381 + } + ] + } + }, + { + "key": "siem.queryRule", + "doc_count": 325, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 325 + } + ] + } + }, + { + "key": "siem.mlRule", + "doc_count": 47, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 47 + } + ] + } + }, + { + "key": "siem.thresholdRule", + "doc_count": 18, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 18 + } + ] + } + }, + { + "key": "siem.newTermsRule", + "doc_count": 4, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 4 + } + ] + } + }, + { + "key": "siem.indicatorRule", + "doc_count": 2, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 2 + } + ] + } + } + ] + }, + "rulesByOrigin": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "true", + "doc_count": 776, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 776 + } + ] + } + }, + { + "key": "false", + "doc_count": 1, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 1 + } + ] + } + } + ] + }, + "rulesByEnabled": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 1, + "key_as_string": "true", + "doc_count": 777 + } + ] + } + } + } + }, + "eventLog": { + "request": { + "aggs": { + "totalExecutions": { + "cardinality": { + "field": "kibana.alert.rule.execution.uuid" + } + }, + "executeEvents": { + "filter": { + "term": { + "event.action": "execute" + } + }, + "aggs": { + "executionDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_run_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + }, + "scheduleDelayNs": { + "percentiles": { + "field": "kibana.task.schedule_delay", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + } + } + }, + "statusChangeEvents": { + "filter": { + "bool": { + "filter": [ + { + "term": { + "event.action": "status-change" + } + } + ], + "must_not": [ + { + "terms": { + "kibana.alert.rule.execution.status": ["running", "going to run"] + } + } + ] + } + }, + "aggs": { + "executionsByStatus": { + "terms": { + "field": "kibana.alert.rule.execution.status" + } + } + } + }, + "executionMetricsEvents": { + "filter": { + "term": { + "event.action": "execution-metrics" + } + }, + "aggs": { + "gaps": { + "filter": { + "exists": { + "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" + } + }, + "aggs": { + "totalGapDurationS": { + "sum": { + "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" + } + } + } + }, + "searchDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_search_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + }, + "indexingDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_indexing_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + } + } + }, + "messageContainingEvents": { + "filter": { + "terms": { + "event.action": ["status-change", "message"] + } + }, + "aggs": { + "messagesByLogLevel": { + "terms": { + "field": "log.level" + } + }, + "errors": { + "filter": { + "term": { + "log.level": "error" + } + }, + "aggs": { + "topErrors": { + "categorize_text": { + "field": "message", + "size": 5, + "similarity_threshold": 99 + } + } + } + }, + "warnings": { + "filter": { + "term": { + "log.level": "warn" + } + }, + "aggs": { + "topWarnings": { + "categorize_text": { + "field": "message", + "size": 5, + "similarity_threshold": 99 + } + } + } + } + } + }, + "statsHistory": { + "date_histogram": { + "field": "@timestamp", + "calendar_interval": "hour" + }, + "aggs": { + "totalExecutions": { + "cardinality": { + "field": "kibana.alert.rule.execution.uuid" + } + }, + "executeEvents": { + "filter": { + "term": { + "event.action": "execute" + } + }, + "aggs": { + "executionDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_run_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + }, + "scheduleDelayNs": { + "percentiles": { + "field": "kibana.task.schedule_delay", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + } + } + }, + "statusChangeEvents": { + "filter": { + "bool": { + "filter": [ + { + "term": { + "event.action": "status-change" + } + } + ], + "must_not": [ + { + "terms": { + "kibana.alert.rule.execution.status": ["running", "going to run"] + } + } + ] + } + }, + "aggs": { + "executionsByStatus": { + "terms": { + "field": "kibana.alert.rule.execution.status" + } + } + } + }, + "executionMetricsEvents": { + "filter": { + "term": { + "event.action": "execution-metrics" + } + }, + "aggs": { + "gaps": { + "filter": { + "exists": { + "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" + } + }, + "aggs": { + "totalGapDurationS": { + "sum": { + "field": "kibana.alert.rule.execution.metrics.execution_gap_duration_s" + } + } + } + }, + "searchDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_search_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + }, + "indexingDurationMs": { + "percentiles": { + "field": "kibana.alert.rule.execution.metrics.total_indexing_duration_ms", + "missing": 0, + "percents": [1, 5, 25, 50, 75, 95, 99] + } + } + } + }, + "messageContainingEvents": { + "filter": { + "terms": { + "event.action": ["status-change", "message"] + } + }, + "aggs": { + "messagesByLogLevel": { + "terms": { + "field": "log.level" + } + } + } + } + } + } + } + }, + "response": { + "aggregations": { + "statsHistory": { + "buckets": [ + { + "key_as_string": "2023-05-26T15:00:00.000Z", + "key": 1685113200000, + "doc_count": 11388, + "statusChangeEvents": { + "doc_count": 2751, + "executionsByStatus": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "failed", + "doc_count": 1336 + }, + { + "key": "partial failure", + "doc_count": 849 + }, + { + "key": "succeeded", + "doc_count": 566 + } + ] + } + }, + "totalExecutions": { + "value": 2245 + }, + "messageContainingEvents": { + "doc_count": 4996, + "messagesByLogLevel": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "info", + "doc_count": 2811 + }, + { + "key": "error", + "doc_count": 1336 + }, + { + "key": "warn", + "doc_count": 849 + } + ] + } + }, + "executeEvents": { + "doc_count": 2245, + "scheduleDelayNs": { + "values": { + "1.0": 256000000, + "5.0": 3086972222.222222, + "25.0": 3133000000, + "50.0": 6126000000, + "75.0": 59484250000, + "95.0": 179817250000, + "99.0": 202613000000 + } + }, + "executionDurationMs": { + "values": { + "1.0": 280.6, + "5.0": 327.7, + "25.0": 371.5208333333333, + "50.0": 415.6190476190476, + "75.0": 505.575, + "95.0": 740.4375, + "99.0": 1446.1500000000005 + } + } + }, + "executionMetricsEvents": { + "doc_count": 1902, + "searchDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 8, + "95.0": 25, + "99.0": 46 + } + }, + "gaps": { + "doc_count": 777, + "totalGapDurationS": { + "value": 514415894 + } + }, + "indexingDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + }, + { + "key_as_string": "2023-05-26T16:00:00.000Z", + "key": 1685116800000, + "doc_count": 28325, + "statusChangeEvents": { + "doc_count": 6126, + "executionsByStatus": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "succeeded", + "doc_count": 2390 + }, + { + "key": "partial failure", + "doc_count": 2305 + }, + { + "key": "failed", + "doc_count": 1431 + } + ] + } + }, + "totalExecutions": { + "value": 6170 + }, + "messageContainingEvents": { + "doc_count": 12252, + "messagesByLogLevel": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "info", + "doc_count": 8516 + }, + { + "key": "warn", + "doc_count": 2305 + }, + { + "key": "error", + "doc_count": 1431 + } + ] + } + }, + "executeEvents": { + "doc_count": 6126, + "scheduleDelayNs": { + "values": { + "1.0": 193000000, + "5.0": 3017785185.1851854, + "25.0": 3086000000, + "50.0": 3105877192.982456, + "75.0": 3134645161.290323, + "95.0": 6081772222.222222, + "99.0": 6122000000 + } + }, + "executionDurationMs": { + "values": { + "1.0": 275.17333333333335, + "5.0": 324.8014285714285, + "25.0": 377.0752688172043, + "50.0": 431, + "75.0": 532.3870967741935, + "95.0": 720.6761904761904, + "99.0": 922.6799999999985 + } + } + }, + "executionMetricsEvents": { + "doc_count": 3821, + "searchDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 9.8, + "75.0": 18, + "95.0": 40.17499999999999, + "99.0": 124 + } + }, + "gaps": { + "doc_count": 0, + "totalGapDurationS": { + "value": 0 + } + }, + "indexingDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + } + ] + }, + "statusChangeEvents": { + "doc_count": 8877, + "executionsByStatus": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "partial failure", + "doc_count": 3154 + }, + { + "key": "succeeded", + "doc_count": 2956 + }, + { + "key": "failed", + "doc_count": 2767 + } + ] + } + }, + "totalExecutions": { + "value": 8455 + }, + "messageContainingEvents": { + "doc_count": 17248, + "messagesByLogLevel": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "info", + "doc_count": 11327 + }, + { + "key": "warn", + "doc_count": 3154 + }, + { + "key": "error", + "doc_count": 2767 + } + ] + }, + "warnings": { + "doc_count": 3154, + "topWarnings": { + "buckets": [ + { + "doc_count": 3154, + "key": "This rule is attempting to query data from Elasticsearch indices listed in the Index pattern section of the rule definition however no index matching was found This warning will continue to appear until matching index is created or this rule is disabled", + "regex": ".*?This.+?rule.+?is.+?attempting.+?to.+?query.+?data.+?from.+?Elasticsearch.+?indices.+?listed.+?in.+?the.+?Index.+?pattern.+?section.+?of.+?the.+?rule.+?definition.+?however.+?no.+?index.+?matching.+?was.+?found.+?This.+?warning.+?will.+?continue.+?to.+?appear.+?until.+?matching.+?index.+?is.+?created.+?or.+?this.+?rule.+?is.+?disabled.*?", + "max_matching_length": 342 + } + ] + } + }, + "errors": { + "doc_count": 2767, + "topErrors": { + "buckets": [ + { + "doc_count": 1802, + "key": "An error occurred during rule execution message verification_exception", + "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?verification_exception.*?", + "max_matching_length": 2064 + }, + { + "doc_count": 777, + "key": "were not queried between this rule execution and the last execution so signals may have been missed Consider increasing your look behind time or adding more Kibana instances", + "regex": ".*?were.+?not.+?queried.+?between.+?this.+?rule.+?execution.+?and.+?the.+?last.+?execution.+?so.+?signals.+?may.+?have.+?been.+?missed.+?Consider.+?increasing.+?your.+?look.+?behind.+?time.+?or.+?adding.+?more.+?Kibana.+?instances.*?", + "max_matching_length": 216 + }, + { + "doc_count": 4, + "key": "An error occurred during rule execution message rare_error_code missing", + "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?rare_error_code.+?missing.*?", + "max_matching_length": 82 + }, + { + "doc_count": 4, + "key": "An error occurred during rule execution message v3_windows_anomalous_path_activity missing", + "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?v3_windows_anomalous_path_activity.+?missing.*?", + "max_matching_length": 103 + }, + { + "doc_count": 4, + "key": "An error occurred during rule execution message v3_windows_rare_user_type10_remote_login missing", + "regex": ".*?An.+?error.+?occurred.+?during.+?rule.+?execution.+?message.+?v3_windows_rare_user_type10_remote_login.+?missing.*?", + "max_matching_length": 110 + } + ] + } + } + }, + "executeEvents": { + "doc_count": 8371, + "scheduleDelayNs": { + "values": { + "1.0": 206000000, + "5.0": 3027000000, + "25.0": 3092000000, + "50.0": 3116000000, + "75.0": 3278666666.6666665, + "95.0": 99656950000, + "99.0": 186632790000 + } + }, + "executionDurationMs": { + "values": { + "1.0": 275.5325, + "5.0": 326.07857142857137, + "25.0": 375.68969144460027, + "50.0": 427, + "75.0": 526.2948717948718, + "95.0": 727.2480952380952, + "99.0": 1009.5299999999934 + } + } + }, + "executionMetricsEvents": { + "doc_count": 5723, + "searchDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 4, + "75.0": 16, + "95.0": 34.43846153846145, + "99.0": 116.51333333333302 + } + }, + "gaps": { + "doc_count": 777, + "totalGapDurationS": { + "value": 514415894 + } + }, + "indexingDurationMs": { + "values": { + "1.0": 0, + "5.0": 0, + "25.0": 0, + "50.0": 0, + "75.0": 0, + "95.0": 0, + "99.0": 0 + } + } + } + } + } + } + } + } +} +``` diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.mock.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.mock.ts index 6bd740a87cf54..6fac9e9b38521 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.mock.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.mock.ts @@ -10,17 +10,13 @@ import { healthStatsMock } from './health_stats.mock'; const getEmptyClusterHealthSnapshot = (): ClusterHealthSnapshot => { return { - stats_at_the_moment: healthStatsMock.getEmptyRuleStats(), - stats_over_interval: { - message: 'Not implemented', - }, + state_at_the_moment: healthStatsMock.getEmptyHealthOverviewState(), + stats_over_interval: healthStatsMock.getEmptyHealthOverviewStats(), history_over_interval: { buckets: [ { timestamp: '2023-05-15T16:12:14.967Z', - stats: { - message: 'Not implemented', - }, + stats: healthStatsMock.getEmptyHealthOverviewStats(), }, ], }, diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.ts index 441eef935ade5..bbf838a828dfe 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/cluster_health.ts @@ -6,7 +6,7 @@ */ import type { HealthParameters, HealthSnapshot } from './health_metadata'; -import type { RuleStats, StatsHistory } from './health_stats'; +import type { HealthOverviewStats, HealthOverviewState, HealthHistory } from './health_stats'; /** * Health calculation parameters for the whole cluster. @@ -18,30 +18,27 @@ export type ClusterHealthParameters = HealthParameters; */ export interface ClusterHealthSnapshot extends HealthSnapshot { /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ - stats_at_the_moment: ClusterHealthStatsAtTheMoment; + state_at_the_moment: ClusterHealthState; /** * Health stats calculated over the interval specified in the health parameters. */ - stats_over_interval: ClusterHealthStatsOverInterval; + stats_over_interval: ClusterHealthStats; /** * History of change of the same health stats during the interval. */ - history_over_interval: StatsHistory; + history_over_interval: HealthHistory; } /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ -export type ClusterHealthStatsAtTheMoment = RuleStats; +export type ClusterHealthState = HealthOverviewState; /** * Health stats calculated over a given interval. */ -export interface ClusterHealthStatsOverInterval { - // TODO: https://github.com/elastic/kibana/issues/125642 Implement and delete this `message` - message: 'Not implemented'; -} +export type ClusterHealthStats = HealthOverviewStats; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.mock.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.mock.ts index 545a1b0ef0440..ffb9275bdd89a 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.mock.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.mock.ts @@ -7,12 +7,12 @@ import type { AggregatedMetric, - RuleExecutionStats, - RuleStats, + HealthOverviewStats, + HealthOverviewState, TotalEnabledDisabled, } from './health_stats'; -const getEmptyRuleStats = (): RuleStats => { +const getEmptyHealthOverviewState = (): HealthOverviewState => { return { number_of_rules: { all: getZeroTotalEnabledDisabled(), @@ -34,7 +34,7 @@ const getZeroTotalEnabledDisabled = (): TotalEnabledDisabled => { }; }; -const getEmptyRuleExecutionStats = (): RuleExecutionStats => { +const getEmptyHealthOverviewStats = (): HealthOverviewStats => { return { number_of_executions: { total: 0, @@ -70,18 +70,15 @@ const getEmptyRuleExecutionStats = (): RuleExecutionStats => { const getZeroAggregatedMetric = (): AggregatedMetric => { return { percentiles: { - '1.0': 0, - '5.0': 0, - '25.0': 0, '50.0': 0, - '75.0': 0, '95.0': 0, '99.0': 0, + '99.9': 0, }, }; }; export const healthStatsMock = { - getEmptyRuleStats, - getEmptyRuleExecutionStats, + getEmptyHealthOverviewState, + getEmptyHealthOverviewStats, }; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.ts index 4af7ea8c6bd07..3098b3c69c4a3 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/health_stats.ts @@ -10,7 +10,7 @@ import type { RuleLastRunOutcomes } from '@kbn/alerting-plugin/common'; import type { LogLevel } from '../../model'; // ------------------------------------------------------------------------------------------------- -// Stats history (date histogram) +// History of health stats (date histogram) /** * History of change of a set of stats over a time interval. The interval is split into discreet buckets, @@ -19,14 +19,14 @@ import type { LogLevel } from '../../model'; * This model corresponds to the `date_histogram` aggregation of Elasticsearch: * https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html */ -export interface StatsHistory { - buckets: Array>; +export interface HealthHistory { + buckets: Array>; } /** * Sub-interval with stats calculated over it. */ -export interface StatsBucket { +export interface HealthBucket { /** * Start timestamp of the sub-interval. */ @@ -39,23 +39,15 @@ export interface StatsBucket { } // ------------------------------------------------------------------------------------------------- -// Rule stats - -// TODO: https://github.com/elastic/kibana/issues/125642 Add more stats, such as: -// - number of Kibana instances -// - number of Kibana spaces -// - number of rules with exceptions -// - number of rules with notification actions (total, normal, legacy) -// - number of rules with response actions -// - top X last failed status messages + rule ids for each status -// - top X last partial failure status messages + rule ids for each status -// - top X slowest rules by any metrics (last total execution time, search time, indexing time, etc) -// - top X rules with the largest schedule delay (drift) +// Health overview state + +// TODO: https://github.com/elastic/kibana/issues/125642 Add more data, see health_data.md /** - * "Static" stats calculated for a set of rules, such as number of enabled and disabled rules, etc. + * "Static" health state at the moment of the API call. Calculated for a set of rules. + * Example: number of enabled and disabled rules. */ -export interface RuleStats { +export interface HealthOverviewState { /** * Various counts of different rules. */ @@ -108,19 +100,15 @@ export interface TotalEnabledDisabled { } // ------------------------------------------------------------------------------------------------- -// Rule execution stats +// Health overview stats -// TODO: https://github.com/elastic/kibana/issues/125642 Add more stats, such as: -// - number of detected alerts (source event "hits") -// - number of created alerts (those we wrote to the .alerts-* index) -// - number of times rule hit cirquit breaker, number of not created alerts because of that -// - number of triggered actions -// - top gaps +// TODO: https://github.com/elastic/kibana/issues/125642 Add more data, see health_data.md /** - * "Dynamic" rule execution stats. Can be calculated either for a set of rules or for a single rule. + * "Dynamic" health stats over a specified "health interval". Can be calculated either + * for a set of rules or for a single rule. */ -export interface RuleExecutionStats { +export interface HealthOverviewStats { /** * Number of rule executions. */ @@ -242,13 +230,10 @@ export interface AggregatedMetric { * Distribution of values of an aggregated metric represented by a set of discreet percentiles. * @example * { - * '1.0': 27, - * '5.0': 150, - * '25.0': 240, * '50.0': 420, - * '75.0': 700, * '95.0': 2500, * '99.0': 7800, + * '99.9': 10000, * } */ export type Percentiles = Record; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.mock.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.mock.ts index 961a057b2603e..50cb91cf202c5 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.mock.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.mock.ts @@ -11,15 +11,15 @@ import type { RuleHealthSnapshot } from './rule_health'; const getEmptyRuleHealthSnapshot = (): RuleHealthSnapshot => { return { - stats_at_the_moment: { + state_at_the_moment: { rule: getRulesSchemaMock(), }, - stats_over_interval: healthStatsMock.getEmptyRuleExecutionStats(), + stats_over_interval: healthStatsMock.getEmptyHealthOverviewStats(), history_over_interval: { buckets: [ { timestamp: '2023-05-15T16:12:14.967Z', - stats: healthStatsMock.getEmptyRuleExecutionStats(), + stats: healthStatsMock.getEmptyHealthOverviewStats(), }, ], }, diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.ts index 59756df926e27..77471270695bb 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/rule_health.ts @@ -7,7 +7,7 @@ import type { RuleResponse } from '../../../model'; import type { HealthParameters, HealthSnapshot } from './health_metadata'; -import type { RuleExecutionStats, StatsHistory } from './health_stats'; +import type { HealthOverviewStats, HealthHistory } from './health_stats'; /** * Health calculation parameters for a given rule. @@ -24,25 +24,25 @@ export interface RuleHealthParameters extends HealthParameters { */ export interface RuleHealthSnapshot extends HealthSnapshot { /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ - stats_at_the_moment: RuleHealthStatsAtTheMoment; + state_at_the_moment: RuleHealthState; /** * Health stats calculated over the interval specified in the health parameters. */ - stats_over_interval: RuleHealthStatsOverInterval; + stats_over_interval: RuleHealthStats; /** * History of change of the same health stats during the interval. */ - history_over_interval: StatsHistory; + history_over_interval: HealthHistory; } /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ -export interface RuleHealthStatsAtTheMoment { +export interface RuleHealthState { /** * Rule object including its current execution summary. */ @@ -52,4 +52,4 @@ export interface RuleHealthStatsAtTheMoment { /** * Health stats calculated over a given interval. */ -export type RuleHealthStatsOverInterval = RuleExecutionStats; +export type RuleHealthStats = HealthOverviewStats; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.mock.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.mock.ts index 60e1514cee59e..e445a275d6a8c 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.mock.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.mock.ts @@ -10,13 +10,13 @@ import type { SpaceHealthSnapshot } from './space_health'; const getEmptySpaceHealthSnapshot = (): SpaceHealthSnapshot => { return { - stats_at_the_moment: healthStatsMock.getEmptyRuleStats(), - stats_over_interval: healthStatsMock.getEmptyRuleExecutionStats(), + state_at_the_moment: healthStatsMock.getEmptyHealthOverviewState(), + stats_over_interval: healthStatsMock.getEmptyHealthOverviewStats(), history_over_interval: { buckets: [ { timestamp: '2023-05-15T16:12:14.967Z', - stats: healthStatsMock.getEmptyRuleExecutionStats(), + stats: healthStatsMock.getEmptyHealthOverviewStats(), }, ], }, diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.ts index 35648a9257570..173f8e9af1a62 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/detection_engine_health/model/space_health.ts @@ -6,7 +6,7 @@ */ import type { HealthParameters, HealthSnapshot } from './health_metadata'; -import type { RuleExecutionStats, RuleStats, StatsHistory } from './health_stats'; +import type { HealthOverviewStats, HealthOverviewState, HealthHistory } from './health_stats'; /** * Health calculation parameters for the current Kibana space. @@ -18,27 +18,27 @@ export type SpaceHealthParameters = HealthParameters; */ export interface SpaceHealthSnapshot extends HealthSnapshot { /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ - stats_at_the_moment: SpaceHealthStatsAtTheMoment; + state_at_the_moment: SpaceHealthState; /** * Health stats calculated over the interval specified in the health parameters. */ - stats_over_interval: SpaceHealthStatsOverInterval; + stats_over_interval: SpaceHealthStats; /** * History of change of the same health stats during the interval. */ - history_over_interval: StatsHistory; + history_over_interval: HealthHistory; } /** - * Health stats at the moment of the calculation request. + * Health state at the moment of the calculation request. */ -export type SpaceHealthStatsAtTheMoment = RuleStats; +export type SpaceHealthState = HealthOverviewState; /** * Health stats calculated over a given interval. */ -export type SpaceHealthStatsOverInterval = RuleExecutionStats; +export type SpaceHealthStats = HealthOverviewStats; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts index 6d9faeaa95c7f..719f46788a524 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_cluster_health/get_cluster_health_route.ts @@ -26,7 +26,7 @@ import { validateGetClusterHealthRequest } from './get_cluster_health_request'; /** * Get health overview of the whole cluster. Scope: all detection rules in all Kibana spaces. * Returns: - * - health stats at the moment of the API call + * - health state at the moment of the API call * - health stats over a specified period of time ("health interval") * - health stats history within the same interval in the form of a histogram * (the same stats are calculated over each of the discreet sub-intervals of the whole interval) @@ -111,8 +111,6 @@ const handleClusterHealthRequest = async (args: HandleClusterHealthRequestArgs) const clusterHealth = await healthClient.calculateClusterHealth(clusterHealthParameters); const responseBody: GetClusterHealthResponse = { - // TODO: https://github.com/elastic/kibana/issues/125642 Implement the endpoint and remove the `message` property - message: 'Not implemented', timings: calculateHealthTimings(params.requestReceivedAt), parameters: clusterHealthParameters, health: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts index 310514d17f968..a69f7961b19f8 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_rule_health/get_rule_health_route.ts @@ -23,7 +23,7 @@ import { validateGetRuleHealthRequest } from './get_rule_health_request'; /** * Get health overview of a rule. Scope: a given detection rule in the current Kibana space. * Returns: - * - health stats at the moment of the API call (rule and its execution summary) + * - health state at the moment of the API call (rule and its execution summary) * - health stats over a specified period of time ("health interval") * - health stats history within the same interval in the form of a histogram * (the same stats are calculated over each of the discreet sub-intervals of the whole interval) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts index d76a2212f29c0..96ced4e34151d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/detection_engine_health/get_space_health/get_space_health_route.ts @@ -26,7 +26,7 @@ import { validateGetSpaceHealthRequest } from './get_space_health_request'; /** * Get health overview of the current Kibana space. Scope: all detection rules in the space. * Returns: - * - health stats at the moment of the API call + * - health state at the moment of the API call * - health stats over a specified period of time ("health interval") * - health stats history within the same interval in the form of a histogram * (the same stats are calculated over each of the discreet sub-intervals of the whole interval) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/detection_engine_health_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/detection_engine_health_client.ts index af7066dfa780c..71eb37b7286c6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/detection_engine_health_client.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/detection_engine_health_client.ts @@ -20,16 +20,19 @@ import type { import type { IEventLogHealthClient } from './event_log/event_log_health_client'; import type { IRuleObjectsHealthClient } from './rule_objects/rule_objects_health_client'; +import type { IRuleSpacesClient } from './rule_spaces/rule_spaces_client'; import type { IDetectionEngineHealthClient } from './detection_engine_health_client_interface'; import { installAssetsForRuleMonitoring } from './assets/install_assets_for_rule_monitoring'; export const createDetectionEngineHealthClient = ( + ruleSpacesClient: IRuleSpacesClient, ruleObjectsHealthClient: IRuleObjectsHealthClient, eventLogHealthClient: IEventLogHealthClient, savedObjectsImporter: ISavedObjectsImporter, - logger: Logger, - currentSpaceId: string + logger: Logger ): IDetectionEngineHealthClient => { + const currentSpaceId = ruleSpacesClient.getCurrentSpaceId(); + return { calculateRuleHealth: (args: RuleHealthParameters): Promise => { return withSecuritySpan('IDetectionEngineHealthClient.calculateRuleHealth', async () => { @@ -41,7 +44,7 @@ export const createDetectionEngineHealthClient = ( const statsBasedOnEventLog = await eventLogHealthClient.calculateRuleHealth(args); return { - stats_at_the_moment: statsBasedOnRuleObjects.stats_at_the_moment, + state_at_the_moment: statsBasedOnRuleObjects.state_at_the_moment, stats_over_interval: statsBasedOnEventLog.stats_over_interval, history_over_interval: statsBasedOnEventLog.history_over_interval, debug: { @@ -73,7 +76,7 @@ export const createDetectionEngineHealthClient = ( ]); return { - stats_at_the_moment: statsBasedOnRuleObjects.stats_at_the_moment, + state_at_the_moment: statsBasedOnRuleObjects.state_at_the_moment, stats_over_interval: statsBasedOnEventLog.stats_over_interval, history_over_interval: statsBasedOnEventLog.history_over_interval, debug: { @@ -104,7 +107,7 @@ export const createDetectionEngineHealthClient = ( ]); return { - stats_at_the_moment: statsBasedOnRuleObjects.stats_at_the_moment, + state_at_the_moment: statsBasedOnRuleObjects.state_at_the_moment, stats_over_interval: statsBasedOnEventLog.stats_over_interval, history_over_interval: statsBasedOnEventLog.history_over_interval, debug: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/health_stats_for_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/health_stats_for_rule.ts index 7704bdd3f2441..72d93f0d67777 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/health_stats_for_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/health_stats_for_rule.ts @@ -11,8 +11,8 @@ import type { AggregateEventsBySavedObjectResult } from '@kbn/event-log-plugin/s import type { HealthIntervalGranularity, RuleHealthSnapshot, - RuleHealthStatsOverInterval, - StatsHistory, + RuleHealthStats, + HealthHistory, } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; import type { RawData } from '../../../utils/normalization'; @@ -57,7 +57,7 @@ const getRuleExecutionStatsHistoryAggregation = ( export const normalizeRuleHealthAggregationResult = ( result: AggregateEventsBySavedObjectResult, requestAggs: Record -): Omit => { +): Omit => { const aggregations = result.aggregations ?? {}; return { stats_over_interval: normalizeRuleExecutionStatsAggregationResult( @@ -76,7 +76,7 @@ export const normalizeRuleHealthAggregationResult = ( const normalizeHistoryOverInterval = ( aggregations: Record -): StatsHistory => { +): HealthHistory => { const statsHistory = aggregations.statsHistory || {}; return { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/rule_execution_stats.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/rule_execution_stats.ts index 7c3b595be1565..4151355419586 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/rule_execution_stats.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/aggregations/rule_execution_stats.ts @@ -13,7 +13,7 @@ import type { NumberOfDetectedGaps, NumberOfExecutions, NumberOfLoggedMessages, - RuleExecutionStats, + HealthOverviewStats, TopMessages, RuleExecutionStatus, } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; @@ -26,23 +26,33 @@ import { import { DEFAULT_PERCENTILES } from '../../../utils/es_aggregations'; import type { RawData } from '../../../utils/normalization'; import * as f from '../../../event_log/event_log_fields'; +import { + ALERTING_PROVIDER, + RULE_EXECUTION_LOG_PROVIDER, +} from '../../../event_log/event_log_constants'; export type RuleExecutionStatsAggregationLevel = 'whole-interval' | 'histogram'; export const getRuleExecutionStatsAggregation = ( - aggregationContext: RuleExecutionStatsAggregationLevel + aggregationLevel: RuleExecutionStatsAggregationLevel ): Record => { return { - totalExecutions: { - cardinality: { - field: f.RULE_EXECUTION_UUID, - }, - }, executeEvents: { filter: { - term: { [f.EVENT_ACTION]: 'execute' }, + bool: { + filter: [ + { term: { [f.EVENT_PROVIDER]: ALERTING_PROVIDER } }, + { term: { [f.EVENT_ACTION]: 'execute' } }, + { term: { [f.EVENT_CATEGORY]: 'siem' } }, + ], + }, }, aggs: { + totalExecutions: { + cardinality: { + field: f.RULE_EXECUTION_UUID, + }, + }, executionDurationMs: { percentiles: { field: f.RULE_EXECUTION_TOTAL_DURATION_MS, @@ -63,11 +73,8 @@ export const getRuleExecutionStatsAggregation = ( filter: { bool: { filter: [ - { - term: { - [f.EVENT_ACTION]: RuleExecutionEventType['status-change'], - }, - }, + { term: { [f.EVENT_PROVIDER]: RULE_EXECUTION_LOG_PROVIDER } }, + { term: { [f.EVENT_ACTION]: RuleExecutionEventType['status-change'] } }, ], must_not: [ { @@ -91,7 +98,12 @@ export const getRuleExecutionStatsAggregation = ( }, executionMetricsEvents: { filter: { - term: { [f.EVENT_ACTION]: RuleExecutionEventType['execution-metrics'] }, + bool: { + filter: [ + { term: { [f.EVENT_PROVIDER]: RULE_EXECUTION_LOG_PROVIDER } }, + { term: { [f.EVENT_ACTION]: RuleExecutionEventType['execution-metrics'] } }, + ], + }, }, aggs: { gaps: { @@ -126,10 +138,17 @@ export const getRuleExecutionStatsAggregation = ( }, messageContainingEvents: { filter: { - terms: { - [f.EVENT_ACTION]: [ - RuleExecutionEventType['status-change'], - RuleExecutionEventType.message, + bool: { + filter: [ + { term: { [f.EVENT_PROVIDER]: RULE_EXECUTION_LOG_PROVIDER } }, + { + terms: { + [f.EVENT_ACTION]: [ + RuleExecutionEventType['status-change'], + RuleExecutionEventType.message, + ], + }, + }, ], }, }, @@ -139,7 +158,7 @@ export const getRuleExecutionStatsAggregation = ( field: f.LOG_LEVEL, }, }, - ...(aggregationContext === 'whole-interval' + ...(aggregationLevel === 'whole-interval' ? { errors: { filter: { @@ -179,13 +198,13 @@ export const getRuleExecutionStatsAggregation = ( export const normalizeRuleExecutionStatsAggregationResult = ( aggregations: Record, aggregationLevel: RuleExecutionStatsAggregationLevel -): RuleExecutionStats => { - const totalExecutions = aggregations.totalExecutions || {}; +): HealthOverviewStats => { const executeEvents = aggregations.executeEvents || {}; const statusChangeEvents = aggregations.statusChangeEvents || {}; const executionMetricsEvents = aggregations.executionMetricsEvents || {}; const messageContainingEvents = aggregations.messageContainingEvents || {}; + const totalExecutions = executeEvents.totalExecutions || {}; const executionDurationMs = executeEvents.executionDurationMs || {}; const scheduleDelayNs = executeEvents.scheduleDelayNs || {}; const executionsByStatus = statusChangeEvents.executionsByStatus || {}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/event_log_health_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/event_log_health_client.ts index f4a164629a618..a5138885b69f5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/event_log_health_client.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/event_log/event_log_health_client.ts @@ -5,11 +5,15 @@ * 2.0. */ +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { Logger } from '@kbn/core/server'; +import { SavedObjectsUtils } from '@kbn/core/server'; import type { KueryNode } from '@kbn/es-query'; import type { IEventLogClient } from '@kbn/event-log-plugin/server'; import type { ClusterHealthParameters, ClusterHealthSnapshot, + HealthInterval, RuleHealthParameters, RuleHealthSnapshot, SpaceHealthParameters, @@ -23,6 +27,7 @@ import { RULE_SAVED_OBJECT_TYPE, } from '../../event_log/event_log_constants'; import { kqlOr } from '../../utils/kql'; +import type { IRuleSpacesClient } from '../rule_spaces/rule_spaces_client'; import { getRuleHealthAggregation, normalizeRuleHealthAggregationResult, @@ -32,78 +37,110 @@ import { * Client for calculating health stats based on events in .kibana-event-log-* index. */ export interface IEventLogHealthClient { + /** + * Returns health stats for a given rule in the current Kibana space. + * Calculates the stats based on events in .kibana-event-log-* index. + */ calculateRuleHealth(args: RuleHealthParameters): Promise; + + /** + * Returns health stats for all rules in the current Kibana space. + * Calculates the stats based on events in .kibana-event-log-* index. + */ calculateSpaceHealth(args: SpaceHealthParameters): Promise; + + /** + * Returns health stats for all rules in all existing Kibana spaces (the whole cluster). + * Calculates the stats based on events in .kibana-event-log-* index. + */ calculateClusterHealth(args: ClusterHealthParameters): Promise; } -type RuleHealth = Omit; -type SpaceHealth = Omit; -type ClusterHealth = Omit; +type RuleHealth = Omit; +type SpaceHealth = Omit; +type ClusterHealth = Omit; -export const createEventLogHealthClient = (eventLog: IEventLogClient): IEventLogHealthClient => { - return { - async calculateRuleHealth(args: RuleHealthParameters): Promise { - const { rule_id: ruleId, interval } = args; - const soType = RULE_SAVED_OBJECT_TYPE; - const soIds = [ruleId]; - const eventProviders = [RULE_EXECUTION_LOG_PROVIDER, ALERTING_PROVIDER]; +export const createEventLogHealthClient = ( + eventLog: IEventLogClient, + ruleSpacesClient: IRuleSpacesClient, + logger: Logger +): IEventLogHealthClient => { + const EVENT_PROVIDERS = [RULE_EXECUTION_LOG_PROVIDER, ALERTING_PROVIDER]; + const EVENT_PROVIDERS_FILTER = `${f.EVENT_PROVIDER}: (${kqlOr(EVENT_PROVIDERS)})`; - const kqlFilter = `${f.EVENT_PROVIDER}:${kqlOr(eventProviders)}`; - const aggs = getRuleHealthAggregation(interval.granularity); + async function aggregateEventsForRules( + ruleIds: string[], + interval: HealthInterval, + aggs: Record + ) { + const soType = RULE_SAVED_OBJECT_TYPE; + const soIds = ruleIds; - const result = await eventLog.aggregateEventsBySavedObjectIds(soType, soIds, { + const result = await eventLog.aggregateEventsBySavedObjectIds(soType, soIds, { + start: interval.from, + end: interval.to, + filter: EVENT_PROVIDERS_FILTER, + aggs, + }); + + return result; + } + + async function aggregateEventsForSpaces( + spaceIds: string[], + interval: HealthInterval, + aggs: Record + ) { + const soType = RULE_SAVED_OBJECT_TYPE; + const authFilter = {} as KueryNode; + + // The `aggregateEventsWithAuthFilter` method accepts "namespace ids" instead of "space ids". + // If you have two Kibana spaces with ids ['default', 'space-x'], + // it will only work properly if you pass [undefined, 'space-x']. + const namespaces = spaceIds.map((spaceId) => SavedObjectsUtils.namespaceStringToId(spaceId)); + + const result = await eventLog.aggregateEventsWithAuthFilter( + soType, + authFilter, + { start: interval.from, end: interval.to, - filter: kqlFilter, + filter: EVENT_PROVIDERS_FILTER, aggs, - }); + }, + namespaces + ); + + return result; + } + + return { + async calculateRuleHealth(args: RuleHealthParameters): Promise { + const { rule_id: ruleId, interval } = args; + const aggs = getRuleHealthAggregation(interval.granularity); + const result = await aggregateEventsForRules([ruleId], interval, aggs); return normalizeRuleHealthAggregationResult(result, aggs); }, async calculateSpaceHealth(args: SpaceHealthParameters): Promise { const { interval } = args; - const soType = RULE_SAVED_OBJECT_TYPE; - const authFilter = {} as KueryNode; - const namespaces = undefined; // means current Kibana space - const eventProviders = [RULE_EXECUTION_LOG_PROVIDER, ALERTING_PROVIDER]; - - const kqlFilter = `${f.EVENT_PROVIDER}:${kqlOr(eventProviders)}`; - const aggs = getRuleHealthAggregation(interval.granularity); - // TODO: https://github.com/elastic/kibana/issues/125642 Check with ResponseOps that this is correct usage of this method - const result = await eventLog.aggregateEventsWithAuthFilter( - soType, - authFilter, - { - start: interval.from, - end: interval.to, - filter: kqlFilter, - aggs, - }, - namespaces - ); + const spaceIds = [ruleSpacesClient.getCurrentSpaceId()]; + const aggs = getRuleHealthAggregation(interval.granularity); + const result = await aggregateEventsForSpaces(spaceIds, interval, aggs); return normalizeRuleHealthAggregationResult(result, aggs); }, async calculateClusterHealth(args: ClusterHealthParameters): Promise { - // TODO: https://github.com/elastic/kibana/issues/125642 Implement - return { - stats_over_interval: { - message: 'Not implemented', - }, - history_over_interval: { - buckets: [], - }, - debug: { - eventLog: { - request: {}, - response: {}, - }, - }, - }; + const { interval } = args; + + const spaceIds = await ruleSpacesClient.getAllSpaceIds(); + + const aggs = getRuleHealthAggregation(interval.granularity); + const result = await aggregateEventsForSpaces(spaceIds, interval, aggs); + return normalizeRuleHealthAggregationResult(result, aggs); }, }; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_cluster.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_cluster.ts new file mode 100644 index 0000000000000..f8596ddb7711c --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_cluster.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { ClusterHealthState } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; +import { getRuleStatsAggregation, normalizeRuleStatsAggregation } from './rule_stats'; + +export const getClusterHealthAggregation = (): Record< + string, + estypes.AggregationsAggregationContainer +> => { + return getRuleStatsAggregation(); +}; + +export const normalizeClusterHealthAggregationResult = ( + aggregations: Record | undefined +): ClusterHealthState => { + return normalizeRuleStatsAggregation(aggregations ?? {}); +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_space.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_space.ts index aba4e6153ad34..1654459e2ea85 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_space.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/health_stats_for_space.ts @@ -6,7 +6,7 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { SpaceHealthStatsAtTheMoment } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; +import type { SpaceHealthState } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; import { getRuleStatsAggregation, normalizeRuleStatsAggregation } from './rule_stats'; export const getSpaceHealthAggregation = (): Record< @@ -18,6 +18,6 @@ export const getSpaceHealthAggregation = (): Record< export const normalizeSpaceHealthAggregationResult = ( aggregations: Record -): SpaceHealthStatsAtTheMoment => { +): SpaceHealthState => { return normalizeRuleStatsAggregation(aggregations); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/rule_stats.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/rule_stats.ts index 35b75fdbd4e7e..1dc2230909bc3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/rule_stats.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/aggregations/rule_stats.ts @@ -7,7 +7,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { - RuleStats, + HealthOverviewState, TotalEnabledDisabled, } from '../../../../../../../../common/api/detection_engine/rule_monitoring'; import type { RawData } from '../../../utils/normalization'; @@ -51,7 +51,9 @@ export const getRuleStatsAggregation = (): Record< }; }; -export const normalizeRuleStatsAggregation = (aggregations: Record): RuleStats => { +export const normalizeRuleStatsAggregation = ( + aggregations: Record +): HealthOverviewState => { const rulesByEnabled = aggregations.rulesByEnabled || {}; const rulesByOrigin = aggregations.rulesByOrigin || {}; const rulesByType = aggregations.rulesByType || {}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/filters.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/filters.ts new file mode 100644 index 0000000000000..7acb6e0c5f4c7 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/filters.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 DETECTION_RULES_FILTER = 'alert.attributes.consumer: "siem"'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/rule_objects_health_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/rule_objects_health_client.ts index 0ba0ccdeaf529..a3d7cb2ed4061 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/rule_objects_health_client.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_objects/rule_objects_health_client.ts @@ -6,6 +6,7 @@ */ import type { RulesClientApi } from '@kbn/alerting-plugin/server/types'; +import type { SavedObjectsClientContract, Logger } from '@kbn/core/server'; import type { ClusterHealthParameters, ClusterHealthSnapshot, @@ -14,6 +15,12 @@ import type { SpaceHealthParameters, SpaceHealthSnapshot, } from '../../../../../../../common/api/detection_engine/rule_monitoring'; +import { RULE_SAVED_OBJECT_TYPE } from '../../event_log/event_log_constants'; +import { DETECTION_RULES_FILTER } from './filters'; +import { + getClusterHealthAggregation, + normalizeClusterHealthAggregationResult, +} from './aggregations/health_stats_for_cluster'; import { getSpaceHealthAggregation, normalizeSpaceHealthAggregationResult, @@ -21,36 +28,57 @@ import { import { fetchRuleById } from './fetch_rule_by_id'; /** - * Client for calculating health stats based on rule saved objects. + * Client for calculating health stats based on rule objects (saved objects of type "alert"). */ export interface IRuleObjectsHealthClient { + /** + * Returns health stats for a given rule in the current Kibana space. + * Calculates the stats based on rule objects. + */ calculateRuleHealth(args: RuleHealthParameters): Promise; + + /** + * Returns health stats for all rules in the current Kibana space. + * Calculates the stats based on rule objects. + */ calculateSpaceHealth(args: SpaceHealthParameters): Promise; + + /** + * Returns health stats for all rules in all existing Kibana spaces (the whole cluster). + * Calculates the stats based on rule objects. + */ calculateClusterHealth(args: ClusterHealthParameters): Promise; } -type RuleHealth = Pick; -type SpaceHealth = Pick; -type ClusterHealth = Pick; +type RuleHealth = Pick; +type SpaceHealth = Pick; +type ClusterHealth = Pick; export const createRuleObjectsHealthClient = ( - rulesClient: RulesClientApi + rulesClient: RulesClientApi, + internalSavedObjectsClient: SavedObjectsClientContract, + logger: Logger ): IRuleObjectsHealthClient => { return { async calculateRuleHealth(args: RuleHealthParameters): Promise { const rule = await fetchRuleById(rulesClient, args.rule_id); return { - stats_at_the_moment: { rule }, + state_at_the_moment: { rule }, debug: {}, }; }, async calculateSpaceHealth(args: SpaceHealthParameters): Promise { const aggs = getSpaceHealthAggregation(); - const aggregations = await rulesClient.aggregate({ aggs }); + const aggregations = await rulesClient.aggregate({ + options: { + filter: DETECTION_RULES_FILTER, // make sure to query only detection rules + }, + aggs, + }); return { - stats_at_the_moment: normalizeSpaceHealthAggregationResult(aggregations), + state_at_the_moment: normalizeSpaceHealthAggregationResult(aggregations), debug: { rulesClient: { request: { aggs }, @@ -61,35 +89,21 @@ export const createRuleObjectsHealthClient = ( }, async calculateClusterHealth(args: ClusterHealthParameters): Promise { - // TODO: https://github.com/elastic/kibana/issues/125642 Implement + const aggs = getClusterHealthAggregation(); + const response = await internalSavedObjectsClient.find>({ + type: RULE_SAVED_OBJECT_TYPE, // query rules + filter: DETECTION_RULES_FILTER, // make sure to query only detection rules + namespaces: ['*'], // aggregate rules in all Kibana spaces + perPage: 0, // don't return rules in the response, we only need aggs + aggs, + }); + return { - stats_at_the_moment: { - number_of_rules: { - all: { - total: 0, - enabled: 0, - disabled: 0, - }, - by_origin: { - prebuilt: { - total: 0, - enabled: 0, - disabled: 0, - }, - custom: { - total: 0, - enabled: 0, - disabled: 0, - }, - }, - by_type: {}, - by_outcome: {}, - }, - }, + state_at_the_moment: normalizeClusterHealthAggregationResult(response.aggregations), debug: { - rulesClient: { - request: {}, - response: {}, + savedObjectsClient: { + request: { aggs }, + response, }, }, }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/aggregations/spaces.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/aggregations/spaces.ts new file mode 100644 index 0000000000000..bae44b17c2f92 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/aggregations/spaces.ts @@ -0,0 +1,48 @@ +/* + * Copyright 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 * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { RawData } from '../../../utils/normalization'; + +// The number of Kibana spaces is limited by the `maxSpaces` config setting of the spaces plugin. +// At the time of writing this comment, `maxSpaces` defaults to 1000. +// So in normal conditions there can't exist more than 1000 Kibana spaces. +// +// However, we set `MAX_KIBANA_SPACES` to a higher value to handle rare cases when there are more +// than 1000 spaces in a cluster. Hopefully it will cover 99.(9)% of use cases. +// +// In the rest of the edge cases, we will be missing some spaces, but the effect of this will be +// limited by the fact that the aggregation below will sort spaces desc by rules count in them. +// It will return spaces with most of the existing rules, and will not return spaces with fewer +// number of rules. Hopefully, we will miss only spaces with very few rules. This should be +// acceptable because the goal of getting all space ids in the rule monitoring subdomain is to be +// able to aggregate health metrics for those spaces. It's unlikely that spaces with very few rules +// will have a major impact on health and performance metrics of the whole cluster. +const MAX_KIBANA_SPACES = 10_000; + +export const getSpacesAggregation = (): Record< + string, + estypes.AggregationsAggregationContainer +> => { + return { + rulesBySpace: { + terms: { + field: 'alert.namespaces', + size: MAX_KIBANA_SPACES, + }, + }, + }; +}; + +export const normalizeSpacesAggregation = ( + aggregations: Record | undefined +): string[] => { + const rulesBySpace: RawData = aggregations?.rulesBySpace || {}; + const buckets: RawData[] = rulesBySpace.buckets || []; + const spaceIds = buckets.map((b: RawData) => String(b.key)); + return spaceIds; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/rule_spaces_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/rule_spaces_client.ts new file mode 100644 index 0000000000000..726d30b518764 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/detection_engine_health/rule_spaces/rule_spaces_client.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsClientContract, Logger } from '@kbn/core/server'; +import { RULE_SAVED_OBJECT_TYPE } from '../../event_log/event_log_constants'; +import { DETECTION_RULES_FILTER } from '../rule_objects/filters'; +import { getSpacesAggregation, normalizeSpacesAggregation } from './aggregations/spaces'; + +/** + * Client for getting information about Kibana spaces in the context of detection rules. + */ +export interface IRuleSpacesClient { + /** + * Returns id of the current Kibana space (associated with the current HTTP request). + */ + getCurrentSpaceId(): string; + + /** + * Returns ids of all Kibana spaces where at least one detection rule exists. + */ + getAllSpaceIds(): Promise; +} + +export const createRuleSpacesClient = ( + currentSpaceId: string, + internalSavedObjectsClient: SavedObjectsClientContract, + logger: Logger +): IRuleSpacesClient => { + return { + getCurrentSpaceId(): string { + return currentSpaceId; + }, + + async getAllSpaceIds(): Promise { + const aggs = getSpacesAggregation(); + const response = await internalSavedObjectsClient.find>({ + type: RULE_SAVED_OBJECT_TYPE, // query rules + filter: DETECTION_RULES_FILTER, // make sure to query only detection rules + namespaces: ['*'], // aggregate rules in all Kibana spaces + perPage: 0, // don't return rules in the response, we only need aggs + aggs, + }); + + return normalizeSpacesAggregation(response.aggregations); + }, + }; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts index 06e631dece638..8c47d669c2a2c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts @@ -13,6 +13,7 @@ export const TIMESTAMP = `@timestamp` as const; export const MESSAGE = 'message' as const; export const EVENT_PROVIDER = 'event.provider' as const; export const EVENT_ACTION = 'event.action' as const; +export const EVENT_CATEGORY = 'event.category' as const; export const EVENT_SEQUENCE = 'event.sequence' as const; export const LOG_LEVEL = 'log.level' as const; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/service.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/service.ts index b2381d3dbcf26..c92fe66f9cebf 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/service.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/service.ts @@ -27,6 +27,7 @@ import { registerEventLogProvider } from './event_log/register_event_log_provide import { createDetectionEngineHealthClient } from './detection_engine_health/detection_engine_health_client'; import { createEventLogHealthClient } from './detection_engine_health/event_log/event_log_health_client'; import { createRuleObjectsHealthClient } from './detection_engine_health/rule_objects/rule_objects_health_client'; +import { createRuleSpacesClient } from './detection_engine_health/rule_spaces/rule_spaces_client'; import { createEventLogReader } from './rule_execution_log/event_log/event_log_reader'; import { createEventLogWriter } from './rule_execution_log/event_log/event_log_writer'; import { fetchRuleExecutionSettings } from './rule_execution_log/execution_settings/fetch_rule_execution_settings'; @@ -71,23 +72,43 @@ export const createRuleMonitoringService = ( const { rulesClient, eventLogClient, currentSpaceId } = params; const { savedObjects } = coreStart; - const ruleObjectsHealthClient = createRuleObjectsHealthClient(rulesClient); - const eventLogHealthClient = createEventLogHealthClient(eventLogClient); - - // Create an importer that can import saved objects on behalf of the internal Kibana user. - // This is important because we want to let users with access to Security Solution - // to be able to install our internal assets like rule monitoring dashboard without - // the need to configure the additional `Saved Objects Management: All` privilege. - const savedObjectsRepository = savedObjects.createInternalRepository(); - const savedObjectsClient = new SavedObjectsClient(savedObjectsRepository); - const savedObjectsImporter = savedObjects.createImporter(savedObjectsClient); + // Create a saved objects client and an importer that can work with saved objects on behalf + // of the internal Kibana user. This is important because we want to let users with access + // to only Security Solution to be able to: + // 1. Install our internal assets like rule monitoring dashboard without the need to + // configure the additional `Saved Objects Management: All` privilege. + // 2. Aggregate rules in all Kibana spaces to get a health overview of the whole cluster - + // without having explicit access to every existing space. + const internalSavedObjectsRepository = savedObjects.createInternalRepository([ + // Note: we include the "alert" hidden SO type here otherwise we would not be able to query it. + // If at some point it is not considered a hidden type this can be removed. + 'alert', + ]); + const internalSavedObjectsClient = new SavedObjectsClient(internalSavedObjectsRepository); + const internalSavedObjectsImporter = savedObjects.createImporter(internalSavedObjectsClient); + + const ruleSpacesClient = createRuleSpacesClient( + currentSpaceId, + internalSavedObjectsClient, + logger + ); + const ruleObjectsHealthClient = createRuleObjectsHealthClient( + rulesClient, + internalSavedObjectsClient, + logger + ); + const eventLogHealthClient = createEventLogHealthClient( + eventLogClient, + ruleSpacesClient, + logger + ); return createDetectionEngineHealthClient( + ruleSpacesClient, ruleObjectsHealthClient, eventLogHealthClient, - savedObjectsImporter, - logger, - currentSpaceId + internalSavedObjectsImporter, + logger ); }, From e8c0942672a7f1591529b3dc75b4f01c1be326fe Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Tue, 3 Oct 2023 23:27:27 +0200 Subject: [PATCH 027/170] [ML] Update ELSER version for Elastic Assistant (#167522) ## Summary Update Elastic Assistant to utilize a new version of ELSER. ### Checklist - [ ] [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 --- x-pack/plugins/elastic_assistant/kibana.jsonc | 3 +- .../execute_custom_llm_chain/index.ts | 3 +- .../server/lib/langchain/executors/types.ts | 1 + .../elastic_assistant/server/plugin.ts | 17 +++++-- .../server/routes/knowledge_base/constants.ts | 2 - .../get_knowledge_base_status.test.ts | 4 +- .../get_knowledge_base_status.ts | 17 +++---- .../post_knowledge_base.test.ts | 4 +- .../knowledge_base/post_knowledge_base.ts | 16 +++++-- .../post_actions_connector_execute.test.ts | 10 ++++- .../routes/post_actions_connector_execute.ts | 9 ++-- .../plugins/elastic_assistant/server/types.ts | 14 +++++- .../plugins/elastic_assistant/tsconfig.json | 1 + .../__mocks__/routerDependencies.mock.ts | 8 ++-- .../routes/enterprise_search/indices.test.ts | 45 +++++++------------ .../routes/enterprise_search/indices.ts | 2 +- x-pack/plugins/ml/server/mocks.ts | 2 + .../providers/__mocks__/trained_models.ts | 19 ++++++-- .../providers/trained_models.ts | 5 ++- 19 files changed, 114 insertions(+), 68 deletions(-) diff --git a/x-pack/plugins/elastic_assistant/kibana.jsonc b/x-pack/plugins/elastic_assistant/kibana.jsonc index d7518cf600983..395da30fcf359 100644 --- a/x-pack/plugins/elastic_assistant/kibana.jsonc +++ b/x-pack/plugins/elastic_assistant/kibana.jsonc @@ -9,7 +9,8 @@ "browser": false, "requiredPlugins": [ "actions", - "data" + "data", + "ml" ] } } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts index 3363a8e824729..e1f0ed100e5ac 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts @@ -23,6 +23,7 @@ export const callAgentExecutor = async ({ llmType, logger, request, + elserId, }: AgentExecutorParams): AgentExecutorResponse => { const llm = new ActionsClientLlm({ actions, connectorId, request, llmType, logger }); @@ -38,7 +39,7 @@ export const callAgentExecutor = async ({ }); // ELSER backed ElasticsearchStore for Knowledge Base - const esStore = new ElasticsearchStore(esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger); + const esStore = new ElasticsearchStore(esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, elserId); const chain = RetrievalQAChain.fromLLM(llm, esStore.asRetriever()); const tools: Tool[] = [ diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index 3faa7ceaf0ebf..e1e2817ee17a1 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -20,6 +20,7 @@ export interface AgentExecutorParams { llmType?: string; logger: Logger; request: KibanaRequest; + elserId?: string; } export type AgentExecutorResponse = Promise; diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index 797448fa88d55..dbe32ebe16efc 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -12,7 +12,10 @@ import { Plugin, Logger, IContextProvider, + KibanaRequest, + SavedObjectsClientContract, } from '@kbn/core/server'; +import { once } from 'lodash'; import { ElasticAssistantPluginSetup, @@ -20,6 +23,7 @@ import { ElasticAssistantPluginStart, ElasticAssistantPluginStartDependencies, ElasticAssistantRequestHandlerContext, + GetElser, } from './types'; import { deleteKnowledgeBaseRoute, @@ -73,12 +77,19 @@ export class ElasticAssistantPlugin ) ); + const getElserId: GetElser = once( + async (request: KibanaRequest, savedObjectsClient: SavedObjectsClientContract) => { + return (await plugins.ml.trainedModelsProvider(request, savedObjectsClient).getELSER()) + .name; + } + ); + // Knowledge Base deleteKnowledgeBaseRoute(router); - getKnowledgeBaseStatusRoute(router); - postKnowledgeBaseRoute(router); + getKnowledgeBaseStatusRoute(router, getElserId); + postKnowledgeBaseRoute(router, getElserId); // Actions Connector Execute (LLM Wrapper) - postActionsConnectorExecuteRoute(router); + postActionsConnectorExecuteRoute(router, getElserId); // Evaluate postEvaluateRoute(router); return { diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/constants.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/constants.ts index 9b20be8ca9867..640f72089ebad 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/constants.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/constants.ts @@ -5,8 +5,6 @@ * 2.0. */ -// Note: using default ELSER model ID so when setup by user in UI, all defaults can be accepted and everything works -export const ELSER_MODEL_ID = '.elser_model_1'; export const MODEL_EVALUATION_RESULTS_INDEX_PATTERN = '.kibana-elastic-ai-assistant-evaluation-results'; export const KNOWLEDGE_BASE_INDEX_PATTERN = '.kibana-elastic-ai-assistant-kb'; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts index 72f9659fe8d98..f37f2a3ab2882 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts @@ -18,11 +18,13 @@ describe('Get Knowledge Base Status Route', () => { clients.core.elasticsearch.client = elasticsearchServiceMock.createScopedClusterClient(); + const mockGetElser = jest.fn().mockResolvedValue('.elser_model_2'); + beforeEach(() => { server = serverMock.create(); ({ context } = requestContextMock.createTools()); - getKnowledgeBaseStatusRoute(server.router); + getKnowledgeBaseStatusRoute(server.router, mockGetElser); }); describe('Status codes', () => { diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts index 568462c352b87..8162ef3bdbd67 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts @@ -7,20 +7,14 @@ import { IRouter } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - import type { GetKnowledgeBaseStatusResponse } from '@kbn/elastic-assistant'; import { buildResponse } from '../../lib/build_response'; import { buildRouteValidation } from '../../schemas/common'; -import { ElasticAssistantRequestHandlerContext } from '../../types'; +import { ElasticAssistantRequestHandlerContext, GetElser } from '../../types'; import { KNOWLEDGE_BASE } from '../../../common/constants'; import { GetKnowledgeBaseStatusPathParams } from '../../schemas/knowledge_base/get_knowledge_base_status'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; -import { - ELSER_MODEL_ID, - ESQL_DOCS_LOADED_QUERY, - ESQL_RESOURCE, - KNOWLEDGE_BASE_INDEX_PATTERN, -} from './constants'; +import { ESQL_DOCS_LOADED_QUERY, ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './constants'; /** * Get the status of the Knowledge Base index, pipeline, and resources (collection of documents) @@ -28,7 +22,8 @@ import { * @param router IRouter for registering routes */ export const getKnowledgeBaseStatusRoute = ( - router: IRouter + router: IRouter, + getElser: GetElser ) => { router.get( { @@ -56,7 +51,9 @@ export const getKnowledgeBaseStatusRoute = ( const indexExists = await esStore.indexExists(); const pipelineExists = await esStore.pipelineExists(); - const modelExists = await esStore.isModelInstalled(ELSER_MODEL_ID); + + const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const modelExists = await esStore.isModelInstalled(elserId); const body: GetKnowledgeBaseStatusResponse = { elser_exists: modelExists, diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts index 56383438cdb2e..ceb5f1b3879f6 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.test.ts @@ -18,11 +18,13 @@ describe('Post Knowledge Base Route', () => { clients.core.elasticsearch.client = elasticsearchServiceMock.createScopedClusterClient(); + const mockGetElser = jest.fn().mockResolvedValue('.elser_model_2'); + beforeEach(() => { server = serverMock.create(); ({ context } = requestContextMock.createTools()); - postKnowledgeBaseRoute(server.router); + postKnowledgeBaseRoute(server.router, mockGetElser); }); describe('Status codes', () => { diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts index 651817a97e449..580c03e23a0cc 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts @@ -7,10 +7,9 @@ import { IRouter } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - import { buildResponse } from '../../lib/build_response'; import { buildRouteValidation } from '../../schemas/common'; -import { ElasticAssistantRequestHandlerContext } from '../../types'; +import { ElasticAssistantRequestHandlerContext, GetElser } from '../../types'; import { KNOWLEDGE_BASE } from '../../../common/constants'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_DOCS_LOADED_QUERY, ESQL_RESOURCE, KNOWLEDGE_BASE_INDEX_PATTERN } from './constants'; @@ -21,7 +20,10 @@ import { loadESQL } from '../../lib/langchain/content_loaders/esql_loader'; * Load Knowledge Base index, pipeline, and resources (collection of documents) * @param router */ -export const postKnowledgeBaseRoute = (router: IRouter) => { +export const postKnowledgeBaseRoute = ( + router: IRouter, + getElser: GetElser +) => { router.post( { path: KNOWLEDGE_BASE, @@ -44,7 +46,13 @@ export const postKnowledgeBaseRoute = (router: IRouter ({ buildResponse: jest.fn().mockImplementation((x) => x), @@ -54,6 +55,7 @@ const mockContext = { elasticsearch: { client: elasticsearchServiceMock.createScopedClusterClient(), }, + savedObjects: coreMock.createRequestHandlerContext().savedObjects, }, }; @@ -89,6 +91,8 @@ const mockResponse = { }; describe('postActionsConnectorExecuteRoute', () => { + const mockGetElser = jest.fn().mockResolvedValue('.elser_model_2'); + beforeEach(() => { jest.clearAllMocks(); }); @@ -109,7 +113,8 @@ describe('postActionsConnectorExecuteRoute', () => { }; await postActionsConnectorExecuteRoute( - mockRouter as unknown as IRouter + mockRouter as unknown as IRouter, + mockGetElser ); }); @@ -131,7 +136,8 @@ describe('postActionsConnectorExecuteRoute', () => { }; await postActionsConnectorExecuteRoute( - mockRouter as unknown as IRouter + mockRouter as unknown as IRouter, + mockGetElser ); }); }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index 0ff90c5fa3ca6..8f620dac06faa 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -7,7 +7,6 @@ import { IRouter, Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; - import { POST_ACTIONS_CONNECTOR_EXECUTE } from '../../common/constants'; import { getLangChainMessages } from '../lib/langchain/helpers'; import { buildResponse } from '../lib/build_response'; @@ -16,11 +15,12 @@ import { PostActionsConnectorExecuteBody, PostActionsConnectorExecutePathParams, } from '../schemas/post_actions_connector_execute'; -import { ElasticAssistantRequestHandlerContext } from '../types'; +import { ElasticAssistantRequestHandlerContext, GetElser } from '../types'; import { callAgentExecutor } from '../lib/langchain/execute_custom_llm_chain'; export const postActionsConnectorExecuteRoute = ( - router: IRouter + router: IRouter, + getElser: GetElser ) => { router.post( { @@ -48,6 +48,8 @@ export const postActionsConnectorExecuteRoute = ( request.body.params.subActionParams.messages ); + const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const langChainResponseBody = await callAgentExecutor({ actions, connectorId, @@ -55,6 +57,7 @@ export const postActionsConnectorExecuteRoute = ( langChainMessages, logger, request, + elserId, }); return response.ok({ diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index ed3765737a287..ed9081c084420 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -9,7 +9,13 @@ import type { PluginSetupContract as ActionsPluginSetup, PluginStartContract as ActionsPluginStart, } from '@kbn/actions-plugin/server'; -import { CustomRequestHandlerContext, Logger } from '@kbn/core/server'; +import type { + CustomRequestHandlerContext, + KibanaRequest, + Logger, + SavedObjectsClientContract, +} from '@kbn/core/server'; +import { type MlPluginSetup } from '@kbn/ml-plugin/server'; /** The plugin setup interface */ export interface ElasticAssistantPluginSetup { @@ -23,6 +29,7 @@ export interface ElasticAssistantPluginStart { export interface ElasticAssistantPluginSetupDependencies { actions: ActionsPluginSetup; + ml: MlPluginSetup; } export interface ElasticAssistantPluginStartDependencies { actions: ActionsPluginStart; @@ -39,3 +46,8 @@ export interface ElasticAssistantApiRequestHandlerContext { export type ElasticAssistantRequestHandlerContext = CustomRequestHandlerContext<{ elasticAssistant: ElasticAssistantApiRequestHandlerContext; }>; + +export type GetElser = ( + request: KibanaRequest, + savedObjectsClient: SavedObjectsClientContract +) => Promise | never; diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index 7468ee5faa882..45dec8428e8cc 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -31,6 +31,7 @@ "@kbn/logging", "@kbn/std", "@kbn/stack-connectors-plugin", + "@kbn/ml-plugin", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/enterprise_search/server/__mocks__/routerDependencies.mock.ts b/x-pack/plugins/enterprise_search/server/__mocks__/routerDependencies.mock.ts index 1f4c66e83234a..623b851b9ab7c 100644 --- a/x-pack/plugins/enterprise_search/server/__mocks__/routerDependencies.mock.ts +++ b/x-pack/plugins/enterprise_search/server/__mocks__/routerDependencies.mock.ts @@ -7,6 +7,8 @@ import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { mlPluginServerMock } from '@kbn/ml-plugin/server/mocks'; + import { ConfigType } from '..'; export const mockLogger = loggingSystemMock.createLogger().get(); @@ -18,9 +20,7 @@ export const mockRequestHandler = { }, }; -export const mockMl = { - trainedModelsProvider: jest.fn(), -}; +export const mockMl = mlPluginServerMock.createSetupContract(); export const mockConfig = { host: 'http://localhost:3002', @@ -38,5 +38,5 @@ export const mockDependencies = { config: mockConfig, log: mockLogger, enterpriseSearchRequestHandler: mockRequestHandler as any, - ml: mockMl as any, + ml: mockMl, }; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts index f285a309fb53e..da44f155c9774 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts @@ -7,9 +7,14 @@ import { MockRouter, mockDependencies } from '../../__mocks__'; -import { RequestHandlerContext } from '@kbn/core/server'; +import type { + KibanaRequest, + RequestHandlerContext, + SavedObjectsClientContract, +} from '@kbn/core/server'; import type { MlPluginSetup, MlTrainedModels } from '@kbn/ml-plugin/server'; +import { mlPluginServerMock } from '@kbn/ml-plugin/server/mocks'; import { ErrorCode } from '../../../common/types/error_codes'; @@ -181,20 +186,13 @@ describe('Enterprise Search Managed Indices', () => { path: '/internal/enterprise_search/indices/{indexName}/ml_inference/pipeline_processors', }); - mockTrainedModelsProvider = { - getTrainedModels: jest.fn(), - getTrainedModelsStats: jest.fn(), - startTrainedModelDeployment: jest.fn(), - stopTrainedModelDeployment: jest.fn(), - inferTrainedModel: jest.fn(), - deleteTrainedModel: jest.fn(), - updateTrainedModelDeployment: jest.fn(), - putTrainedModel: jest.fn(), - } as MlTrainedModels; + mockMl = mlPluginServerMock.createSetupContract(); + mockTrainedModelsProvider = mockMl.trainedModelsProvider( + {} as KibanaRequest, + {} as SavedObjectsClientContract + ); - mockMl = { - trainedModelsProvider: () => Promise.resolve(mockTrainedModelsProvider), - } as unknown as jest.Mocked; + mlPluginServerMock.createSetupContract(); registerIndexRoutes({ ...mockDependencies, @@ -1007,20 +1005,11 @@ describe('Enterprise Search Managed Indices', () => { path: '/internal/enterprise_search/pipelines/ml_inference', }); - mockTrainedModelsProvider = { - getTrainedModels: jest.fn(), - getTrainedModelsStats: jest.fn(), - startTrainedModelDeployment: jest.fn(), - stopTrainedModelDeployment: jest.fn(), - inferTrainedModel: jest.fn(), - deleteTrainedModel: jest.fn(), - updateTrainedModelDeployment: jest.fn(), - putTrainedModel: jest.fn(), - } as MlTrainedModels; - - mockMl = { - trainedModelsProvider: () => Promise.resolve(mockTrainedModelsProvider), - } as unknown as jest.Mocked; + mockMl = mlPluginServerMock.createSetupContract(); + mockTrainedModelsProvider = mockMl.trainedModelsProvider( + {} as KibanaRequest, + {} as SavedObjectsClientContract + ); registerIndexRoutes({ ...mockDependencies, diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index cc031bd3ef684..a43846aafab6a 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -394,7 +394,7 @@ export function registerIndexRoutes({ savedObjects: { client: savedObjectsClient }, } = await context.core; const trainedModelsProvider = ml - ? await ml.trainedModelsProvider(request, savedObjectsClient) + ? ml.trainedModelsProvider(request, savedObjectsClient) : undefined; const mlInferencePipelineProcessorConfigs = await fetchMlInferencePipelineProcessors( diff --git a/x-pack/plugins/ml/server/mocks.ts b/x-pack/plugins/ml/server/mocks.ts index 93a2180efa4ca..fe2fa1d915bfe 100644 --- a/x-pack/plugins/ml/server/mocks.ts +++ b/x-pack/plugins/ml/server/mocks.ts @@ -4,6 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { createTrainedModelsProviderMock } from './shared_services/providers/__mocks__/trained_models'; import { createJobServiceProviderMock } from './shared_services/providers/__mocks__/jobs_service'; import { createAnomalyDetectorsProviderMock } from './shared_services/providers/__mocks__/anomaly_detectors'; import { createMockMlSystemProvider } from './shared_services/providers/__mocks__/system'; @@ -20,6 +21,7 @@ const createSetupContract = () => modulesProvider: createModulesProviderMock(), resultsServiceProvider: createResultsServiceProviderMock(), alertingServiceProvider: createAlertingServiceProviderMock(), + trainedModelsProvider: createTrainedModelsProviderMock(), } as unknown as jest.Mocked); const createStartContract = () => jest.fn(); diff --git a/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts index 726457ed7981d..9af448058ce83 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/__mocks__/trained_models.ts @@ -5,8 +5,19 @@ * 2.0. */ +import { TrainedModels } from '../../../shared'; + +const trainedModelsServiceMock = { + getTrainedModels: jest.fn().mockResolvedValue([]), + getTrainedModelsStats: jest.fn().mockResolvedValue([]), + startTrainedModelDeployment: jest.fn(), + stopTrainedModelDeployment: jest.fn(), + inferTrainedModel: jest.fn(), + deleteTrainedModel: jest.fn(), + updateTrainedModelDeployment: jest.fn(), + putTrainedModel: jest.fn(), + getELSER: jest.fn().mockResolvedValue({ name: '' }), +} as jest.Mocked; + export const createTrainedModelsProviderMock = () => - jest.fn(() => ({ - getTrainedModels: jest.fn(), - getTrainedModelStats: jest.fn(), - })); + jest.fn().mockReturnValue(trainedModelsServiceMock); diff --git a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts index b884edd99c22d..9add1bd079917 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts @@ -8,7 +8,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server'; -import type { GetElserOptions } from '@kbn/ml-trained-models-utils'; +import type { GetElserOptions, ModelDefinitionResponse } from '@kbn/ml-trained-models-utils'; import type { MlInferTrainedModelRequest, MlStopTrainedModelDeploymentRequest, @@ -47,6 +47,7 @@ export interface TrainedModelsProvider { putTrainedModel( params: estypes.MlPutTrainedModelRequest ): Promise; + getELSER(params?: GetElserOptions): Promise; }; } @@ -122,7 +123,7 @@ export function getTrainedModelsProvider( return mlClient.putTrainedModel(params); }); }, - async getELSER(params: GetElserOptions) { + async getELSER(params?: GetElserOptions) { return await guards .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) From 7eb21f7190edbabe9dba870d8919d6fce4bfbe81 Mon Sep 17 00:00:00 2001 From: Catherine Liu Date: Tue, 3 Oct 2023 14:32:31 -0700 Subject: [PATCH 028/170] [Controls] Support date fields in options list (#164362) ## Summary Closes https://github.com/elastic/kibana/issues/152376. Screenshot 2023-08-31 at 1 20 33 PM This adds date field support to the options list control. There will not be support for searching the options list with a date string due to limitations with querying a date field with a string. I attempted to get wildcard searching to work with date fields, but it required adding a runtime field to the query which significantly impacted performance on large datasets. Sorting is available by doc count or by date value for date fields. Screenshot 2023-08-31 at 1 31 01 PM ### Checklist Delete any items that are not applicable to this PR. - [ ] 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) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### 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: Andrea Del Rio --- .../controls/common/options_list/types.ts | 2 +- .../public/hooks/use_field_formatter.ts | 41 +++ .../options_list/components/options_list.scss | 18 +- .../components/options_list_control.tsx | 30 +- .../options_list_editor_options.tsx | 2 +- .../components/options_list_popover.test.tsx | 12 + .../options_list_popover_action_bar.tsx | 45 ++- ...ptions_list_popover_invalid_selections.tsx | 12 +- .../options_list_popover_sorting_button.tsx | 34 +- .../options_list_popover_suggestions.tsx | 9 +- .../components/options_list_strings.ts | 24 +- .../embeddable/options_list_embeddable.tsx | 4 +- .../options_list_embeddable_factory.tsx | 5 +- .../range_slider/components/range_slider.scss | 2 +- .../components/range_slider_control.tsx | 23 +- .../public/time_slider/components/index.scss | 2 +- .../components/time_slider_popover_button.tsx | 2 +- ...ions_list_cheap_suggestion_queries.test.ts | 301 +++++++++++------- .../options_list_cheap_suggestion_queries.ts | 5 +- ..._list_expensive_suggestion_queries.test.ts | 165 ++++++++-- ...tions_list_expensive_suggestion_queries.ts | 3 +- .../options_list_suggestions_route.ts | 4 +- .../options_list_validation_queries.ts | 2 +- 23 files changed, 513 insertions(+), 234 deletions(-) create mode 100644 src/plugins/controls/public/hooks/use_field_formatter.ts diff --git a/src/plugins/controls/common/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts index 5ab0523712171..460f7df080a88 100644 --- a/src/plugins/controls/common/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -84,7 +84,7 @@ export interface OptionsListRequestBody { allowExpensiveQueries: boolean; sort?: OptionsListSortingType; filters?: Array<{ bool: BoolQuery }>; - selectedOptions?: string[]; + selectedOptions?: Array; runPastTimeout?: boolean; searchString?: string; fieldSpec?: FieldSpec; diff --git a/src/plugins/controls/public/hooks/use_field_formatter.ts b/src/plugins/controls/public/hooks/use_field_formatter.ts new file mode 100644 index 0000000000000..5485be0bb1b23 --- /dev/null +++ b/src/plugins/controls/public/hooks/use_field_formatter.ts @@ -0,0 +1,41 @@ +/* + * Copyright 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 { FieldSpec } from '@kbn/data-views-plugin/common'; +import { useEffect, useState } from 'react'; +import { pluginServices } from '../services'; + +export const useFieldFormatter = ({ + dataViewId, + fieldSpec, +}: { + dataViewId?: string; + fieldSpec?: FieldSpec; +}) => { + const { + dataViews: { get: getDataViewById }, + } = pluginServices.getServices(); + const [fieldFormatter, setFieldFormatter] = useState(() => (toFormat: string) => toFormat); + + /** + * derive field formatter from fieldSpec and dataViewId + */ + useEffect(() => { + (async () => { + if (!dataViewId || !fieldSpec) return; + // dataViews are cached, and should always be available without having to hit ES. + const dataView = await getDataViewById(dataViewId); + setFieldFormatter( + () => + dataView?.getFormatterForField(fieldSpec).getConverterFor('text') ?? + ((toFormat: string) => toFormat) + ); + })(); + }, [fieldSpec, dataViewId, getDataViewById]); + + return fieldFormatter; +}; diff --git a/src/plugins/controls/public/options_list/components/options_list.scss b/src/plugins/controls/public/options_list/components/options_list.scss index b8e43b84ad17c..ff4014d0cc41d 100644 --- a/src/plugins/controls/public/options_list/components/options_list.scss +++ b/src/plugins/controls/public/options_list/components/options_list.scss @@ -15,15 +15,18 @@ font-weight: $euiFontWeightRegular; } + .optionsList__filterValid { + font-weight: $euiFontWeightMedium; + } + .optionsList__filterInvalid { color: $euiTextSubduedColor; text-decoration: line-through; - margin-left: $euiSizeS; font-weight: $euiFontWeightRegular; } .optionsList__negateLabel { - font-weight: bold; + font-weight: $euiFontWeightSemiBold; font-size: $euiSizeM; color: $euiColorDanger; } @@ -34,6 +37,7 @@ width: 0; } } + } .optionsList--sortPopover { @@ -42,24 +46,22 @@ .optionsList__existsFilter { font-style: italic; + font-weight: $euiFontWeightMedium; } .optionsList__popoverOverride { @include euiBottomShadowMedium; filter: none; // overwrite the default popover shadow - transform: translateY(-$euiSizeS) translateX(0); // prevent "slide in" animation on open/close } .optionsList__popover { .optionsList__actions { - padding: $euiSizeS; - padding-bottom: 0; + padding: 0 $euiSizeS; border-bottom: $euiBorderThin; border-color: darken($euiColorLightestShade, 2%); - .optionsList__sortButton { - box-shadow: inset 0 0 0 $euiBorderWidthThin $euiFormBorderColor; - background-color: $euiFormBackgroundColor; + .optionsList__searchRow { + padding-top: $euiSizeS } .optionsList__actionsRow { diff --git a/src/plugins/controls/public/options_list/components/options_list_control.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx index dbd30a89e7e78..11683266ad2f0 100644 --- a/src/plugins/controls/public/options_list/components/options_list_control.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -21,6 +21,7 @@ import { useOptionsList } from '../embeddable/options_list_embeddable'; import './options_list.scss'; import { ControlError } from '../../control_group/component/control_error_component'; import { MIN_POPOVER_WIDTH } from '../../constants'; +import { useFieldFormatter } from '../../hooks/use_field_formatter'; export const OptionsListControl = ({ typeaheadSubject, @@ -35,6 +36,7 @@ export const OptionsListControl = ({ const isPopoverOpen = optionsList.select((state) => state.componentState.popoverOpen); const validSelections = optionsList.select((state) => state.componentState.validSelections); const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); + const fieldSpec = optionsList.select((state) => state.componentState.field); const id = optionsList.select((state) => state.explicitInput.id); const exclude = optionsList.select((state) => state.explicitInput.exclude); @@ -46,6 +48,8 @@ export const OptionsListControl = ({ const selectedOptions = optionsList.select((state) => state.explicitInput.selectedOptions); const loading = optionsList.select((state) => state.output.loading); + const dataViewId = optionsList.select((state) => state.output.dataViewId); + const fieldFormatter = useFieldFormatter({ dataViewId, fieldSpec }); useEffect(() => { return () => { @@ -87,6 +91,8 @@ export const OptionsListControl = ({ ); const { hasSelections, selectionDisplayNode, validSelectionsCount } = useMemo(() => { + const delimiter = OptionsListStrings.control.getSeparator(fieldSpec?.type); + return { hasSelections: !isEmpty(validSelections) || !isEmpty(invalidSelections), validSelectionsCount: validSelections?.length, @@ -107,20 +113,30 @@ export const OptionsListControl = ({ ) : ( <> - {validSelections && ( - {validSelections.join(OptionsListStrings.control.getSeparator())} - )} - {invalidSelections && ( + {validSelections?.length ? ( + + {validSelections.map((value) => fieldFormatter(value)).join(delimiter)} + + ) : null} + {validSelections?.length && invalidSelections?.length ? delimiter : null} + {invalidSelections?.length ? ( - {invalidSelections.join(OptionsListStrings.control.getSeparator())} + {invalidSelections.map((value) => fieldFormatter(value)).join(delimiter)} - )} + ) : null} )} ), }; - }, [exclude, existsSelected, validSelections, invalidSelections]); + }, [ + exclude, + existsSelected, + validSelections, + invalidSelections, + fieldFormatter, + fieldSpec?.type, + ]); const button = ( ) : ( allowExpensiveQueries && - fieldType !== 'ip' && ( + !['ip', 'date'].includes(fieldType) && ( { expect(optionsText).toEqual(['By document count. Checked option.']); }); + test('when sorting suggestions, show "By date" sorting option for date fields', async () => { + const popover = await mountComponent({ + componentState: { field: { name: 'Test date field', type: 'date' } as FieldSpec }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); + + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count. Checked option.', 'By date']); + }); + test('ensure warning icon does not show up when testAllowExpensiveQueries = true/undefined', async () => { const popover = await mountComponent({ componentState: { field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec }, diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx index d8fbbe786b760..8e890350f4d40 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx @@ -39,6 +39,7 @@ export const OptionsListPopoverActionBar = ({ const totalCardinality = optionsList.select((state) => state.componentState.totalCardinality) ?? 0; const searchString = optionsList.select((state) => state.componentState.searchString); + const fieldSpec = optionsList.select((state) => state.componentState.field); const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); const hideSort = optionsList.select((state) => state.explicitInput.hideSort); @@ -50,29 +51,22 @@ export const OptionsListPopoverActionBar = ({ return (
    - - - - updateSearchString(event.target.value)} - value={searchString.value} - data-test-subj="optionsList-control-search-input" - placeholder={OptionsListStrings.popover.searchPlaceholder[ - searchTechnique ?? OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE - ].getPlaceholderText()} - /> - - {!hideSort && ( - - - - )} - - + {fieldSpec?.type !== 'date' && ( + + updateSearchString(event.target.value)} + value={searchString.value} + data-test-subj="optionsList-control-search-input" + placeholder={OptionsListStrings.popover.searchPlaceholder[ + searchTechnique ?? OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE + ].getPlaceholderText()} + /> + + )} + {!hideSort && ( + + + + )} diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx index 980f861e00b26..2b6dbdc3b9507 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx @@ -18,20 +18,26 @@ import { import { OptionsListStrings } from './options_list_strings'; import { useOptionsList } from '../embeddable/options_list_embeddable'; +import { useFieldFormatter } from '../../hooks/use_field_formatter'; export const OptionsListPopoverInvalidSelections = () => { const optionsList = useOptionsList(); - const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); const fieldName = optionsList.select((state) => state.explicitInput.fieldName); + const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); + const fieldSpec = optionsList.select((state) => state.componentState.field); + + const dataViewId = optionsList.select((state) => state.output.dataViewId); + const fieldFormatter = useFieldFormatter({ dataViewId, fieldSpec }); + const [selectableOptions, setSelectableOptions] = useState([]); // will be set in following useEffect useEffect(() => { /* This useEffect makes selectableOptions responsive to unchecking options */ const options: EuiSelectableOption[] = (invalidSelections ?? []).map((key) => { return { key, - label: key, + label: fieldFormatter(key), checked: 'on', className: 'optionsList__selectionInvalid', 'data-test-subj': `optionsList-control-ignored-selection-${key}`, @@ -46,7 +52,7 @@ export const OptionsListPopoverInvalidSelections = () => { }; }); setSelectableOptions(options); - }, [invalidSelections]); + }, [fieldFormatter, invalidSelections]); return ( <> diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_sorting_button.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_sorting_button.tsx index 878238646c44d..d1cad0bb97c81 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_sorting_button.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_sorting_button.tsx @@ -12,7 +12,6 @@ import { EuiButtonGroupOptionProps, EuiSelectableOption, EuiPopoverTitle, - EuiButtonEmpty, EuiButtonGroup, EuiSelectable, EuiFlexGroup, @@ -20,6 +19,7 @@ import { EuiPopover, Direction, EuiToolTip, + EuiButtonIcon, } from '@elastic/eui'; import { @@ -70,7 +70,7 @@ export const OptionsListPopoverSortingButton = ({ data: { sortBy: key }, checked: key === sort.by ? 'on' : undefined, 'data-test-subj': `optionsList__sortBy_${key}`, - label: OptionsListStrings.editorAndPopover.sortBy[key].getSortByLabel(), + label: OptionsListStrings.editorAndPopover.sortBy[key].getSortByLabel(field?.type), } as SortByItem; }); }); @@ -85,32 +85,34 @@ export const OptionsListPopoverSortingButton = ({ }, [optionsList.dispatch] ); + const SortButton = () => ( - setIsSortingPopoverOpen(!isSortingPopoverOpen)} aria-label={OptionsListStrings.popover.getSortPopoverDescription()} - > - {OptionsListStrings.popover.getSortPopoverTitle()} - + /> ); return ( - - - ) : ( + - ) + } panelPaddingSize="none" isOpen={isSortingPopoverOpen} diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx index 0e0b2089cee1c..a7efc79825b86 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx @@ -17,6 +17,7 @@ import { OptionsListStrings } from './options_list_strings'; import { useOptionsList } from '../embeddable/options_list_embeddable'; import { OptionsListPopoverEmptyMessage } from './options_list_popover_empty_message'; import { OptionsListPopoverSuggestionBadge } from './options_list_popover_suggestion_badge'; +import { useFieldFormatter } from '../../hooks/use_field_formatter'; interface OptionsListPopoverSuggestionsProps { showOnlySelected: boolean; @@ -33,6 +34,7 @@ export const OptionsListPopoverSuggestions = ({ const availableOptions = optionsList.select((state) => state.componentState.availableOptions); const totalCardinality = optionsList.select((state) => state.componentState.totalCardinality); const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); + const fieldSpec = optionsList.select((state) => state.componentState.field); const sort = optionsList.select((state) => state.explicitInput.sort); const fieldName = optionsList.select((state) => state.explicitInput.fieldName); @@ -41,10 +43,13 @@ export const OptionsListPopoverSuggestions = ({ const existsSelected = optionsList.select((state) => state.explicitInput.existsSelected); const selectedOptions = optionsList.select((state) => state.explicitInput.selectedOptions); + const dataViewId = optionsList.select((state) => state.output.dataViewId); const isLoading = optionsList.select((state) => state.output.loading) ?? false; const listRef = useRef(null); + const fieldFormatter = useFieldFormatter({ dataViewId, fieldSpec }); + const canLoadMoreSuggestions = useMemo( () => totalCardinality @@ -84,9 +89,10 @@ export const OptionsListPopoverSuggestions = ({ // this means that `showOnlySelected` is true, and doc count is not known when this is the case suggestion = { value: suggestion }; } + return { key: suggestion.value, - label: suggestion.value, + label: fieldFormatter(suggestion.value) ?? suggestion.value, checked: selectedOptionsSet?.has(suggestion.value) ? 'on' : undefined, 'data-test-subj': `optionsList-control-selection-${suggestion.value}`, className: @@ -124,6 +130,7 @@ export const OptionsListPopoverSuggestions = ({ invalidSelectionsSet, existsSelectableOption, canLoadMoreSuggestions, + fieldFormatter, ]); const loadMoreOptions = useCallback(() => { diff --git a/src/plugins/controls/public/options_list/components/options_list_strings.ts b/src/plugins/controls/public/options_list/components/options_list_strings.ts index 436326e5350c5..2977bb9f1cbb3 100644 --- a/src/plugins/controls/public/options_list/components/options_list_strings.ts +++ b/src/plugins/controls/public/options_list/components/options_list_strings.ts @@ -10,10 +10,16 @@ import { i18n } from '@kbn/i18n'; export const OptionsListStrings = { control: { - getSeparator: () => - i18n.translate('controls.optionsList.control.separator', { + getSeparator: (type?: string) => { + if (type === 'date') { + return i18n.translate('controls.optionsList.control.dateSeparator', { + defaultMessage: '; ', + }); + } + return i18n.translate('controls.optionsList.control.separator', { defaultMessage: ', ', - }), + }); + }, getPlaceholder: () => i18n.translate('controls.optionsList.control.placeholder', { defaultMessage: 'Any', @@ -228,10 +234,14 @@ export const OptionsListStrings = { }), }, _key: { - getSortByLabel: () => - i18n.translate('controls.optionsList.popover.sortBy.alphabetical', { - defaultMessage: 'Alphabetically', - }), + getSortByLabel: (type?: string) => + type === 'date' + ? i18n.translate('controls.optionsList.popover.sortBy.date', { + defaultMessage: 'By date', + }) + : i18n.translate('controls.optionsList.popover.sortBy.alphabetical', { + defaultMessage: 'Alphabetically', + }), }, }, sortOrder: { diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index 5431cdffc560a..b28142474ba2d 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -332,6 +332,7 @@ export class OptionsListEmbeddable } const { suggestions, invalidSelections, totalCardinality } = response; + if ( (!selectedOptions && !existsSelected) || isEmpty(invalidSelections) || @@ -347,7 +348,7 @@ export class OptionsListEmbeddable const valid: string[] = []; const invalid: string[] = []; for (const selectedOption of selectedOptions ?? []) { - if (invalidSelections?.includes(selectedOption)) invalid.push(selectedOption); + if (invalidSelections?.includes(String(selectedOption))) invalid.push(selectedOption); else valid.push(selectedOption); } this.dispatch.updateQueryResults({ @@ -397,6 +398,7 @@ export class OptionsListEmbeddable newFilter = buildPhrasesFilter(field, validSelections, dataView); } } + if (!newFilter) return []; newFilter.meta.key = field?.name; diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index cb2b1b4a82de3..a3fecb46442a1 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -61,9 +61,8 @@ export class OptionsListEmbeddableFactory public isFieldCompatible = (field: DataViewField) => { return ( !field.spec.scripted && - ((field.aggregatable && field.type === 'string') || - field.type === 'boolean' || - field.type === 'ip') + field.aggregatable && + ['string', 'boolean', 'ip', 'date'].includes(field.type) ); }; diff --git a/src/plugins/controls/public/range_slider/components/range_slider.scss b/src/plugins/controls/public/range_slider/components/range_slider.scss index d3242a7869963..606208bf25631 100644 --- a/src/plugins/controls/public/range_slider/components/range_slider.scss +++ b/src/plugins/controls/public/range_slider/components/range_slider.scss @@ -14,7 +14,7 @@ } .rangeSliderAnchor__fieldNumber { - font-weight: $euiFontWeightBold; + font-weight: $euiFontWeightMedium; box-shadow: none; text-align: center; background-color: transparent; diff --git a/src/plugins/controls/public/range_slider/components/range_slider_control.tsx b/src/plugins/controls/public/range_slider/components/range_slider_control.tsx index 267b9220da54b..3bde458c5e076 100644 --- a/src/plugins/controls/public/range_slider/components/range_slider_control.tsx +++ b/src/plugins/controls/public/range_slider/components/range_slider_control.tsx @@ -11,19 +11,16 @@ import React, { FC, useState, useMemo, useEffect, useCallback, useRef } from 're import { EuiRangeTick, EuiDualRange, EuiDualRangeProps } from '@elastic/eui'; -import { pluginServices } from '../../services'; import { RangeValue } from '../../../common/range_slider/types'; import { useRangeSlider } from '../embeddable/range_slider_embeddable'; import { ControlError } from '../../control_group/component/control_error_component'; import './range_slider.scss'; import { MIN_POPOVER_WIDTH } from '../../constants'; +import { useFieldFormatter } from '../../hooks/use_field_formatter'; export const RangeSliderControl: FC = () => { /** Controls Services Context */ - const { - dataViews: { get: getDataViewById }, - } = pluginServices.getServices(); const rangeSlider = useRangeSlider(); const rangeSliderRef = useRef(null); @@ -44,8 +41,8 @@ export const RangeSliderControl: FC = () => { // React component state const [displayedValue, setDisplayedValue] = useState(value ?? ['', '']); - const [fieldFormatter, setFieldFormatter] = useState(() => (toFormat: string) => toFormat); + const fieldFormatter = useFieldFormatter({ dataViewId, fieldSpec }); const debouncedOnChange = useMemo( () => debounce((newRange: RangeValue) => { @@ -54,22 +51,6 @@ export const RangeSliderControl: FC = () => { [rangeSlider.dispatch] ); - /** - * derive field formatter from fieldSpec and dataViewId - */ - useEffect(() => { - (async () => { - if (!dataViewId || !fieldSpec) return; - // dataViews are cached, and should always be available without having to hit ES. - const dataView = await getDataViewById(dataViewId); - setFieldFormatter( - () => - dataView?.getFormatterForField(fieldSpec).getConverterFor('text') ?? - ((toFormat: string) => toFormat) - ); - })(); - }, [fieldSpec, dataViewId, getDataViewById]); - /** * This will recalculate the displayed min/max of the range slider to allow for selections smaller * than the `min` and larger than the `max` diff --git a/src/plugins/controls/public/time_slider/components/index.scss b/src/plugins/controls/public/time_slider/components/index.scss index 66fb486c970e8..c23667f314f05 100644 --- a/src/plugins/controls/public/time_slider/components/index.scss +++ b/src/plugins/controls/public/time_slider/components/index.scss @@ -28,7 +28,7 @@ } .timeSlider__anchorText { - font-weight: $euiFontWeightBold; + font-weight: $euiFontWeightMedium; } .timeSlider__anchorText--default { diff --git a/src/plugins/controls/public/time_slider/components/time_slider_popover_button.tsx b/src/plugins/controls/public/time_slider/components/time_slider_popover_button.tsx index 0036dcdf758e4..bb2597716d559 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_popover_button.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_popover_button.tsx @@ -24,7 +24,7 @@ export function TimeSliderPopoverButton(props: Props) { onClick={props.onClick} data-test-subj="timeSlider-popoverToggleButton" > - + {props.formatDate(props.from)}   →   {props.formatDate(props.to)} diff --git a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts index 997927a5bbad2..d364027a55d9b 100644 --- a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts +++ b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts @@ -92,31 +92,6 @@ describe('options list cheap queries', () => { }); }); - test('creates boolean aggregation for boolean field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: false, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolean", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - test('creates nested aggregation for nested field', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, @@ -151,6 +126,64 @@ describe('options list cheap queries', () => { `); }); + describe('boolean field', () => { + test('creates boolean aggregation for boolean field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'coolean', + allowExpensiveQueries: false, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'boolean' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "suggestions": Object { + "terms": Object { + "field": "coolean", + "order": Object { + "_key": "desc", + }, + "shard_size": 10, + }, + }, + } + `); + }); + }); + + describe('date field field', () => { + test('creates date aggregation for date field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: false, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "suggestions": Object { + "terms": Object { + "field": "@timestamp", + "order": Object { + "_key": "desc", + }, + "shard_size": 10, + }, + }, + } + `); + }); + }); + describe('IP field', () => { test('without a search string, creates IP range aggregation with default range', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { @@ -513,99 +546,145 @@ describe('options list cheap queries', () => { ] `); }); - }); - test('parses mixed IPv4 and IPv6 result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - allowExpensiveQueries: false, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: { - ipv4: { - from: '0.0.0.0', - to: '255.255.255.255', - filteredSuggestions: { - buckets: [ - { doc_count: 8, key: '21.35.91.62' }, - { doc_count: 8, key: '21.35.91.61' }, - { doc_count: 11, key: '111.52.174.2' }, - { doc_count: 1, key: '56.73.58.63' }, - { doc_count: 9, key: '23.216.241.120' }, - { doc_count: 10, key: '196.162.13.39' }, - { doc_count: 7, key: '203.88.33.151' }, - ], + test('parses mixed IPv4 and IPv6 result', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'clientip', + allowExpensiveQueries: false, + fieldSpec: { type: 'ip' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); + rawSearchResponseMock.aggregations = { + suggestions: { + buckets: { + ipv4: { + from: '0.0.0.0', + to: '255.255.255.255', + filteredSuggestions: { + buckets: [ + { doc_count: 8, key: '21.35.91.62' }, + { doc_count: 8, key: '21.35.91.61' }, + { doc_count: 11, key: '111.52.174.2' }, + { doc_count: 1, key: '56.73.58.63' }, + { doc_count: 9, key: '23.216.241.120' }, + { doc_count: 10, key: '196.162.13.39' }, + { doc_count: 7, key: '203.88.33.151' }, + ], + }, }, - }, - ipv6: { - from: '::', - to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', - filteredSuggestions: { - buckets: [ - { doc_count: 12, key: '52:ae76:5947:5e2a:551:fe6a:712a:c72' }, - { doc_count: 1, key: 'fd:4aa0:c27c:b04:997f:2de1:51b4:8418' }, - { doc_count: 9, key: '28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172' }, - { doc_count: 6, key: '1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8' }, - { doc_count: 10, key: 'f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63' }, - ], + ipv6: { + from: '::', + to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + filteredSuggestions: { + buckets: [ + { doc_count: 12, key: '52:ae76:5947:5e2a:551:fe6a:712a:c72' }, + { doc_count: 1, key: 'fd:4aa0:c27c:b04:997f:2de1:51b4:8418' }, + { doc_count: 9, key: '28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172' }, + { doc_count: 6, key: '1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8' }, + { doc_count: 10, key: 'f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63' }, + ], + }, }, }, }, - }, - }; + }; - const parsed = suggestionAggBuilder.parse( - rawSearchResponseMock, - optionsListRequestBodyMock - ).suggestions; + const parsed = suggestionAggBuilder.parse( + rawSearchResponseMock, + optionsListRequestBodyMock + ).suggestions; - expect(parsed).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 12, - "value": "52:ae76:5947:5e2a:551:fe6a:712a:c72", - }, - Object { - "docCount": 11, - "value": "111.52.174.2", - }, - Object { - "docCount": 10, - "value": "196.162.13.39", - }, - Object { - "docCount": 10, - "value": "f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63", - }, - Object { - "docCount": 9, - "value": "23.216.241.120", - }, - Object { - "docCount": 9, - "value": "28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172", - }, - Object { - "docCount": 8, - "value": "21.35.91.62", - }, - Object { - "docCount": 8, - "value": "21.35.91.61", - }, - Object { - "docCount": 7, - "value": "203.88.33.151", - }, - Object { - "docCount": 6, - "value": "1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8", + expect(parsed).toMatchInlineSnapshot(` + Array [ + Object { + "docCount": 12, + "value": "52:ae76:5947:5e2a:551:fe6a:712a:c72", + }, + Object { + "docCount": 11, + "value": "111.52.174.2", + }, + Object { + "docCount": 10, + "value": "196.162.13.39", + }, + Object { + "docCount": 10, + "value": "f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63", + }, + Object { + "docCount": 9, + "value": "23.216.241.120", + }, + Object { + "docCount": 9, + "value": "28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172", + }, + Object { + "docCount": 8, + "value": "21.35.91.62", + }, + Object { + "docCount": 8, + "value": "21.35.91.61", + }, + Object { + "docCount": 7, + "value": "203.88.33.151", + }, + Object { + "docCount": 6, + "value": "1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8", + }, + ] + `); + }); + + test('parses date result', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: false, + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); + rawSearchResponseMock.aggregations = { + suggestions: { + buckets: [ + { doc_count: 20, key: 1696824675 }, + { doc_count: 13, key: 1686086625 }, + { doc_count: 4, key: 1703684229 }, + { doc_count: 34, key: 1688603684 }, + ], }, - ] - `); + }; + + const parsed = suggestionAggBuilder.parse( + rawSearchResponseMock, + optionsListRequestBodyMock + ).suggestions; + + expect(parsed).toMatchInlineSnapshot(` + Array [ + Object { + "docCount": 20, + "value": 1696824675, + }, + Object { + "docCount": 13, + "value": 1686086625, + }, + Object { + "docCount": 4, + "value": 1703684229, + }, + Object { + "docCount": 34, + "value": 1688603684, + }, + ] + `); + }); }); }); diff --git a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts index 0df11e6408606..cba08877607d7 100644 --- a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts @@ -40,11 +40,12 @@ const cheapSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggregat * (such as a keyword field or a keyword+text multi-field) */ keywordOrText: { - buildAggregation: ({ fieldName, searchString, sort }: OptionsListRequestBody) => ({ + buildAggregation: ({ fieldName, fieldSpec, searchString, sort }: OptionsListRequestBody) => ({ suggestions: { terms: { field: fieldName, - ...(searchString && searchString.length > 0 + // disabling for date fields because applying a search string will return an error + ...(fieldSpec?.type !== 'date' && searchString && searchString.length > 0 ? { include: `${getEscapedRegexQuery(searchString)}.*` } : {}), shard_size: 10, diff --git a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts b/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts index a2d0d4e87a260..a5d6f32f63377 100644 --- a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts +++ b/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts @@ -263,31 +263,102 @@ describe('options list expensive queries', () => { }); }); - test('boolean field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: false, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolean", - "order": Object { - "_key": "desc", + describe('boolean field', () => { + test('creates boolean aggregation for boolean field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'coolean', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'boolean' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "suggestions": Object { + "terms": Object { + "field": "coolean", + "order": Object { + "_key": "desc", + }, + "shard_size": 10, + }, + }, + } + `); + }); + }); + + describe('date field field', () => { + test('creates date aggregation for date field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "suggestions": Object { + "terms": Object { + "field": "@timestamp", + "order": Object { + "_key": "desc", + }, + "shard_size": 10, + "size": 10, }, - "shard_size": 10, }, - }, - } - `); + "unique_terms": Object { + "cardinality": Object { + "field": "@timestamp", + }, + }, + } + `); + }); + + test('does not throw error when receiving search string', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + searchString: '2023', + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "suggestions": Object { + "terms": Object { + "field": "@timestamp", + "order": Object { + "_key": "desc", + }, + "shard_size": 10, + "size": 10, + }, + }, + "unique_terms": Object { + "cardinality": Object { + "field": "@timestamp", + }, + }, + } + `); + }); }); describe('IP field', () => { @@ -769,5 +840,53 @@ describe('options list expensive queries', () => { ] `); }); + + test('parses date result', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: true, + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + optionsListRequestBodyMock + ); + rawSearchResponseMock.aggregations = { + suggestions: { + buckets: [ + { doc_count: 20, key: 1696824675 }, + { doc_count: 13, key: 1686086625 }, + { doc_count: 4, key: 1703684229 }, + { doc_count: 34, key: 1688603684 }, + ], + }, + }; + + const parsed = suggestionAggBuilder.parse( + rawSearchResponseMock, + optionsListRequestBodyMock + ).suggestions; + + expect(parsed).toMatchInlineSnapshot(` + Array [ + Object { + "docCount": 20, + "value": 1696824675, + }, + Object { + "docCount": 13, + "value": 1686086625, + }, + Object { + "docCount": 4, + "value": 1703684229, + }, + Object { + "docCount": 34, + "value": 1688603684, + }, + ] + `); + }); }); }); diff --git a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts b/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts index 5fb865bfada5b..156a966f6a482 100644 --- a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts @@ -65,7 +65,8 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr }, }, }; - if (searchString && searchString.length > 0) { + // disabling for date fields because applying a search string will return an error + if (fieldSpec?.type !== 'date' && searchString && searchString.length > 0) { textOrKeywordQuery = { filteredSuggestions: { filter: { diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index d6fe08f275ccf..b2a42fa0b3b19 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -51,7 +51,9 @@ export const setupOptionsListSuggestionsRoute = ( fieldSpec: schema.maybe(schema.any()), allowExpensiveQueries: schema.boolean(), searchString: schema.maybe(schema.string()), - selectedOptions: schema.maybe(schema.arrayOf(schema.string())), + selectedOptions: schema.maybe( + schema.oneOf([schema.arrayOf(schema.string()), schema.arrayOf(schema.number())]) + ), }, { unknowns: 'allow' } ), diff --git a/src/plugins/controls/server/options_list/options_list_validation_queries.ts b/src/plugins/controls/server/options_list/options_list_validation_queries.ts index a79c0971a5cb1..56e7f9efef6bf 100644 --- a/src/plugins/controls/server/options_list/options_list_validation_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_validation_queries.ts @@ -20,7 +20,7 @@ export const getValidationAggregationBuilder: () => OptionsListValidationAggrega let selectedOptionsFilters; if (selectedOptions) { selectedOptionsFilters = selectedOptions.reduce((acc, currentOption) => { - acc[currentOption] = { match: { [fieldName]: currentOption } }; + acc[currentOption] = { match: { [fieldName]: String(currentOption) } }; return acc; }, {} as { [key: string]: { match: { [key: string]: string } } }); } From 853d9e6e9f7a2bf0dda1fd796042849e97ea3d60 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Tue, 3 Oct 2023 17:37:10 -0400 Subject: [PATCH 029/170] [Response Ops][Alerting] Write alert duration out as microseconds (#167821) Fixes https://github.com/elastic/kibana/issues/167298 ## Summary Framework alerts client was writing alert duration out as a nanoseconds string, which is how it is stored in the task state. However, the rule registry lifecycle executor is writing duration out as microsecond number. Aligning to write the same unit and format as the lifecycle executor. ## To Verify: - On `main`, create an ES query rule with active alerts that shows up on the O11y alerts table. Let it run and see that the duration shown on the table is very large and incorrect. - Switch to this branch and let the rule run again. Verify that the duration on the alerts table is now correct. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../alerts_client/alerts_client.test.ts | 30 +++++++++---------- .../alerts_client/lib/build_new_alert.test.ts | 2 +- .../alerts_client/lib/build_new_alert.ts | 3 +- .../lib/build_ongoing_alert.test.ts | 16 +++++----- .../alerts_client/lib/build_ongoing_alert.ts | 3 +- .../lib/build_recovered_alert.test.ts | 12 ++++---- .../lib/build_recovered_alert.ts | 3 +- .../alerts_client/lib/nanos_to_micros.test.ts | 24 +++++++++++++++ .../alerts_client/lib/nanos_to_micros.ts | 21 +++++++++++++ .../task_runner_alerts_client.test.ts | 2 +- .../group4/alerts_as_data/alerts_as_data.ts | 11 ++++--- .../common/alerting/alert_documents.ts | 6 ++-- 12 files changed, 90 insertions(+), 43 deletions(-) create mode 100644 x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.test.ts create mode 100644 x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.ts diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts index c870a0c52d13b..d1da82d9a9701 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts @@ -145,7 +145,7 @@ const fetchedAlert1 = { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '1', @@ -175,7 +175,7 @@ const fetchedAlert2 = { [EVENT_ACTION]: 'active', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false], [ALERT_INSTANCE_ID]: '2', @@ -205,7 +205,7 @@ const getNewIndexedAlertDoc = (overrides = {}) => ({ [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '1', @@ -234,7 +234,7 @@ const getNewIndexedAlertDoc = (overrides = {}) => ({ const getOngoingIndexedAlertDoc = (overrides = {}) => ({ ...getNewIndexedAlertDoc(), [EVENT_ACTION]: 'active', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING_HISTORY]: [true, false], [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, @@ -244,7 +244,7 @@ const getOngoingIndexedAlertDoc = (overrides = {}) => ({ const getRecoveredIndexedAlertDoc = (overrides = {}) => ({ ...getNewIndexedAlertDoc(), [EVENT_ACTION]: 'close', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_ACTION_GROUP]: 'recovered', [ALERT_FLAPPING_HISTORY]: [true, true], [ALERT_START]: '2023-03-28T12:27:28.159Z', @@ -669,7 +669,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -855,7 +855,7 @@ describe('Alerts Client', () => { [ALERT_UUID]: 'def', [ALERT_INSTANCE_ID]: '2', [ALERT_FLAPPING_HISTORY]: [true, false, false, false], - [ALERT_DURATION]: '72000000000000', + [ALERT_DURATION]: 72000000000, [ALERT_START]: '2023-03-28T02:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T02:27:28.159Z' }, }), @@ -958,7 +958,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '72000000000000', + [ALERT_DURATION]: 72000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false, false, false], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -1005,7 +1005,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'recovered', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, true], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -1177,7 +1177,7 @@ describe('Alerts Client', () => { getOngoingIndexedAlertDoc({ [ALERT_UUID]: 'def', [ALERT_INSTANCE_ID]: '2', - [ALERT_DURATION]: '72000000000000', + [ALERT_DURATION]: 72000000000, [ALERT_FLAPPING_HISTORY]: [true, false, false, false], [ALERT_START]: '2023-03-28T02:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T02:27:28.159Z' }, @@ -1799,7 +1799,7 @@ describe('Alerts Client', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '1', @@ -1834,7 +1834,7 @@ describe('Alerts Client', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '2', @@ -1993,7 +1993,7 @@ describe('Alerts Client', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '1', @@ -2096,7 +2096,7 @@ describe('Alerts Client', () => { [EVENT_ACTION]: 'active', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false], [ALERT_INSTANCE_ID]: '1', @@ -2198,7 +2198,7 @@ describe('Alerts Client', () => { [EVENT_ACTION]: 'close', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'recovered', - [ALERT_DURATION]: '36000000000000', + [ALERT_DURATION]: 36000000000, [ALERT_END]: date, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, true], diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts index 4e317d5f5592f..2da67f584e93d 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts @@ -84,7 +84,7 @@ describe('buildNewAlert', () => { [ALERT_STATUS]: 'active', [ALERT_UUID]: legacyAlert.getUuid(), [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_START]: now, [ALERT_TIME_RANGE]: { gte: now }, [SPACE_IDS]: ['default'], diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts index 9c4c4bb6c095c..4af3e3f93817b 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts @@ -32,6 +32,7 @@ import { Alert as LegacyAlert } from '../../alert/alert'; import { AlertInstanceContext, AlertInstanceState, RuleAlertData } from '../../types'; import type { AlertRule } from '../types'; import { stripFrameworkFields } from './strip_framework_fields'; +import { nanosToMicros } from './nanos_to_micros'; interface BuildNewAlertOpts< AlertData extends RuleAlertData, @@ -89,7 +90,7 @@ export const buildNewAlert = < [ALERT_UUID]: legacyAlert.getUuid(), [ALERT_WORKFLOW_STATUS]: get(cleanedPayload, ALERT_WORKFLOW_STATUS, 'open'), ...(legacyAlert.getState().duration - ? { [ALERT_DURATION]: legacyAlert.getState().duration } + ? { [ALERT_DURATION]: nanosToMicros(legacyAlert.getState().duration) } : {}), ...(legacyAlert.getState().start ? { diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts index 7ccef435a5a49..2c4fc087a4745 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts @@ -58,7 +58,7 @@ for (const flattened of [true, false]) { [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_STATUS]: 'active', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [ALERT_WORKFLOW_STATUS]: 'open', @@ -119,7 +119,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -195,7 +195,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-xyz'], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -284,7 +284,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -380,7 +380,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -480,7 +480,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -560,7 +560,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', @@ -658,7 +658,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'active', [ALERT_WORKFLOW_STATUS]: 'custom_status', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, [SPACE_IDS]: ['default'], [VERSION]: '8.9.0', diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts index f22c14e62b464..ec4eae47d6e82 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts @@ -26,6 +26,7 @@ import { Alert as LegacyAlert } from '../../alert/alert'; import { AlertInstanceContext, AlertInstanceState, RuleAlertData } from '../../types'; import type { AlertRule } from '../types'; import { stripFrameworkFields } from './strip_framework_fields'; +import { nanosToMicros } from './nanos_to_micros'; import { removeUnflattenedFieldsFromAlert, replaceRefreshableAlertFields } from './format_alert'; interface BuildOngoingAlertOpts< @@ -100,7 +101,7 @@ export const buildOngoingAlert = < : {}), // Set latest duration as ongoing alerts should have updated duration ...(legacyAlert.getState().duration - ? { [ALERT_DURATION]: legacyAlert.getState().duration } + ? { [ALERT_DURATION]: nanosToMicros(legacyAlert.getState().duration) } : {}), [SPACE_IDS]: rule[SPACE_IDS], [VERSION]: kibanaVersion, diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts index 73ff3e0a0f6e4..c8a1454870031 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts @@ -68,7 +68,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, @@ -132,7 +132,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, @@ -226,7 +226,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, @@ -328,7 +328,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, @@ -428,7 +428,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'open', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, @@ -527,7 +527,7 @@ for (const flattened of [true, false]) { [ALERT_MAINTENANCE_WINDOW_IDS]: [], [ALERT_STATUS]: 'recovered', [ALERT_WORKFLOW_STATUS]: 'custom_status', - [ALERT_DURATION]: '36000000', + [ALERT_DURATION]: 36000, [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_END]: '2023-03-30T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts index be6d7ff033dd1..74bebca1bb955 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts @@ -28,6 +28,7 @@ import { Alert as LegacyAlert } from '../../alert/alert'; import { AlertInstanceContext, AlertInstanceState, RuleAlertData } from '../../types'; import type { AlertRule } from '../types'; import { stripFrameworkFields } from './strip_framework_fields'; +import { nanosToMicros } from './nanos_to_micros'; import { removeUnflattenedFieldsFromAlert, replaceRefreshableAlertFields } from './format_alert'; interface BuildRecoveredAlertOpts< @@ -95,7 +96,7 @@ export const buildRecoveredAlert = < [ALERT_STATUS]: 'recovered', // Set latest duration as recovered alerts should have updated duration ...(legacyAlert.getState().duration - ? { [ALERT_DURATION]: legacyAlert.getState().duration } + ? { [ALERT_DURATION]: nanosToMicros(legacyAlert.getState().duration) } : {}), // Set end time ...(legacyAlert.getState().end && legacyAlert.getState().start diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.test.ts new file mode 100644 index 0000000000000..b8ef50b27ce82 --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.test.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { nanosToMicros } from './nanos_to_micros'; + +describe('nanosToMicros', () => { + test('should correctly format nanosecond string', () => { + expect(nanosToMicros('159053000000')).toEqual(159053000); + expect(nanosToMicros('102026000000')).toEqual(102026000); + }); + + test('should correctly handle unexpected inputs', () => { + // @ts-expect-error + expect(nanosToMicros(159053000000)).toEqual(159053000); + // @ts-expect-error + expect(nanosToMicros(['159053000000'])).toEqual(0); + // @ts-expect-error + expect(nanosToMicros({ foo: '159053000000' })).toEqual(0); + expect(nanosToMicros('abc')).toEqual(0); + }); +}); diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.ts b/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.ts new file mode 100644 index 0000000000000..80fc97e275ad7 --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_client/lib/nanos_to_micros.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isNumber, isString } from 'lodash'; + +export const nanosToMicros = (nanosecondString: string): number => { + if (!isString(nanosecondString)) { + return isNumber(nanosecondString) ? nanosecondString / 1000 : 0; + } + + try { + const nanos = parseInt(nanosecondString, 10); + return isNaN(nanos) ? 0 : nanos / 1000; + } catch (err) { + return 0; + } +}; diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts index b8c587f18e22e..fd11e5c8f0f8a 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts @@ -529,7 +529,7 @@ describe('Task Runner', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', - [ALERT_DURATION]: '0', + [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: '1', diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts index 83dfff9c08d08..d600636010233 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts @@ -130,8 +130,8 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F // alert UUID should equal doc id expect(source[ALERT_UUID]).to.equal(alertDocsRun1[i]._id); - // duration should be '0' since this is a new alert - expect(source[ALERT_DURATION]).to.equal('0'); + // duration should be 0 since this is a new alert + expect(source[ALERT_DURATION]).to.equal(0); // start should be defined expect(source[ALERT_START]).to.match(timestampPattern); @@ -210,8 +210,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F expect(source[ALERT_UUID]).to.equal(alertDocsRun2[i]._id); // duration should be greater than 0 since these are not new alerts - const durationAsNumber = Number(source[ALERT_DURATION]); - expect(durationAsNumber).to.be.greaterThan(0); + expect(source[ALERT_DURATION]).to.be.greaterThan(0); } // alertA, run2 @@ -425,8 +424,8 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F expect(alertCDocRun3[ALERT_START]).not.to.equal(alertCDocRun2[ALERT_START]); // timestamp should be defined and not the same as prior run expect(alertCDocRun3['@timestamp']).to.match(timestampPattern); - // duration should be '0' since this is a new alert - expect(alertCDocRun3[ALERT_DURATION]).to.equal('0'); + // duration should be 0 since this is a new alert + expect(alertCDocRun3[ALERT_DURATION]).to.equal(0); // flapping false, flapping history should be history from prior run with additional entry expect(alertCDocRun3[ALERT_FLAPPING]).to.equal(false); expect(alertCDocRun3[ALERT_FLAPPING_HISTORY]).to.eql([ diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts index 10e5e4d0c88e1..a108ffa4f2d00 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts @@ -105,7 +105,7 @@ export default function ({ getService }: FtrProviderContext) { expect(hits1[ALERT_MAINTENANCE_WINDOW_IDS]).to.be.an(Array); expect(typeof hits1[ALERT_REASON]).to.be('string'); expect(typeof hits1[ALERT_RULE_EXECUTION_UUID]).to.be('string'); - expect(typeof hits1[ALERT_DURATION]).to.be('string'); + expect(typeof hits1[ALERT_DURATION]).to.be('number'); expect(new Date(hits1[ALERT_START])).to.be.a(Date); expect(typeof hits1[ALERT_TIME_RANGE]).to.be('object'); expect(typeof hits1[ALERT_UUID]).to.be('string'); @@ -235,8 +235,8 @@ export default function ({ getService }: FtrProviderContext) { expect(hits2['@timestamp']).to.be.greaterThan(hits1['@timestamp']); expect(OPEN_OR_ACTIVE.has(hits1[EVENT_ACTION])).to.be(true); expect(hits2[EVENT_ACTION]).to.be('active'); - expect(parseInt(hits1[ALERT_DURATION], 10)).to.not.be.lessThan(0); - expect(hits2[ALERT_DURATION]).not.to.be('0'); + expect(hits1[ALERT_DURATION]).to.not.be.lessThan(0); + expect(hits2[ALERT_DURATION]).not.to.be(0); // remove fields we know will be different const fields = [ From 2256a7a80d877d776d5d48d87a2a2c23ea4eabca Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Tue, 3 Oct 2023 17:47:14 -0400 Subject: [PATCH 030/170] [RAM] Slack api allowed channels (#167150) ## Summary We add a lot of issue with our slack API by trying to fetch the channels, so we decided to only use channel ID and create an allowed list with channel IDs. Here the new design: # Connector Creation #### Creation new connector image #### Editing new connector image #### Editing old slack api connector image # Slack Action Form #### Creation of new slack api action in rule form image #### Editing an old slack api action image image ### Checklist Delete any items that are not applicable to this PR. - [ ] [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: Lisa Cawley --- .../common/slack_api/schema.ts | 26 +- .../common/slack_api/types.ts | 19 +- .../slack/action_form.test.tsx | 2 +- .../slack_api/slack_api.test.tsx | 16 +- .../connector_types/slack_api/slack_api.tsx | 18 +- .../slack_api/slack_connectors.test.tsx | 85 ++++-- .../slack_api/slack_connectors.tsx | 133 ++++++++- .../slack_api/slack_params.test.tsx | 253 +++++++++++++++-- .../slack_api/slack_params.tsx | 267 ++++++++++++++---- .../connector_types/slack_api/translations.ts | 20 +- .../slack_api/use_fetch_channels.tsx | 75 ----- .../slack_api/use_valid_channels.tsx | 101 +++++++ .../connector_types/slack_api/api.test.ts | 72 ++--- .../server/connector_types/slack_api/api.ts | 21 +- .../connector_types/slack_api/index.test.ts | 75 +++-- .../server/connector_types/slack_api/index.ts | 7 +- .../connector_types/slack_api/service.test.ts | 83 ++++-- .../connector_types/slack_api/service.ts | 112 ++++---- .../plugins/stack_connectors/server/plugin.ts | 11 +- .../stack_connectors/server/routes/index.ts | 1 + .../server/routes/valid_slack_api_channels.ts | 95 +++++++ .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../triggers_actions_ui/connectors/slack.ts | 14 +- 25 files changed, 1151 insertions(+), 361 deletions(-) delete mode 100644 x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_fetch_channels.tsx create mode 100644 x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_valid_channels.tsx create mode 100644 x-pack/plugins/stack_connectors/server/routes/valid_slack_api_channels.ts diff --git a/x-pack/plugins/stack_connectors/common/slack_api/schema.ts b/x-pack/plugins/stack_connectors/common/slack_api/schema.ts index 4f121fd92389a..d591c7b5f3b64 100644 --- a/x-pack/plugins/stack_connectors/common/slack_api/schema.ts +++ b/x-pack/plugins/stack_connectors/common/slack_api/schema.ts @@ -11,14 +11,30 @@ export const SlackApiSecretsSchema = schema.object({ token: schema.string({ minLength: 1 }), }); -export const SlackApiConfigSchema = schema.object({}, { defaultValue: {} }); +export const SlackApiConfigSchema = schema.object({ + allowedChannels: schema.maybe( + schema.arrayOf( + schema.object({ + id: schema.string({ minLength: 1 }), + name: schema.string({ minLength: 1 }), + }), + { maxSize: 25 } + ) + ), +}); + +export const ValidChannelIdSubActionParamsSchema = schema.object({ + channelId: schema.maybe(schema.string()), +}); -export const GetChannelsParamsSchema = schema.object({ - subAction: schema.literal('getChannels'), +export const ValidChannelIdParamsSchema = schema.object({ + subAction: schema.literal('validChannelId'), + subActionParams: ValidChannelIdSubActionParamsSchema, }); export const PostMessageSubActionParamsSchema = schema.object({ - channels: schema.arrayOf(schema.string(), { maxSize: 1 }), + channels: schema.maybe(schema.arrayOf(schema.string(), { maxSize: 1 })), + channelIds: schema.maybe(schema.arrayOf(schema.string(), { maxSize: 1 })), text: schema.string({ minLength: 1 }), }); @@ -28,6 +44,6 @@ export const PostMessageParamsSchema = schema.object({ }); export const SlackApiParamsSchema = schema.oneOf([ - GetChannelsParamsSchema, + ValidChannelIdParamsSchema, PostMessageParamsSchema, ]); diff --git a/x-pack/plugins/stack_connectors/common/slack_api/types.ts b/x-pack/plugins/stack_connectors/common/slack_api/types.ts index 6d87b078b8c15..7db66261c43cb 100644 --- a/x-pack/plugins/stack_connectors/common/slack_api/types.ts +++ b/x-pack/plugins/stack_connectors/common/slack_api/types.ts @@ -15,6 +15,7 @@ import { SlackApiSecretsSchema, SlackApiParamsSchema, SlackApiConfigSchema, + ValidChannelIdSubActionParamsSchema, } from './schema'; export type SlackApiSecrets = TypeOf; @@ -22,6 +23,7 @@ export type SlackApiConfig = TypeOf; export type PostMessageParams = TypeOf; export type PostMessageSubActionParams = TypeOf; +export type ValidChannelIdSubActionParams = TypeOf; export type SlackApiParams = TypeOf; export type SlackApiConnectorType = ConnectorType< SlackApiConfig, @@ -55,25 +57,34 @@ export interface SlackAPiResponse { }; } -export interface ChannelsResponse { +export interface ChannelResponse { id: string; name: string; is_channel: boolean; is_archived: boolean; is_private: boolean; } -export interface GetChannelsResponse extends SlackAPiResponse { - channels?: ChannelsResponse[]; + +export interface ValidChannelResponse extends SlackAPiResponse { + channel?: ChannelResponse; } export interface PostMessageResponse extends SlackAPiResponse { channel?: string; } +export interface ValidChannelRouteResponse { + validChannels: Array<{ id: string; name: string }>; + invalidChannels: string[]; +} + export interface SlackApiService { - getChannels: () => Promise>; + validChannelId: ( + channelId: string + ) => Promise>; postMessage: ({ channels, + channelIds, text, }: PostMessageSubActionParams) => Promise>; } diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack/action_form.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack/action_form.test.tsx index f06461dd5fbc9..4e86a25ed26d8 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack/action_form.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack/action_form.test.tsx @@ -174,6 +174,6 @@ describe('ActionForm - Slack API Connector', () => { ); - expect(await screen.findByText('Channel is required.')).toBeInTheDocument(); + expect(await screen.findByText('Channel ID is required.')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.test.tsx index 27776a63673b8..d8c49ef12d9b5 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.test.tsx @@ -44,6 +44,20 @@ describe('Slack action params validation', () => { }); }); + test('should succeed when action params include valid message and channels and channel ids', async () => { + const actionParams = { + subAction: 'postMessage', + subActionParams: { channels: ['general'], channelIds: ['general'], text: 'some text' }, + }; + + expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ + errors: { + text: [], + channels: [], + }, + }); + }); + test('should fail when channels field is missing in action params', async () => { const actionParams = { subAction: 'postMessage', @@ -53,7 +67,7 @@ describe('Slack action params validation', () => { expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ errors: { text: [], - channels: ['Channel is required.'], + channels: ['Channel ID is required.'], }, }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx index 102595ebb89b8..95817c5be3e24 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx @@ -26,6 +26,17 @@ import { SLACK_API_CONNECTOR_ID } from '../../../common/slack_api/constants'; import { SlackActionParams } from '../types'; import { subtype } from '../slack/slack'; +const isChannelValid = (channels?: string[], channelIds?: string[]) => { + if ( + (channels === undefined && !channelIds?.length) || + (channelIds === undefined && !channels?.length) || + (!channelIds?.length && !channels?.length) + ) { + return false; + } + return true; +}; + export const getConnectorType = (): ConnectorTypeModel< SlackApiConfig, SlackApiSecrets, @@ -50,7 +61,12 @@ export const getConnectorType = (): ConnectorTypeModel< if (!actionParams.subActionParams.text) { errors.text.push(MESSAGE_REQUIRED); } - if (!actionParams.subActionParams.channels?.length) { + if ( + !isChannelValid( + actionParams.subActionParams.channels, + actionParams.subActionParams.channelIds + ) + ) { errors.channels.push(CHANNEL_REQUIRED); } } diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.test.tsx index 8c255bce003fe..183637274c157 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.test.tsx @@ -6,15 +6,15 @@ */ import React from 'react'; -import { act, render, fireEvent, screen } from '@testing-library/react'; +import { act, render, screen, waitFor } from '@testing-library/react'; import { useKibana } from '@kbn/triggers-actions-ui-plugin/public'; import { ConnectorFormTestProvider, waitForComponentToUpdate } from '../lib/test_utils'; -import SlackActionFields from './slack_connectors'; -import { useFetchChannels } from './use_fetch_channels'; +import { SlackActionFieldsComponents as SlackActionFields } from './slack_connectors'; +import { useValidChannels } from './use_valid_channels'; jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana'); -jest.mock('./use_fetch_channels'); +jest.mock('./use_valid_channels'); (useKibana as jest.Mock).mockImplementation(() => ({ services: { @@ -32,15 +32,19 @@ jest.mock('./use_fetch_channels'); }, })); -(useFetchChannels as jest.Mock).mockImplementation(() => ({ - channels: [], - isLoading: false, -})); +const useValidChannelsMock = useValidChannels as jest.Mock; describe('SlackActionFields renders', () => { const onSubmit = jest.fn(); beforeEach(() => { + useValidChannelsMock.mockClear(); + onSubmit.mockClear(); jest.clearAllMocks(); + useValidChannelsMock.mockImplementation(() => ({ + channels: [], + isLoading: false, + resetChannelsToValidate: jest.fn(), + })); }); it('all connector fields is rendered for web_api type', async () => { @@ -77,27 +81,68 @@ describe('SlackActionFields renders', () => { isDeprecated: false, }; + // Simulate that user just type a channel ID + useValidChannelsMock.mockImplementation(() => ({ + channels: ['my-channel'], + isLoading: false, + resetChannelsToValidate: jest.fn(), + })); + render( {}} /> ); await waitForComponentToUpdate(); - await act(async () => { - fireEvent.click(screen.getByTestId('form-test-provide-submit')); + act(() => { + screen.getByTestId('form-test-provide-submit').click(); }); - expect(onSubmit).toBeCalledTimes(1); - expect(onSubmit).toBeCalledWith({ - data: { - secrets: { - token: 'some token', + + await waitFor(() => { + expect(onSubmit).toBeCalledTimes(1); + expect(onSubmit).toBeCalledWith({ + data: { + secrets: { + token: 'some token', + }, + config: { + allowedChannels: ['my-channel'], + }, + id: 'test', + actionTypeId: '.slack', + name: 'slack', + isDeprecated: false, }, - id: 'test', - actionTypeId: '.slack', - name: 'slack', - isDeprecated: false, + isValid: true, + }); + }); + }); + + it('connector validation should failed when allowedChannels is empty', async () => { + const actionConnector = { + secrets: { + token: 'some token', }, - isValid: true, + id: 'test', + actionTypeId: '.slack', + name: 'slack', + config: {}, + isDeprecated: false, + }; + + render( + + {}} /> + + ); + await waitForComponentToUpdate(); + act(() => { + screen.getByTestId('form-test-provide-submit').click(); + }); + + await waitFor(() => { + expect(onSubmit).toBeCalledTimes(1); + expect(onSubmit).toBeCalledWith(expect.objectContaining({ isValid: false })); }); }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.tsx index 71a262954d2d1..0b1b571036927 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_connectors.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { ActionConnectorFieldsProps, ConfigFieldSchema, @@ -13,12 +13,18 @@ import { SimpleConnectorForm, useKibana, } from '@kbn/triggers-actions-ui-plugin/public'; -import { EuiLink } from '@elastic/eui'; +import { EuiComboBoxOptionOption, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { DocLinksStart } from '@kbn/core/public'; +import { useFormContext, useFormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { debounce, isEmpty, isEqual } from 'lodash'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import * as i18n from './translations'; +import { useValidChannels } from './use_valid_channels'; + +/** wait this many ms after the user completes typing before applying the filter input */ +const INPUT_TIMEOUT = 250; const getSecretsFormSchema = (docLinks: DocLinksStart): SecretsFieldSchema[] => [ { @@ -36,20 +42,141 @@ const getSecretsFormSchema = (docLinks: DocLinksStart): SecretsFieldSchema[] => }, ]; -const NO_SCHEMA: ConfigFieldSchema[] = []; +interface AllowedChannels { + id: string; + name: string; +} + +const getConfigFormSchemaAfterSecrets = ({ + options, + isLoading, + isDisabled, + onChange, + onCreateOption, + selectedOptions, +}: { + options: Array>; + isLoading: boolean; + isDisabled: boolean; + onChange: (options: Array>) => void; + onCreateOption: (searchValue: string, options: EuiComboBoxOptionOption[]) => void; + selectedOptions: Array>; +}): ConfigFieldSchema[] => [ + { + id: 'allowedChannels', + isRequired: true, + label: i18n.ALLOWED_CHANNELS, + type: 'COMBO_BOX', + euiFieldProps: { + noSuggestions: true, + isDisabled, + isLoading, + options, + onChange, + onCreateOption, + selectedOptions, + }, + }, +]; +const NO_SCHEMA: ConfigFieldSchema[] = []; +const SEPARATOR = ' - '; export const SlackActionFieldsComponents: React.FC = ({ readOnly, isEdit, }) => { const { docLinks } = useKibana().services; + const form = useFormContext(); + const { setFieldValue } = form; + const [formData] = useFormData({ form }); + const [authToken, setAuthToken] = useState(''); + const [channelsToValidate, setChannelsToValidate] = useState(''); + const { + channels: validChannels, + isLoading, + resetChannelsToValidate, + } = useValidChannels({ + authToken, + channelId: channelsToValidate, + }); + + const onCreateOption = useCallback((searchValue: string, options: EuiComboBoxOptionOption[]) => { + setChannelsToValidate(searchValue); + }, []); + const onChange = useCallback( + (options: Array>) => { + const tempChannelIds: AllowedChannels[] = options.map( + (opt: EuiComboBoxOptionOption) => { + return opt.value!; + } + ); + setChannelsToValidate(''); + resetChannelsToValidate(tempChannelIds); + }, + [resetChannelsToValidate] + ); + + const configFormSchemaAfterSecrets = useMemo(() => { + const validChannelsFormatted = validChannels.map((channel) => ({ + label: `${channel.id}${SEPARATOR}${channel.name}`, + value: channel, + })); + return getConfigFormSchemaAfterSecrets({ + options: validChannelsFormatted, + isLoading, + isDisabled: (authToken || '').length === 0, + onChange, + onCreateOption, + selectedOptions: validChannelsFormatted, + }); + }, [validChannels, isLoading, authToken, onChange, onCreateOption]); + + const debounceSetToken = debounce(setAuthToken, INPUT_TIMEOUT); + useEffect(() => { + if (formData.secrets && formData.secrets.token !== authToken) { + debounceSetToken(formData.secrets.token); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [formData.secrets]); + + useEffect(() => { + if (isEmpty(authToken) && validChannels.length > 0) { + setFieldValue('config.allowedChannels', []); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [authToken]); + + useEffect(() => { + const configAllowedChannels = formData?.config?.allowedChannels || []; + if (!isEqual(configAllowedChannels, validChannels)) { + setFieldValue('config.allowedChannels', validChannels); + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [validChannels]); + + const isInitialyzed = useRef(false); + useEffect(() => { + const configAllowedChannels = formData?.config?.allowedChannels || []; + if ( + !isInitialyzed.current && + configAllowedChannels.length > 0 && + !isEqual(configAllowedChannels, validChannels) + ) { + isInitialyzed.current = true; + resetChannelsToValidate(formData.config.allowedChannels); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [formData.config]); + return ( ); }; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.test.tsx index 85f909783f178..3a90116b14ad4 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.test.tsx @@ -6,10 +6,12 @@ */ import React from 'react'; -import { render, screen } from '@testing-library/react'; +import { act, fireEvent, render, screen, waitFor, within } from '@testing-library/react'; import SlackParamsFields from './slack_params'; import type { UseSubActionParams } from '@kbn/triggers-actions-ui-plugin/public/application/hooks/use_sub_action'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public'; +import userEvent from '@testing-library/user-event'; interface Result { isLoading: boolean; @@ -19,23 +21,20 @@ interface Result { const triggersActionsPath = '@kbn/triggers-actions-ui-plugin/public'; -const mockUseSubAction = jest.fn]>( - jest.fn]>(() => ({ - isLoading: false, - response: { - channels: [ - { - id: 'id', - name: 'general', - is_channel: true, - is_archived: false, - is_private: true, - }, - ], +const mockUseValidChanelId = jest.fn().mockImplementation(() => ({ + isLoading: false, + response: { + channel: { + id: 'id', + name: 'general', + is_channel: true, + is_archived: false, + is_private: true, }, - error: null, - })) -); + }, + error: null, +})); +const mockUseSubAction = jest.fn]>(mockUseValidChanelId); const mockToasts = { danger: jest.fn(), warning: jest.fn() }; jest.mock(triggersActionsPath, () => { @@ -51,6 +50,23 @@ jest.mock(triggersActionsPath, () => { }); describe('SlackParamsFields renders', () => { + beforeEach(() => { + mockUseSubAction.mockClear(); + mockUseValidChanelId.mockClear(); + mockUseValidChanelId.mockImplementation(() => ({ + isLoading: false, + response: { + channel: { + id: 'id', + name: 'general', + is_channel: true, + is_archived: false, + is_private: true, + }, + }, + error: null, + })); + }); test('when useDefaultMessage is set to true and the default message changes, the underlying message is replaced with the default message', () => { const editAction = jest.fn(); const { rerender } = render( @@ -89,7 +105,7 @@ describe('SlackParamsFields renders', () => { ); expect(editAction).toHaveBeenCalledWith( 'subActionParams', - { channels: ['general'], text: 'some different default message' }, + { channels: ['general'], channelIds: [], text: 'some different default message' }, 0 ); }); @@ -155,17 +171,169 @@ describe('SlackParamsFields renders', () => { expect(screen.getByTestId('webApiTextArea')).toHaveValue('some text'); }); - test('all params fields is rendered for getChannels call', async () => { + test('Show the Channel label when using the old attribute "channels" in subActionParams', async () => { + const mockEditFunc = jest.fn(); + const WrappedComponent = () => { + return ( + + + + ); + }; + const { getByTestId } = render(); + + expect(screen.findByText('Channel')).toBeTruthy(); + expect(screen.getByTestId('slackApiChannelId')).toBeInTheDocument(); + expect(getByTestId('slackApiChannelId')).toHaveValue('old channel name'); + }); + + test('Show the Channel ID label when using the new attribute "channelIds" in subActionParams', async () => { + const mockEditFunc = jest.fn(); + const WrappedComponent: React.FunctionComponent = () => { + return ( + + + + ); + }; + const { getByTestId } = render(); + + expect(screen.findByText('Channel ID')).toBeTruthy(); + expect(screen.getByTestId('slackApiChannelId')).toBeInTheDocument(); + expect(getByTestId('slackApiChannelId')).toHaveValue('channel-id-xxx'); + }); + + test('Channel id subActionParams should be validated', async () => { + const mockEditFunc = jest.fn(); + mockUseValidChanelId.mockImplementation(() => ({ + isLoading: false, + response: { + channel: { + id: 'new-channel-id', + name: 'new channel id', + is_channel: true, + is_archived: false, + is_private: true, + }, + }, + error: null, + })); + const WrappedComponent = () => { + return ( + + + + ); + }; + const { getByTestId } = render(); + + act(() => { + getByTestId('slackApiChannelId').click(); + userEvent.clear(getByTestId('slackApiChannelId')); + fireEvent.change(getByTestId('slackApiChannelId'), { + target: { value: 'new-channel-id' }, + }); + userEvent.tab(); + }); + + await waitFor(() => { + expect(mockEditFunc).toBeCalledWith( + 'subActionParams', + { channelIds: ['new-channel-id'], channels: undefined, text: 'some text' }, + 0 + ); + expect(mockUseSubAction).toBeCalledWith({ + connectorId: 'connector-id', + disabled: false, + subAction: 'validChannelId', + subActionParams: { + channelId: 'new-channel-id', + }, + }); + }); + }); + + test('Channel id work with combobox when allowedChannels pass in the config attributes', async () => { + const mockEditFunc = jest.fn(); const WrappedComponent = () => { return ( {}} + editAction={mockEditFunc} index={0} defaultMessage="default message" messageVariables={[]} @@ -175,14 +343,43 @@ describe('SlackParamsFields renders', () => { }; const { getByTestId } = render(); - getByTestId('slackChannelsComboBox').click(); - getByTestId('comboBoxSearchInput').focus(); + expect(screen.findByText('Channel ID')).toBeTruthy(); + expect(getByTestId('slackChannelsComboBox')).toBeInTheDocument(); + expect(getByTestId('slackChannelsComboBox').textContent).toBe('channel-id-1 - channel 1'); + + act(() => { + const combobox = getByTestId('slackChannelsComboBox'); + const inputCombobox = within(combobox).getByTestId('comboBoxSearchInput'); + inputCombobox.click(); + }); + + await waitFor(() => { + // const popOverElement = within(baseElement).getByTestId('slackChannelsComboBox-optionsList'); + expect(screen.getByTestId('channel-id-1')).toBeInTheDocument(); + expect(screen.getByTestId('channel-id-2')).toBeInTheDocument(); + expect(screen.getByTestId('channel-id-3')).toBeInTheDocument(); + }); - const options = getByTestId( - 'comboBoxOptionsList slackChannelsComboBox-optionsList' - ).querySelectorAll('.euiComboBoxOption__content'); - expect(options).toHaveLength(1); - expect(options[0].textContent).toBe('general'); + act(() => { + screen.getByTestId('channel-id-3').click(); + }); + + await waitFor(() => { + expect( + within(getByTestId('slackChannelsComboBox')).getByText('channel-id-3 - channel 3') + ).toBeInTheDocument(); + expect(mockEditFunc).toBeCalledWith( + 'subActionParams', + { channelIds: ['channel-id-3'], channels: undefined, text: 'some text' }, + 0 + ); + expect(mockUseSubAction).toBeCalledWith({ + connectorId: 'connector-id', + disabled: false, + subAction: 'validChannelId', + subActionParams: { channelId: '' }, + }); + }); }); test('show error message when no channel is selected', async () => { diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.tsx index 68172f50d51de..61d61a041dead 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_params.tsx @@ -9,9 +9,21 @@ import React, { useState, useEffect, useMemo, useCallback } from 'react'; import type { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; import { i18n } from '@kbn/i18n'; import { TextAreaWithMessageVariables } from '@kbn/triggers-actions-ui-plugin/public'; -import { EuiSpacer, EuiFormRow, EuiComboBox, EuiComboBoxOptionOption } from '@elastic/eui'; +import { + EuiSpacer, + EuiFormRow, + EuiComboBox, + EuiComboBoxOptionOption, + EuiFieldText, +} from '@elastic/eui'; import { useSubAction, useKibana } from '@kbn/triggers-actions-ui-plugin/public'; -import type { GetChannelsResponse, PostMessageParams } from '../../../common/slack_api/types'; +import { UserConfiguredActionConnector } from '@kbn/triggers-actions-ui-plugin/public/types'; +import type { + PostMessageParams, + SlackApiConfig, + ValidChannelIdSubActionParams, + ValidChannelResponse, +} from '../../../common/slack_api/types'; const SlackParamsFields: React.FunctionComponent> = ({ actionConnector, @@ -23,17 +35,112 @@ const SlackParamsFields: React.FunctionComponent { + const [connectorId, setConnectorId] = useState(); const { subAction, subActionParams } = actionParams; - const { channels = [], text } = subActionParams ?? {}; + const { channels = [], text, channelIds = [] } = subActionParams ?? {}; + const [tempChannelId, setTempChannelId] = useState( + channels.length > 0 + ? channels[0] + : channelIds.length > 0 && channelIds[0].length > 0 + ? channelIds[0] + : '' + ); + const [validChannelId, setValidChannelId] = useState(''); const { toasts } = useKibana().notifications; + const allowedChannelsConfig = + (actionConnector as UserConfiguredActionConnector)?.config + ?.allowedChannels ?? []; + const [selectedChannels, setSelectedChannels] = useState( + (channelIds ?? []).map((c) => { + const allowedChannelSelected = allowedChannelsConfig?.find((ac) => ac.id === c); + return { + value: c, + label: allowedChannelSelected + ? `${allowedChannelSelected.id} - ${allowedChannelSelected.name}` + : c, + }; + }) + ); + const [channelValidError, setChannelValidError] = useState([]); + const { + response: { channel: channelValidInfo } = {}, + isLoading: isValidatingChannel, + error: channelValidErrorResp, + } = useSubAction({ + connectorId: actionConnector?.id, + subAction: 'validChannelId', + subActionParams: { + channelId: validChannelId, + }, + disabled: validChannelId.length === 0 && allowedChannelsConfig.length === 0, + }); useEffect(() => { if (useDefaultMessage || !text) { - editAction('subActionParams', { channels, text: defaultMessage }, index); + editAction('subActionParams', { channels, channelIds, text: defaultMessage }, index); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [defaultMessage, useDefaultMessage]); + useEffect(() => { + if ( + !isValidatingChannel && + !channelValidErrorResp && + channelValidInfo && + validChannelId === channelValidInfo.id + ) { + editAction( + 'subActionParams', + { channels: undefined, channelIds: [channelValidInfo.id], text }, + index + ); + setValidChannelId(''); + setChannelValidError([]); + } + }, [ + channelValidInfo, + validChannelId, + channelValidErrorResp, + isValidatingChannel, + editAction, + text, + index, + ]); + + useEffect(() => { + if (channelValidErrorResp && validChannelId.length > 0) { + editAction('subActionParams', { channels: undefined, channelIds: [], text }, index); + const errorMessage = i18n.translate( + 'xpack.stackConnectors.slack.params.componentError.validChannelsRequestFailed', + { + defaultMessage: '{validChannelId} is not a valid Slack channel', + values: { + validChannelId, + }, + } + ); + setChannelValidError([errorMessage]); + setValidChannelId(''); + toasts.danger({ + title: errorMessage, + body: channelValidErrorResp.message, + }); + } + }, [toasts, channelValidErrorResp, validChannelId, editAction, text, index]); + + useEffect(() => { + // Reset channel id input when we changes connector + if (connectorId && connectorId !== actionConnector?.id) { + editAction('subActionParams', { channels: undefined, channelIds: [], text }, index); + setTempChannelId(''); + setValidChannelId(''); + setChannelValidError([]); + setSelectedChannels([]); + } + setConnectorId(actionConnector?.id ?? ''); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionConnector?.id]); + if (!subAction) { editAction('subAction', 'postMessage', index); } @@ -42,82 +149,130 @@ const SlackParamsFields: React.FunctionComponent({ - connectorId: actionConnector?.id, - subAction: 'getChannels', - }); - - useEffect(() => { - if (channelsError) { - toasts.danger({ - title: i18n.translate( - 'xpack.stackConnectors.slack.params.componentError.getChannelsRequestFailed', - { - defaultMessage: 'Failed to retrieve Slack channels list', - } - ), - body: channelsError.message, - }); + const typeChannelInput = useMemo(() => { + if (channels.length > 0 && channelIds.length === 0) { + return 'channel-name'; + } else if ( + ( + (actionConnector as UserConfiguredActionConnector)?.config + ?.allowedChannels ?? [] + ).length > 0 + ) { + return 'channel-allowed-ids'; } - }, [toasts, channelsError]); - - const [selectedChannels, setSelectedChannels] = useState( - (channels ?? []).map((c) => ({ label: c })) - ); + return 'channel-id'; + }, [actionConnector, channelIds.length, channels.length]); - const slackChannels = useMemo( - () => - channelsInfo - ?.filter((slackChannel) => slackChannel.is_channel) - .map((slackChannel) => ({ label: slackChannel.name })) ?? [], - [channelsInfo] - ); + const slackChannelsOptions = useMemo(() => { + return ( + (actionConnector as UserConfiguredActionConnector)?.config + ?.allowedChannels ?? [] + ).map((ac) => ({ + label: `${ac.id} - ${ac.name}`, + value: ac.id, + 'data-test-subj': ac.id, + })); + }, [actionConnector]); - const onChange = useCallback( + const onChangeComboBox = useCallback( (newOptions: EuiComboBoxOptionOption[]) => { - const newSelectedChannels = newOptions.map((option) => option.label); - + const newSelectedChannels = newOptions.map((option) => option.value!.toString()); setSelectedChannels(newOptions); - editAction('subActionParams', { channels: newSelectedChannels, text }, index); + editAction( + 'subActionParams', + { channels: undefined, channelIds: newSelectedChannels, text }, + index + ); }, [editAction, index, text] ); + const onBlurChannelIds = useCallback(() => { + if (tempChannelId === '') { + editAction('subActionParams', { channels: undefined, channelIds: [], text }, index); + } + setValidChannelId(tempChannelId.trim()); + }, [editAction, index, tempChannelId, text]); + + const onChangeTextField = useCallback( + (evt) => { + editAction('subActionParams', { channels: undefined, channelIds: [], text }, index); + setTempChannelId(evt.target.value); + }, + [editAction, index, text] + ); + + const channelInput = useMemo(() => { + if (typeChannelInput === 'channel-name' || typeChannelInput === 'channel-id') { + return ( + 0} + fullWidth={true} + /> + ); + } + return ( + + ); + }, [ + channelValidError.length, + isValidatingChannel, + onBlurChannelIds, + onChangeComboBox, + onChangeTextField, + selectedChannels, + slackChannelsOptions, + tempChannelId, + typeChannelInput, + ]); return ( <> 0 && channels.length === 0} + error={channelValidError.length > 0 ? channelValidError : errors.channels} + isInvalid={errors.channels?.length > 0 || channelValidError.length > 0} + helpText={ + channelIds.length > 0 && channelValidInfo + ? `${channelValidInfo.id} - ${channelValidInfo.name}` + : '' + } > - + {channelInput} - editAction('subActionParams', { channels, text: value }, index) + editAction('subActionParams', { channels, channelIds, text: value }, index) } messageVariables={messageVariables} paramsProperty="webApi" diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/translations.ts index 2d8d6507b8715..57fedf03d9699 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/translations.ts @@ -16,7 +16,7 @@ export const MESSAGE_REQUIRED = i18n.translate( export const CHANNEL_REQUIRED = i18n.translate( 'xpack.stackConnectors.components.slack_api.error.requiredSlackChannel', { - defaultMessage: 'Channel is required.', + defaultMessage: 'Channel ID is required.', } ); export const TOKEN_LABEL = i18n.translate( @@ -43,7 +43,7 @@ export const ACTION_TYPE_TITLE = i18n.translate( export const ALLOWED_CHANNELS = i18n.translate( 'xpack.stackConnectors.components.slack_api.allowedChannelsLabel', { - defaultMessage: 'Channels', + defaultMessage: 'Channel IDs', } ); export const SUCCESS_FETCH_CHANNELS = i18n.translate( @@ -53,9 +53,19 @@ export const SUCCESS_FETCH_CHANNELS = i18n.translate( } ); -export const ERROR_FETCH_CHANNELS = i18n.translate( - 'xpack.stackConnectors.components.slack_api.errorFetchChannelsText', +export const ERROR_VALID_CHANNELS = i18n.translate( + 'xpack.stackConnectors.components.slack_api.errorValidChannelsText', { - defaultMessage: 'Cannot fetch channels, please check the validity of your token', + defaultMessage: + 'Cannot valid channels, please check the validity of your token or your channel', } ); + +export const ERROR_INVALID_CHANNELS = (invalidChannels: string[]) => + i18n.translate('xpack.stackConnectors.components.slack_api.errorInvalidChannelsText', { + defaultMessage: + 'Cannot validate channel ID "{channels}", please check the validity of your token and/or the channel ID', + values: { + channels: invalidChannels.join(', '), + }, + }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_fetch_channels.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_fetch_channels.tsx deleted file mode 100644 index fa4391c088668..0000000000000 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_fetch_channels.tsx +++ /dev/null @@ -1,75 +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. - */ - -/* - * Copyright 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 { useMemo } from 'react'; -import { useQuery } from '@tanstack/react-query'; -import { useKibana } from '@kbn/triggers-actions-ui-plugin/public'; -import { HttpSetup } from '@kbn/core/public'; -import { ChannelsResponse, GetChannelsResponse } from '../../../common/slack_api/types'; -import { INTERNAL_BASE_STACK_CONNECTORS_API_PATH } from '../../../common'; -import * as i18n from './translations'; - -interface UseFetchChannelsProps { - authToken: string; -} - -const fetchChannels = async ( - http: HttpSetup, - newAuthToken: string -): Promise => { - return http.post( - `${INTERNAL_BASE_STACK_CONNECTORS_API_PATH}/_slack_api/channels`, - { - body: JSON.stringify({ - authToken: newAuthToken, - }), - } - ); -}; - -export function useFetchChannels(props: UseFetchChannelsProps) { - const { authToken } = props; - - const { - http, - notifications: { toasts }, - } = useKibana().services; - - const queryFn = () => { - return fetchChannels(http, authToken); - }; - - const onErrorFn = () => { - toasts.addDanger(i18n.ERROR_FETCH_CHANNELS); - }; - - const { data, isLoading, isFetching } = useQuery({ - queryKey: ['fetchChannels', authToken], - queryFn, - onError: onErrorFn, - enabled: authToken.length > 0, - refetchOnWindowFocus: false, - }); - - const channels = useMemo(() => { - return (data?.channels ?? []).map((channel: ChannelsResponse) => ({ - label: channel.name, - })); - }, [data]); - - return { - channels, - isLoading: isLoading || isFetching, - }; -} diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_valid_channels.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_valid_channels.tsx new file mode 100644 index 0000000000000..17745ec4e4d0c --- /dev/null +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/use_valid_channels.tsx @@ -0,0 +1,101 @@ +/* + * Copyright 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. + */ + +/* + * Copyright 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 { useCallback, useEffect, useState } from 'react'; +import { useQuery } from '@tanstack/react-query'; +import { useKibana } from '@kbn/triggers-actions-ui-plugin/public'; +import { HttpSetup } from '@kbn/core/public'; +import { ValidChannelRouteResponse } from '../../../common/slack_api/types'; +import { INTERNAL_BASE_STACK_CONNECTORS_API_PATH } from '../../../common'; +import * as i18n from './translations'; + +interface UseValidChannelsProps { + authToken: string; + channelId: string; +} + +const validChannelIds = async ( + http: HttpSetup, + newAuthToken: string, + channelId: string +): Promise => { + return http.post( + `${INTERNAL_BASE_STACK_CONNECTORS_API_PATH}/_slack_api/channels/_valid`, + { + body: JSON.stringify({ + authToken: newAuthToken, + channelIds: [channelId], + }), + } + ); +}; + +export function useValidChannels(props: UseValidChannelsProps) { + const { authToken, channelId } = props; + const [channels, setChannels] = useState>([]); + const { + http, + notifications: { toasts }, + } = useKibana().services; + + const channelIdToValidate = channels.some((c: { id: string }) => c.id === channelId) + ? '' + : channelId; + const queryFn = () => { + return validChannelIds(http, authToken, channelIdToValidate); + }; + + const onErrorFn = () => { + toasts.addDanger(i18n.ERROR_VALID_CHANNELS); + }; + + const { data, isLoading, isFetching } = useQuery({ + queryKey: ['validChannels', authToken, channelIdToValidate], + queryFn, + onError: onErrorFn, + enabled: (authToken || '').length > 0 && (channelIdToValidate || '').length > 0, + refetchOnWindowFocus: false, + }); + + useEffect(() => { + if ((data?.invalidChannels ?? []).length > 0) { + toasts.addDanger(i18n.ERROR_INVALID_CHANNELS(data?.invalidChannels ?? [])); + } + if ((data?.validChannels ?? []).length > 0) { + setChannels((prevChannels) => { + return prevChannels.concat(data?.validChannels ?? []); + }); + } + }, [data, toasts]); + + const resetChannelsToValidate = useCallback( + (channelsToReset: Array<{ id: string; name: string }>) => { + if (channelsToReset.length === 0) { + setChannels([]); + } else { + setChannels((prevChannels) => { + if (prevChannels.length === 0) return channelsToReset; + return prevChannels.filter((c) => channelsToReset.some((cTr) => cTr.id === c.id)); + }); + } + }, + [] + ); + + return { + channels, + resetChannelsToValidate, + isLoading: isLoading && isFetching, + }; +} diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.test.ts index 2ae4a998b261a..cda2c5b96cd87 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.test.ts @@ -18,25 +18,16 @@ const createMock = (): jest.Mocked => { type: 'message', }, })), - getChannels: jest.fn().mockImplementation(() => [ + validChannelId: jest.fn().mockImplementation(() => [ { ok: true, - channels: [ - { - id: 'channel_id_1', - name: 'general', - is_channel: true, - is_archived: false, - is_private: true, - }, - { - id: 'channel_id_2', - name: 'privat', - is_channel: true, - is_archived: false, - is_private: false, - }, - ], + channels: { + id: 'channel_id_1', + name: 'general', + is_channel: true, + is_archived: false, + is_private: true, + }, }, ]), }; @@ -55,35 +46,28 @@ describe('api', () => { externalService = slackServiceMock.create(); }); - test('getChannels', async () => { - const res = await api.getChannels({ + test('validChannelId', async () => { + const res = await api.validChannelId({ externalService, + params: { channelId: 'channel_id_1' }, }); expect(res).toEqual([ { - channels: [ - { - id: 'channel_id_1', - is_archived: false, - is_channel: true, - is_private: true, - name: 'general', - }, - { - id: 'channel_id_2', - is_archived: false, - is_channel: true, - is_private: false, - name: 'privat', - }, - ], + channels: { + id: 'channel_id_1', + is_archived: false, + is_channel: true, + is_private: true, + name: 'general', + }, + ok: true, }, ]); }); - test('postMessage', async () => { + test('postMessage with channels params', async () => { const res = await api.postMessage({ externalService, params: { channels: ['general'], text: 'a message' }, @@ -98,4 +82,20 @@ describe('api', () => { ok: true, }); }); + + test('postMessage with channelIds params', async () => { + const res = await api.postMessage({ + externalService, + params: { channelIds: ['general'], text: 'a message' }, + }); + + expect(res).toEqual({ + channel: 'general', + message: { + text: 'a message', + type: 'message', + }, + ok: true, + }); + }); }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.ts index b0445b7c26e41..4c66f10761c85 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/api.ts @@ -5,20 +5,29 @@ * 2.0. */ -import type { PostMessageSubActionParams, SlackApiService } from '../../../common/slack_api/types'; +import type { + PostMessageSubActionParams, + SlackApiService, + ValidChannelIdSubActionParams, +} from '../../../common/slack_api/types'; -const getChannelsHandler = async ({ externalService }: { externalService: SlackApiService }) => - await externalService.getChannels(); +const validChannelIdHandler = async ({ + externalService, + params: { channelId }, +}: { + externalService: SlackApiService; + params: ValidChannelIdSubActionParams; +}) => await externalService.validChannelId(channelId ?? ''); const postMessageHandler = async ({ externalService, - params: { channels, text }, + params: { channelIds, channels, text }, }: { externalService: SlackApiService; params: PostMessageSubActionParams; -}) => await externalService.postMessage({ channels, text }); +}) => await externalService.postMessage({ channelIds, channels, text }); export const api = { - getChannels: getChannelsHandler, + validChannelId: validChannelIdHandler, postMessage: postMessageHandler, }; diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.test.ts index c4922020cdce7..62e7cf771d3cb 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.test.ts @@ -79,7 +79,7 @@ describe('validate params', () => { ); }); - test('should validate and pass when params are valid for post message', () => { + test('should validate and pass when channels is used as a valid params for post message', () => { expect( validateParams( connectorType, @@ -92,11 +92,32 @@ describe('validate params', () => { }); }); - test('should validate and pass when params are valid for get channels', () => { + test('should validate and pass when channelIds is used as a valid params for post message', () => { expect( - validateParams(connectorType, { subAction: 'getChannels' }, { configurationUtilities }) + validateParams( + connectorType, + { + subAction: 'postMessage', + subActionParams: { channelIds: ['LKJHGF345'], text: 'a text' }, + }, + { configurationUtilities } + ) + ).toEqual({ + subAction: 'postMessage', + subActionParams: { channelIds: ['LKJHGF345'], text: 'a text' }, + }); + }); + + test('should validate and pass when params are valid for validChannelIds', () => { + expect( + validateParams( + connectorType, + { subAction: 'validChannelId', subActionParams: { channelId: 'KJHGFD867' } }, + { configurationUtilities } + ) ).toEqual({ - subAction: 'getChannels', + subAction: 'validChannelId', + subActionParams: { channelId: 'KJHGFD867' }, }); }); }); @@ -179,7 +200,7 @@ describe('execute', () => { ); }); - test('should fail if subAction is not postMessage/getChannels', async () => { + test('should fail if subAction is not postMessage/validChannelId', async () => { requestMock.mockImplementation(() => ({ data: { ok: true, @@ -195,7 +216,8 @@ describe('execute', () => { config: {}, secrets: { token: 'some token' }, params: { - subAction: 'getMessage' as 'getChannels', + subAction: 'getMessage' as 'validChannelId', + subActionParams: {}, }, configurationUtilities, logger: mockedLogger, @@ -264,19 +286,17 @@ describe('execute', () => { }); }); - test('should execute with success for get channels', async () => { + test('should execute with success for validChannelId', async () => { requestMock.mockImplementation(() => ({ data: { ok: true, - channels: [ - { - id: 'id', - name: 'general', - is_channel: true, - is_archived: false, - is_private: true, - }, - ], + channel: { + id: 'ZXCVBNM567', + name: 'general', + is_channel: true, + is_archived: false, + is_private: true, + }, }, })); const response = await connectorType.executor({ @@ -285,7 +305,10 @@ describe('execute', () => { config: {}, secrets: { token: 'some token' }, params: { - subAction: 'getChannels', + subAction: 'validChannelId', + subActionParams: { + channelId: 'ZXCVBNM567', + }, }, configurationUtilities, logger: mockedLogger, @@ -296,21 +319,19 @@ describe('execute', () => { configurationUtilities, logger: mockedLogger, method: 'get', - url: 'conversations.list?exclude_archived=true&types=public_channel,private_channel&limit=1000', + url: 'conversations.info?channel=ZXCVBNM567', }); expect(response).toEqual({ actionId: SLACK_API_CONNECTOR_ID, data: { - channels: [ - { - id: 'id', - is_archived: false, - is_channel: true, - is_private: true, - name: 'general', - }, - ], + channel: { + id: 'ZXCVBNM567', + is_archived: false, + is_channel: true, + is_private: true, + name: 'general', + }, ok: true, }, status: 'ok', diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.ts index ffb952f457956..7a61966958415 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/index.ts @@ -29,7 +29,7 @@ import { SLACK_CONNECTOR_NAME } from './translations'; import { api } from './api'; import { createExternalService } from './service'; -const supportedSubActions = ['getChannels', 'postMessage']; +const supportedSubActions = ['getAllowedChannels', 'validChannelId', 'postMessage']; export const getConnectorType = (): SlackApiConnectorType => { return { @@ -111,9 +111,10 @@ const slackApiExecutor = async ({ configurationUtilities ); - if (subAction === 'getChannels') { - return await api.getChannels({ + if (subAction === 'validChannelId') { + return await api.validChannelId({ externalService, + params: params.subActionParams, }); } diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.test.ts index 85df189c72d29..068bd8d5d923e 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.test.ts @@ -29,27 +29,18 @@ axios.create = jest.fn(() => axios); const requestMock = request as jest.Mock; const configurationUtilities = actionsConfigMock.create(); -const channels = [ - { - id: 'channel_id_1', - name: 'general', - is_channel: true, - is_archived: false, - is_private: true, - }, - { - id: 'channel_id_2', - name: 'privat', - is_channel: true, - is_archived: false, - is_private: false, - }, -]; - -const getChannelsResponse = createAxiosResponse({ +const channel = { + id: 'channel_id_1', + name: 'general', + is_channel: true, + is_archived: false, + is_private: true, +}; + +const getValidChannelIdResponse = createAxiosResponse({ data: { ok: true, - channels, + channel, }, }); @@ -105,30 +96,30 @@ describe('Slack API service', () => { }); }); - describe('getChannels', () => { + describe('validChannelId', () => { test('should get slack channels', async () => { - requestMock.mockImplementation(() => getChannelsResponse); - const res = await service.getChannels(); + requestMock.mockImplementation(() => getValidChannelIdResponse); + const res = await service.validChannelId('channel_id_1'); expect(res).toEqual({ actionId: SLACK_API_CONNECTOR_ID, data: { ok: true, - channels, + channel, }, status: 'ok', }); }); test('should call request with correct arguments', async () => { - requestMock.mockImplementation(() => getChannelsResponse); + requestMock.mockImplementation(() => getValidChannelIdResponse); - await service.getChannels(); + await service.validChannelId('channel_id_1'); expect(requestMock).toHaveBeenCalledWith({ axios, logger, configurationUtilities, method: 'get', - url: 'conversations.list?exclude_archived=true&types=public_channel,private_channel&limit=1000', + url: 'conversations.info?channel=channel_id_1', }); }); @@ -137,7 +128,7 @@ describe('Slack API service', () => { throw new Error('request fail'); }); - expect(await service.getChannels()).toEqual({ + expect(await service.validChannelId('channel_id_1')).toEqual({ actionId: SLACK_API_CONNECTOR_ID, message: 'error posting slack message', serviceMessage: 'request fail', @@ -147,7 +138,7 @@ describe('Slack API service', () => { }); describe('postMessage', () => { - test('should call request with correct arguments', async () => { + test('should call request with only channels argument', async () => { requestMock.mockImplementation(() => postMessageResponse); await service.postMessage({ channels: ['general', 'privat'], text: 'a message' }); @@ -163,6 +154,42 @@ describe('Slack API service', () => { }); }); + test('should call request with only channelIds argument', async () => { + requestMock.mockImplementation(() => postMessageResponse); + + await service.postMessage({ + channels: ['general', 'privat'], + channelIds: ['QWEERTYU987', 'POIUYT123'], + text: 'a message', + }); + + expect(requestMock).toHaveBeenCalledTimes(1); + expect(requestMock).toHaveBeenNthCalledWith(1, { + axios, + logger, + configurationUtilities, + method: 'post', + url: 'chat.postMessage', + data: { channel: 'QWEERTYU987', text: 'a message' }, + }); + }); + + test('should call request with channels && channelIds argument', async () => { + requestMock.mockImplementation(() => postMessageResponse); + + await service.postMessage({ channelIds: ['QWEERTYU987', 'POIUYT123'], text: 'a message' }); + + expect(requestMock).toHaveBeenCalledTimes(1); + expect(requestMock).toHaveBeenNthCalledWith(1, { + axios, + logger, + configurationUtilities, + method: 'post', + url: 'chat.postMessage', + data: { channel: 'QWEERTYU987', text: 'a message' }, + }); + }); + test('should throw an error if request to slack fail', async () => { requestMock.mockImplementation(() => { throw new Error('request fail'); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.ts b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.ts index ae85127eb457a..f4ecb95571257 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/slack_api/service.ts @@ -5,7 +5,7 @@ * 2.0. */ -import axios, { AxiosHeaders, AxiosResponse } from 'axios'; +import axios, { AxiosResponse } from 'axios'; import { Logger } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { ActionsConfigurationUtilities } from '@kbn/actions-plugin/server/actions_config'; @@ -18,9 +18,8 @@ import type { PostMessageSubActionParams, SlackApiService, PostMessageResponse, - GetChannelsResponse, SlackAPiResponse, - ChannelsResponse, + ValidChannelResponse, } from '../../../common/slack_api/types'; import { retryResultSeconds, @@ -32,9 +31,6 @@ import { import { SLACK_API_CONNECTOR_ID, SLACK_URL } from '../../../common/slack_api/constants'; import { getRetryAfterIntervalFromHeaders } from '../lib/http_response_retry_header'; -const RE_TRY = 5; -const LIMIT = 1000; - const buildSlackExecutorErrorResponse = ({ slackApiError, logger, @@ -106,11 +102,20 @@ const buildSlackExecutorSuccessResponse = ({ }; export const createExternalService = ( - { secrets }: { secrets: { token: string } }, + { + config, + secrets, + }: { + config?: { allowedChannels?: Array<{ id: string; name: string }> }; + secrets: { token: string }; + }, logger: Logger, configurationUtilities: ActionsConfigurationUtilities ): SlackApiService => { const { token } = secrets; + const { allowedChannels } = config || { allowedChannels: [] }; + const allowedChannelIds = allowedChannels?.map((ac) => ac.id); + if (!token) { throw Error(`[Action][${SLACK_CONNECTOR_NAME}]: Wrong configuration.`); } @@ -123,57 +128,30 @@ export const createExternalService = ( }, }); - const getChannels = async (): Promise< - ConnectorTypeExecutorResult - > => { + const validChannelId = async ( + channelId: string + ): Promise> => { try { - const fetchChannels = (cursor: string = ''): Promise> => { - return request({ + const validChannel = (): Promise> => { + return request({ axios: axiosInstance, configurationUtilities, logger, method: 'get', - url: `conversations.list?exclude_archived=true&types=public_channel,private_channel&limit=${LIMIT}${ - cursor.length > 0 ? `&cursor=${cursor}` : '' - }`, + url: `conversations.info?channel=${channelId}`, }); }; - - let numberOfFetch = 0; - let cursor = ''; - const channels: ChannelsResponse[] = []; - let result: AxiosResponse = { - data: { ok: false, channels }, - status: 0, - statusText: '', - headers: {}, - config: { - headers: new AxiosHeaders({}), - }, - }; - - while (numberOfFetch < RE_TRY) { - result = await fetchChannels(cursor); - if (result.data.ok && (result.data?.channels ?? []).length > 0) { - channels.push(...(result.data?.channels ?? [])); - } - if ( - result.data.ok && - result.data.response_metadata && - result.data.response_metadata.next_cursor && - result.data.response_metadata.next_cursor.length > 0 - ) { - numberOfFetch += 1; - cursor = result.data.response_metadata.next_cursor; - } else { - break; - } + if (channelId.length === 0) { + return buildSlackExecutorErrorResponse({ + slackApiError: new Error('The channel id is empty'), + logger, + }); } - result.data.channels = channels; - const responseData = result.data; - return buildSlackExecutorSuccessResponse({ - slackApiResponseData: responseData, + const result = await validChannel(); + + return buildSlackExecutorSuccessResponse({ + slackApiResponseData: result.data, }); } catch (error) { return buildSlackExecutorErrorResponse({ slackApiError: error, logger }); @@ -182,15 +160,47 @@ export const createExternalService = ( const postMessage = async ({ channels, + channelIds = [], text, }: PostMessageSubActionParams): Promise> => { try { + if ( + channelIds.length > 0 && + allowedChannelIds && + allowedChannelIds.length > 0 && + !channelIds.every((cId) => allowedChannelIds.includes(cId)) + ) { + return buildSlackExecutorErrorResponse({ + slackApiError: { + message: `One of channel ids "${channelIds.join()}" is not included in the allowed channels list "${allowedChannelIds.join()}"`, + }, + logger, + }); + } + + // For now, we only allow one channel but we wanted + // to have a array in case we need to allow multiple channels + // in one actions + let channelToUse = channelIds.length > 0 ? channelIds[0] : ''; + if (channelToUse.length === 0 && channels && channels.length > 0 && channels[0].length > 0) { + channelToUse = channels[0]; + } + + if (channelToUse.length === 0) { + return buildSlackExecutorErrorResponse({ + slackApiError: { + message: `The channel is empty"`, + }, + logger, + }); + } + const result: AxiosResponse = await request({ axios: axiosInstance, method: 'post', url: 'chat.postMessage', logger, - data: { channel: channels[0], text }, + data: { channel: channelToUse, text }, configurationUtilities, }); @@ -201,7 +211,7 @@ export const createExternalService = ( }; return { - getChannels, + validChannelId, postMessage, }; }; diff --git a/x-pack/plugins/stack_connectors/server/plugin.ts b/x-pack/plugins/stack_connectors/server/plugin.ts index ce1795b4eb7fb..8e74b3c88395c 100644 --- a/x-pack/plugins/stack_connectors/server/plugin.ts +++ b/x-pack/plugins/stack_connectors/server/plugin.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { PluginInitializerContext, Plugin, CoreSetup } from '@kbn/core/server'; +import { PluginInitializerContext, Plugin, CoreSetup, Logger } from '@kbn/core/server'; import { PluginSetupContract as ActionsPluginSetupContract } from '@kbn/actions-plugin/server'; import { registerConnectorTypes } from './connector_types'; -import { getWellKnownEmailServiceRoute } from './routes'; +import { validSlackApiChannelsRoute, getWellKnownEmailServiceRoute } from './routes'; export interface ConnectorsPluginsSetup { actions: ActionsPluginSetupContract; } @@ -18,13 +18,18 @@ export interface ConnectorsPluginsStart { } export class StackConnectorsPlugin implements Plugin { - constructor(context: PluginInitializerContext) {} + private readonly logger: Logger; + + constructor(context: PluginInitializerContext) { + this.logger = context.logger.get(); + } public setup(core: CoreSetup, plugins: ConnectorsPluginsSetup) { const router = core.http.createRouter(); const { actions } = plugins; getWellKnownEmailServiceRoute(router); + validSlackApiChannelsRoute(router, actions.getActionsConfigurationUtilities(), this.logger); registerConnectorTypes({ actions, diff --git a/x-pack/plugins/stack_connectors/server/routes/index.ts b/x-pack/plugins/stack_connectors/server/routes/index.ts index 2766b99679845..cd9857b2168ed 100644 --- a/x-pack/plugins/stack_connectors/server/routes/index.ts +++ b/x-pack/plugins/stack_connectors/server/routes/index.ts @@ -6,3 +6,4 @@ */ export { getWellKnownEmailServiceRoute } from './get_well_known_email_service'; +export { validSlackApiChannelsRoute } from './valid_slack_api_channels'; diff --git a/x-pack/plugins/stack_connectors/server/routes/valid_slack_api_channels.ts b/x-pack/plugins/stack_connectors/server/routes/valid_slack_api_channels.ts new file mode 100644 index 0000000000000..434f989f56e92 --- /dev/null +++ b/x-pack/plugins/stack_connectors/server/routes/valid_slack_api_channels.ts @@ -0,0 +1,95 @@ +/* + * Copyright 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 { + IRouter, + RequestHandlerContext, + KibanaRequest, + IKibanaResponse, + KibanaResponseFactory, + Logger, +} from '@kbn/core/server'; +import axios, { AxiosResponse } from 'axios'; +import { request } from '@kbn/actions-plugin/server/lib/axios_utils'; +import { ActionsConfigurationUtilities } from '@kbn/actions-plugin/server/actions_config'; +import { INTERNAL_BASE_STACK_CONNECTORS_API_PATH } from '../../common'; +import { SLACK_URL } from '../../common/slack_api/constants'; +import { ValidChannelResponse } from '../../common/slack_api/types'; + +const bodySchema = schema.object({ + authToken: schema.string(), + channelIds: schema.arrayOf(schema.string(), { minSize: 1, maxSize: 25 }), +}); + +export const validSlackApiChannelsRoute = ( + router: IRouter, + configurationUtilities: ActionsConfigurationUtilities, + logger: Logger +) => { + router.post( + { + path: `${INTERNAL_BASE_STACK_CONNECTORS_API_PATH}/_slack_api/channels/_valid`, + validate: { + body: bodySchema, + }, + }, + handler + ); + + async function handler( + ctx: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ): Promise { + const { authToken, channelIds } = req.body; + + const axiosInstance = axios.create({ + baseURL: SLACK_URL, + headers: { + Authorization: `Bearer ${authToken}`, + 'Content-type': 'application/json; charset=UTF-8', + }, + }); + + const validChannelId = ( + channelId: string = '' + ): Promise> => { + return request({ + axios: axiosInstance, + configurationUtilities, + logger, + method: 'get', + url: `conversations.info?channel=${channelId}`, + }); + }; + + const promiseValidChannels = []; + for (const channelId of channelIds) { + promiseValidChannels.push(validChannelId(channelId)); + } + const validChannels: Array<{ id: string; name: string }> = []; + const invalidChannels: string[] = []; + const resultValidChannels = await Promise.all(promiseValidChannels); + + resultValidChannels.forEach((result, resultIdx) => { + if (result.data.ok && result.data?.channel) { + const { id, name } = result.data?.channel; + validChannels.push({ id, name }); + } else if (result.data.error && channelIds[resultIdx]) { + invalidChannels.push(channelIds[resultIdx]); + } + }); + + return res.ok({ + body: { + validChannels, + invalidChannels, + }, + }); + } +}; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 19c63121a62b8..4d5c96f4d3196 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -35823,7 +35823,6 @@ "xpack.stackConnectors.components.slack_api.connectorTypeTitle": "Envoyer vers Slack", "xpack.stackConnectors.components.slack_api.error.requiredSlackChannel": "Le canal est requis.", "xpack.stackConnectors.components.slack_api.error.requiredSlackMessageText": "Le message est requis.", - "xpack.stackConnectors.components.slack_api.errorFetchChannelsText": "Impossible de récupérer les canaux, veuillez vérifier la validité de votre token", "xpack.stackConnectors.components.slack_api.selectMessageText": "Envoyer des messages aux canaux Slack.", "xpack.stackConnectors.components.slack_api.successFetchChannelsText": "Récupérer tous les canaux", "xpack.stackConnectors.components.slack_api.tokenTextFieldLabel": "Token d'API", @@ -35994,7 +35993,6 @@ "xpack.stackConnectors.slack.errorPostingErrorMessage": "erreur lors de la publication du message slack", "xpack.stackConnectors.slack.errorPostingRetryLaterErrorMessage": "erreur lors de la publication d'un message slack, réessayer ultérieurement", "xpack.stackConnectors.slack.params.channelsComboBoxLabel": "Canaux", - "xpack.stackConnectors.slack.params.componentError.getChannelsRequestFailed": "Impossible de récupérer la liste des canaux Slack", "xpack.stackConnectors.slack.title": "Slack", "xpack.stackConnectors.slack.unexpectedNullResponseErrorMessage": "réponse nulle inattendue de Slack", "xpack.stackConnectors.slackApi.title": "API Slack", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 89c3b1a590be5..11bf49746b2bc 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -35822,7 +35822,6 @@ "xpack.stackConnectors.components.slack_api.connectorTypeTitle": "Slack に送信", "xpack.stackConnectors.components.slack_api.error.requiredSlackChannel": "チャンネルが必要です。", "xpack.stackConnectors.components.slack_api.error.requiredSlackMessageText": "メッセージが必要です。", - "xpack.stackConnectors.components.slack_api.errorFetchChannelsText": "チャンネルを取得できません。トークンの有効期限を確認してください", "xpack.stackConnectors.components.slack_api.selectMessageText": "メッセージをSlackチャンネルに送信します。", "xpack.stackConnectors.components.slack_api.successFetchChannelsText": "すべてのチャンネルを取得", "xpack.stackConnectors.components.slack_api.tokenTextFieldLabel": "APIトークン", @@ -35993,7 +35992,6 @@ "xpack.stackConnectors.slack.errorPostingErrorMessage": "slack メッセージの投稿エラー", "xpack.stackConnectors.slack.errorPostingRetryLaterErrorMessage": "slack メッセージの投稿エラー、後ほど再試行", "xpack.stackConnectors.slack.params.channelsComboBoxLabel": "チャンネル", - "xpack.stackConnectors.slack.params.componentError.getChannelsRequestFailed": "Slackチャンネルリストを取得できませんでした", "xpack.stackConnectors.slack.title": "Slack", "xpack.stackConnectors.slack.unexpectedNullResponseErrorMessage": "Slack から予期せぬ null 応答", "xpack.stackConnectors.slackApi.title": "Slack API", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 46482145dcf97..23f68132c7adf 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -35816,7 +35816,6 @@ "xpack.stackConnectors.components.slack_api.connectorTypeTitle": "发送到 Slack", "xpack.stackConnectors.components.slack_api.error.requiredSlackChannel": "“频道”必填。", "xpack.stackConnectors.components.slack_api.error.requiredSlackMessageText": "“消息”必填。", - "xpack.stackConnectors.components.slack_api.errorFetchChannelsText": "无法提取频道,请检查您令牌的有效性", "xpack.stackConnectors.components.slack_api.selectMessageText": "向 Slack 频道发送消息。", "xpack.stackConnectors.components.slack_api.successFetchChannelsText": "提取所有频道", "xpack.stackConnectors.components.slack_api.tokenTextFieldLabel": "API 令牌", @@ -35987,7 +35986,6 @@ "xpack.stackConnectors.slack.errorPostingErrorMessage": "发布 slack 消息时出错", "xpack.stackConnectors.slack.errorPostingRetryLaterErrorMessage": "发布 slack 消息时出错,稍后重试", "xpack.stackConnectors.slack.params.channelsComboBoxLabel": "频道", - "xpack.stackConnectors.slack.params.componentError.getChannelsRequestFailed": "无法检索 Slack 频道列表", "xpack.stackConnectors.slack.title": "Slack", "xpack.stackConnectors.slack.unexpectedNullResponseErrorMessage": "来自 slack 的异常空响应", "xpack.stackConnectors.slackApi.title": "Slack API", diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts index f975bed9f965e..14dbc0db0c241 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts @@ -68,7 +68,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { objectRemover.add(connector.id, 'action', 'actions'); }); - it('should create the web api connector', async () => { + /* FUTURE ENGINEER + /* With this https://github.com/elastic/kibana/pull/167150, we added an allowed list of channel IDs + /* we can not have this test running anymore because this allowed list is required + /* we will have to figure out how to simulate the slack API through functional/API integration testing + */ + it.skip('should create the web api connector', async () => { const connectorName = generateUniqueKey(); await actions.slack.createNewWebAPI({ name: connectorName, @@ -165,7 +170,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { expect(toastTitle).to.eql(`Created rule "${ruleName}"`); }); - it('should save webapi type slack connectors', async () => { + /* FUTURE ENGINEER + /* With this https://github.com/elastic/kibana/pull/167150, we added an allowed list of channel IDs + /* we can not have this test running anymore because this allowed list is required + /* we will have to figure out how to simulate the slack API through functional/API integration testing + */ + it.skip('should save webapi type slack connectors', async () => { await setupRule(); await selectSlackConnectorInRuleAction({ connectorId: webApiAction.id, From 395f75eadc8931cebaa75e85c09f76386343ad1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Tue, 3 Oct 2023 17:50:20 -0400 Subject: [PATCH 031/170] =?UTF-8?q?Revert=20"[Task=20Manager]=20Force=20va?= =?UTF-8?q?lidation=20on=20all=20tasks=20using=20state=20(#16=E2=80=A6=20(?= =?UTF-8?q?#167877)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Revert of https://github.com/elastic/kibana/pull/164574 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Xavier Mouligneau --- .../task_manager/server/task_validator.test.ts | 8 ++++++-- .../task_manager/server/task_validator.ts | 17 ++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/task_manager/server/task_validator.test.ts b/x-pack/plugins/task_manager/server/task_validator.test.ts index 08c18591e468e..52822adf6f49f 100644 --- a/x-pack/plugins/task_manager/server/task_validator.test.ts +++ b/x-pack/plugins/task_manager/server/task_validator.test.ts @@ -64,7 +64,9 @@ describe('TaskValidator', () => { expect(result).toEqual(task); }); - it(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { + // TODO: Remove skip once all task types have defined their state schema. + // https://github.com/elastic/kibana/issues/159347 + it.skip(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { const definitions = new TaskTypeDictionary(mockLogger()); definitions.registerTaskDefinitions({ foo: fooTaskDefinition, @@ -320,7 +322,9 @@ describe('TaskValidator', () => { expect(result).toEqual(task); }); - it(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { + // TODO: Remove skip once all task types have defined their state schema. + // https://github.com/elastic/kibana/issues/159347 + it.skip(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { const definitions = new TaskTypeDictionary(mockLogger()); definitions.registerTaskDefinitions({ foo: fooTaskDefinition, diff --git a/x-pack/plugins/task_manager/server/task_validator.ts b/x-pack/plugins/task_manager/server/task_validator.ts index 900af04cd1207..61d9a903dd5b4 100644 --- a/x-pack/plugins/task_manager/server/task_validator.ts +++ b/x-pack/plugins/task_manager/server/task_validator.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { max, memoize, isEmpty } from 'lodash'; +import { max, memoize } from 'lodash'; import type { Logger } from '@kbn/core/server'; import type { ObjectType } from '@kbn/config-schema'; import { TaskTypeDictionary } from './task_type_dictionary'; @@ -64,13 +64,14 @@ export class TaskValidator { const taskTypeDef = this.definitions.get(task.taskType); const latestStateSchema = this.cachedGetLatestStateSchema(taskTypeDef); - let state = task.state; - - // Skip validating tasks that don't use state - if (!latestStateSchema && isEmpty(state)) { + // TODO: Remove once all task types have defined their state schema. + // https://github.com/elastic/kibana/issues/159347 + // Otherwise, failures on read / write would occur. (don't forget to unskip test) + if (!latestStateSchema) { return task; } + let state = task.state; try { state = this.getValidatedStateSchema( this.migrateTaskState(task.state, task.stateVersion, taskTypeDef, latestStateSchema), @@ -110,8 +111,10 @@ export class TaskValidator { const taskTypeDef = this.definitions.get(task.taskType); const latestStateSchema = this.cachedGetLatestStateSchema(taskTypeDef); - // Skip validating tasks that don't use state - if (!latestStateSchema && isEmpty(task.state)) { + // TODO: Remove once all task types have defined their state schema. + // https://github.com/elastic/kibana/issues/159347 + // Otherwise, failures on read / write would occur. (don't forget to unskip test) + if (!latestStateSchema) { return task; } From 984d5e6daad09a25258d154bb0ea7246d6fc580e Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Wed, 4 Oct 2023 00:19:43 +0200 Subject: [PATCH 032/170] [ML] Use release ELSER version (#167888) ## Summary Updates ELSER model IDs to the release version --- .../src/constants/trained_models.ts | 4 ++-- .../lib/ml/start_ml_model_deployment.test.ts | 2 +- .../server/lib/ml/start_ml_model_download.test.ts | 2 +- .../routes/enterprise_search/indices.test.ts | 6 +++--- .../models/model_management/model_provider.test.ts | 14 +++++++------- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts index 7bf4bbafad90d..84e8564c17719 100644 --- a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts +++ b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts @@ -62,7 +62,7 @@ export const ELASTIC_MODEL_DEFINITIONS: Record = Object defaultMessage: 'Elastic Learned Sparse EncodeR v1 (Tech Preview)', }), }, - '.elser_model_2_SNAPSHOT': { + '.elser_model_2': { modelName: 'elser', version: 2, default: true, @@ -75,7 +75,7 @@ export const ELASTIC_MODEL_DEFINITIONS: Record = Object defaultMessage: 'Elastic Learned Sparse EncodeR v2 (Tech Preview)', }), }, - '.elser_model_2_linux-x86_64_SNAPSHOT': { + '.elser_model_2_linux-x86_64': { modelName: 'elser', version: 2, os: 'Linux', diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.test.ts b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.test.ts index ad516bad20dc0..67a5c75f0f437 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.test.ts @@ -15,7 +15,7 @@ import * as mockGetStatus from './get_ml_model_deployment_status'; import { startMlModelDeployment } from './start_ml_model_deployment'; describe('startMlModelDeployment', () => { - const modelName = '.elser_model_2_SNAPSHOT'; + const modelName = '.elser_model_2'; const mockTrainedModelsProvider = { getTrainedModels: jest.fn(), getTrainedModelsStats: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.test.ts b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.test.ts index 0d3f3add793b0..80318eab0ce77 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.test.ts @@ -15,7 +15,7 @@ import * as mockGetStatus from './get_ml_model_deployment_status'; import { startMlModelDownload } from './start_ml_model_download'; describe('startMlModelDownload', () => { - const knownModelName = '.elser_model_2_SNAPSHOT'; + const knownModelName = '.elser_model_2'; const mockTrainedModelsProvider = { getTrainedModels: jest.fn(), getTrainedModelsStats: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts index da44f155c9774..e0278ff639232 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.test.ts @@ -1078,7 +1078,7 @@ describe('Enterprise Search Managed Indices', () => { router: mockRouter.router, }); }); - const modelName = '.elser_model_2_SNAPSHOT'; + const modelName = '.elser_model_2'; it('fails validation without modelName', () => { const request = { @@ -1142,7 +1142,7 @@ describe('Enterprise Search Managed Indices', () => { router: mockRouter.router, }); }); - const modelName = '.elser_model_2_SNAPSHOT'; + const modelName = '.elser_model_2'; it('fails validation without modelName', () => { const request = { @@ -1205,7 +1205,7 @@ describe('Enterprise Search Managed Indices', () => { router: mockRouter.router, }); }); - const modelName = '.elser_model_2_SNAPSHOT'; + const modelName = '.elser_model_2'; it('fails validation without modelName', () => { const request = { diff --git a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts index 052e5d1f53644..3e0534d73d387 100644 --- a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts +++ b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts @@ -58,7 +58,7 @@ describe('modelsProvider', () => { config: { input: { field_names: ['text_field'] } }, default: true, description: 'Elastic Learned Sparse EncodeR v2 (Tech Preview)', - name: '.elser_model_2_SNAPSHOT', + name: '.elser_model_2', version: 2, }, { @@ -66,7 +66,7 @@ describe('modelsProvider', () => { config: { input: { field_names: ['text_field'] } }, description: 'Elastic Learned Sparse EncodeR v2, optimized for linux-x86_64 (Tech Preview)', - name: '.elser_model_2_linux-x86_64_SNAPSHOT', + name: '.elser_model_2_linux-x86_64', os: 'Linux', recommended: true, version: 2, @@ -110,7 +110,7 @@ describe('modelsProvider', () => { config: { input: { field_names: ['text_field'] } }, recommended: true, description: 'Elastic Learned Sparse EncodeR v2 (Tech Preview)', - name: '.elser_model_2_SNAPSHOT', + name: '.elser_model_2', version: 2, }, { @@ -118,7 +118,7 @@ describe('modelsProvider', () => { config: { input: { field_names: ['text_field'] } }, description: 'Elastic Learned Sparse EncodeR v2, optimized for linux-x86_64 (Tech Preview)', - name: '.elser_model_2_linux-x86_64_SNAPSHOT', + name: '.elser_model_2_linux-x86_64', os: 'Linux', version: 2, }, @@ -129,7 +129,7 @@ describe('modelsProvider', () => { describe('getELSER', () => { test('provides a recommended definition by default', async () => { const result = await modelService.getELSER(); - expect(result.name).toEqual('.elser_model_2_linux-x86_64_SNAPSHOT'); + expect(result.name).toEqual('.elser_model_2_linux-x86_64'); }); test('provides a default version if there is no recommended', async () => { @@ -155,7 +155,7 @@ describe('modelsProvider', () => { }); const result = await modelService.getELSER(); - expect(result.name).toEqual('.elser_model_2_SNAPSHOT'); + expect(result.name).toEqual('.elser_model_2'); }); test('provides the requested version', async () => { @@ -165,7 +165,7 @@ describe('modelsProvider', () => { test('provides the requested version of a recommended architecture', async () => { const result = await modelService.getELSER({ version: 2 }); - expect(result.name).toEqual('.elser_model_2_linux-x86_64_SNAPSHOT'); + expect(result.name).toEqual('.elser_model_2_linux-x86_64'); }); }); }); From 92f5a883cfdfb9ad71cf14c625e1963ac0caab42 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Tue, 3 Oct 2023 18:32:23 -0400 Subject: [PATCH 033/170] [Dashboard] Generate new panel ids on Dashboard clone (#166299) Ensures that all panels are given new, unique IDs when a dashboard is cloned. This will fix a bug where some panels weren't refreshed properly on navigation, since the "fast dashboard navigation" relies on IDs to be changed in order to handle the logic for deciding which panels need to be rebuilt. Co-authored-by: Hannah Mudge --- .../control_group_persistence.ts | 22 ++- src/plugins/controls/common/index.ts | 1 + .../common/lib/dashboard_panel_converters.ts | 18 +++ .../lib/save_dashboard_state.test.ts | 138 ++++++++++++++++++ .../lib/save_dashboard_state.ts | 10 +- 5 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts diff --git a/src/plugins/controls/common/control_group/control_group_persistence.ts b/src/plugins/controls/common/control_group/control_group_persistence.ts index cf108b1a4304a..be01e0ca555b8 100644 --- a/src/plugins/controls/common/control_group/control_group_persistence.ts +++ b/src/plugins/controls/common/control_group/control_group_persistence.ts @@ -6,21 +6,23 @@ * Side Public License, v 1. */ -import { SerializableRecord } from '@kbn/utility-types'; import deepEqual from 'fast-deep-equal'; +import { SerializableRecord } from '@kbn/utility-types'; +import { v4 } from 'uuid'; import { pick, omit, xor } from 'lodash'; -import { ControlGroupInput } from '..'; + import { DEFAULT_CONTROL_GROW, DEFAULT_CONTROL_STYLE, DEFAULT_CONTROL_WIDTH, } from './control_group_constants'; -import { PersistableControlGroupInput, RawControlGroupAttributes } from './types'; import { ControlPanelDiffSystems, genericControlPanelDiffSystem, } from './control_group_panel_diff_system'; +import { ControlGroupInput } from '..'; +import { ControlsPanels, PersistableControlGroupInput, RawControlGroupAttributes } from './types'; const safeJSONParse = (jsonString?: string): OutType | undefined => { if (!jsonString && typeof jsonString !== 'string') return; @@ -103,6 +105,20 @@ export const controlGroupInputToRawControlGroupAttributes = ( }; }; +export const generateNewControlIds = (controlGroupInput?: PersistableControlGroupInput) => { + if (!controlGroupInput?.panels) return; + + const newPanelsMap: ControlsPanels = {}; + for (const panel of Object.values(controlGroupInput.panels)) { + const newId = v4(); + newPanelsMap[newId] = { + ...panel, + explicitInput: { ...panel.explicitInput, id: newId }, + }; + } + return { ...controlGroupInput, panels: newPanelsMap }; +}; + export const rawControlGroupAttributesToControlGroupInput = ( rawControlGroupAttributes: RawControlGroupAttributes ): PersistableControlGroupInput | undefined => { diff --git a/src/plugins/controls/common/index.ts b/src/plugins/controls/common/index.ts index de492adb399f3..b1d4488a876ea 100644 --- a/src/plugins/controls/common/index.ts +++ b/src/plugins/controls/common/index.ts @@ -26,6 +26,7 @@ export { serializableToRawControlGroupAttributes, persistableControlGroupInputIsEqual, getDefaultControlGroupInput, + generateNewControlIds, } from './control_group/control_group_persistence'; export { diff --git a/src/plugins/dashboard/common/lib/dashboard_panel_converters.ts b/src/plugins/dashboard/common/lib/dashboard_panel_converters.ts index 052dd6532fc44..edb24e31e09cc 100644 --- a/src/plugins/dashboard/common/lib/dashboard_panel_converters.ts +++ b/src/plugins/dashboard/common/lib/dashboard_panel_converters.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { v4 } from 'uuid'; import { omit } from 'lodash'; import { EmbeddableInput, SavedObjectEmbeddableInput } from '@kbn/embeddable-plugin/common'; @@ -74,3 +75,20 @@ export const convertPanelMapToSavedPanels = ( convertPanelStateToSavedDashboardPanel(panel, removeLegacyVersion) ); }; + +/** + * When saving a dashboard as a copy, we should generate new IDs for all panels so that they are + * properly refreshed when navigating between Dashboards + */ +export const generateNewPanelIds = (panels: DashboardPanelMap) => { + const newPanelsMap: DashboardPanelMap = {}; + for (const panel of Object.values(panels)) { + const newId = v4(); + newPanelsMap[newId] = { + ...panel, + gridData: { ...panel.gridData, i: newId }, + explicitInput: { ...panel.explicitInput, id: newId }, + }; + } + return newPanelsMap; +}; diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts new file mode 100644 index 0000000000000..b44ae044cd50a --- /dev/null +++ b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.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 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 { registry } from '../../plugin_services.stub'; +import { pluginServices } from '../../plugin_services'; +import { getSampleDashboardInput } from '../../../mocks'; +import { saveDashboardState } from './save_dashboard_state'; +import { DashboardContainerInput } from '../../../../common'; + +pluginServices.setRegistry(registry.start({})); +const { + data, + embeddable, + notifications, + dashboardBackup, + contentManagement, + initializerContext, + savedObjectsTagging, +} = pluginServices.getServices(); + +contentManagement.client.create = jest.fn().mockImplementation(({ options }) => { + if (options.id === undefined) { + return { item: { id: 'newlyGeneratedId' } }; + } + return { item: { id: options.id } }; +}); + +const allServices = { + data, + embeddable, + notifications, + dashboardBackup, + contentManagement, + initializerContext, + savedObjectsTagging, +}; +data.query.timefilter.timefilter.getTime = jest.fn().mockReturnValue({ from: 'then', to: 'now' }); +embeddable.extract = jest + .fn() + .mockImplementation((attributes) => ({ state: attributes, references: [] })); + +describe('Save dashboard state', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should save the dashboard using the same ID', async () => { + const result = await saveDashboardState({ + currentState: { + ...getSampleDashboardInput(), + title: 'BOO', + } as unknown as DashboardContainerInput, + lastSavedId: 'Boogaloo', + saveOptions: {}, + ...allServices, + }); + + expect(result.id).toBe('Boogaloo'); + expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect.objectContaining({ + options: expect.objectContaining({ id: 'Boogaloo', overwrite: true }), + }) + ); + expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ + title: `Dashboard 'BOO' was saved`, + 'data-test-subj': 'saveDashboardSuccess', + }); + }); + + it('should save the dashboard using a new id, and return redirect required', async () => { + const result = await saveDashboardState({ + currentState: { + ...getSampleDashboardInput(), + title: 'BooToo', + } as unknown as DashboardContainerInput, + lastSavedId: 'Boogaloonie', + saveOptions: { saveAsCopy: true }, + ...allServices, + }); + + expect(result.id).toBe('newlyGeneratedId'); + expect(result.redirectRequired).toBe(true); + expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect.objectContaining({ + options: expect.objectContaining({ id: undefined, overwrite: true }), + }) + ); + expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ + title: `Dashboard 'BooToo' was saved`, + 'data-test-subj': 'saveDashboardSuccess', + }); + }); + + it('should generate new panel IDs for dashboard panels when save as copy is true', async () => { + const result = await saveDashboardState({ + currentState: { + ...getSampleDashboardInput(), + title: 'BooThree', + panels: { idOne: { type: 'boop' } }, + } as unknown as DashboardContainerInput, + lastSavedId: 'Boogatoonie', + saveOptions: { saveAsCopy: true }, + ...allServices, + }); + + expect(result.id).toBe('newlyGeneratedId'); + + expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect.objectContaining({ + data: expect.objectContaining({ + panelsJSON: expect.not.stringContaining('neverGonnaGetThisId'), + }), + }) + ); + }); + + it('should return an error when the save fails.', async () => { + contentManagement.client.create = jest.fn().mockRejectedValue('Whoops'); + const result = await saveDashboardState({ + currentState: { + ...getSampleDashboardInput(), + title: 'BooThree', + panels: { idOne: { type: 'boop' } }, + } as unknown as DashboardContainerInput, + lastSavedId: 'Boogatoonie', + saveOptions: { saveAsCopy: true }, + ...allServices, + }); + + expect(result.id).toBeUndefined(); + expect(result.error).toBe('Whoops'); + }); +}); diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts index 20d36688307dd..501d95976dc10 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts @@ -13,6 +13,7 @@ import { getDefaultControlGroupInput, persistableControlGroupInputIsEqual, controlGroupInputToRawControlGroupAttributes, + generateNewControlIds, } from '@kbn/controls-plugin/common'; import { isFilterPinned } from '@kbn/es-query'; import { extractSearchSourceReferences, RefreshInterval } from '@kbn/data-plugin/public'; @@ -31,6 +32,7 @@ import { DashboardStartDependencies } from '../../../plugin'; import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; import { convertDashboardVersionToNumber } from './dashboard_versioning'; import { LATEST_DASHBOARD_CONTAINER_VERSION } from '../../../dashboard_container'; +import { generateNewPanelIds } from '../../../../common/lib/dashboard_panel_converters'; import { dashboardContentManagementCache } from '../dashboard_content_management_service'; import { DashboardCrudTypes, DashboardAttributes } from '../../../../common/content_management'; import { dashboardSaveToastStrings } from '../../../dashboard_container/_dashboard_container_strings'; @@ -90,12 +92,10 @@ export const saveDashboardState = async ({ tags, query, title, - panels, filters, version, timeRestore, description, - controlGroupInput, // Dashboard options useMargins, @@ -105,6 +105,12 @@ export const saveDashboardState = async ({ hidePanelTitles, } = currentState; + let { panels, controlGroupInput } = currentState; + if (saveOptions.saveAsCopy) { + panels = generateNewPanelIds(panels); + controlGroupInput = generateNewControlIds(controlGroupInput); + } + /** * Stringify filters and query into search source JSON */ From 2d7a084da642e38fffd29d304286ce876fc9a147 Mon Sep 17 00:00:00 2001 From: Nikita Indik Date: Wed, 4 Oct 2023 00:44:12 +0200 Subject: [PATCH 034/170] [Security Solution] Refactor Rule Details page (#166158) **Resolves: https://github.com/elastic/kibana/issues/164962** **Resolves: https://github.com/elastic/kibana/issues/166650** **Related docs issue: https://github.com/elastic/security-docs/issues/3970** ## Summary Refactors Rule Details page by making use of section components from the rule preview flyout. Namely `RuleAboutSection`, `RuleDefinitionSection` and `RuleScheduleSection`. Also fixes a couple UI copy issues: - #164962. - #166650. ### Checklist - [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) - [x] Documentation [issue](https://github.com/elastic/security-docs/issues/3970) created. - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../cast_rule_as_rule_response.ts | 24 +++ .../pages/rule_details/index.tsx | 81 +++------ .../rule_details/rule_about_section.tsx | 82 +++++---- .../rule_details/rule_definition_section.tsx | 155 +++++++++++++++--- .../rule_details/rule_overview_tab.tsx | 5 +- .../rule_details/rule_schedule_section.tsx | 8 +- .../components/rule_details/translations.ts | 32 +++- .../rules/description_step/translations.ts | 16 +- .../step_about_rule_details/index.test.tsx | 84 ++++++---- .../rules/step_about_rule_details/index.tsx | 14 +- .../translations/translations/fr-FR.json | 2 +- .../translations/translations/ja-JP.json | 2 +- .../translations/translations/zh-CN.json | 2 +- .../rule_creation/esql_rule_details.cy.ts | 4 +- .../rule_creation/esql_rule_edit.cy.ts | 4 +- .../event_correlation_rule.cy.ts | 4 +- .../cypress/screens/rule_details.ts | 4 + 17 files changed, 352 insertions(+), 171 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/cast_rule_as_rule_response.ts diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/cast_rule_as_rule_response.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/cast_rule_as_rule_response.ts new file mode 100644 index 0000000000000..fb1fdfc1fcc99 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/cast_rule_as_rule_response.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Rule } from '../../../rule_management/logic'; +import type { RuleResponse } from '../../../../../common/api/detection_engine/model/rule_schema/rule_schemas'; + +/* + * This is a temporary workaround to suppress TS errors when using + * rule section components on the rule details page. + * + * The rule details page passes a Rule object to the rule section components, + * but section components expect a RuleResponse object. Rule and RuleResponse + * are basically same object type with only a few minor differences. + * This function casts the Rule object to RuleResponse. + * + * In the near future we'll start using codegen to generate proper response + * types and the rule details page will start passing RuleResponse objects, + * so this workaround will no longer be needed. + */ +export const castRuleAsRuleResponse = (rule: Rule) => rule as Partial; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx index 223593ef3e095..6d055af164d07 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx @@ -64,8 +64,6 @@ import { SpyRoute } from '../../../../common/utils/route/spy_routes'; import { StepAboutRuleToggleDetails } from '../../../../detections/components/rules/step_about_rule_details'; import { AlertsHistogramPanel } from '../../../../detections/components/alerts_kpis/alerts_histogram_panel'; import { useUserData } from '../../../../detections/components/user_info'; -import { StepDefineRuleReadOnly } from '../../../../detections/components/rules/step_define_rule'; -import { StepScheduleRuleReadOnly } from '../../../../detections/components/rules/step_schedule_rule'; import { StepRuleActionsReadOnly } from '../../../../detections/components/rules/step_rule_actions'; import { buildAlertsFilter, @@ -120,7 +118,6 @@ import * as ruleI18n from '../../../../detections/pages/detection_engine/rules/t import { RuleDetailsContextProvider } from './rule_details_context'; // eslint-disable-next-line no-restricted-imports import { LegacyUrlConflictCallOut } from './legacy_url_conflict_callout'; -import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; import * as i18n from './translations'; import { NeedAdminForUpdateRulesCallOut } from '../../../../detections/components/callouts/need_admin_for_update_callout'; import { MissingPrivilegesCallOut } from '../../../../detections/components/callouts/missing_privileges_callout'; @@ -138,12 +135,13 @@ import { useBulkDuplicateExceptionsConfirmation } from '../../../rule_management import { BulkActionDuplicateExceptionsConfirmation } from '../../../rule_management_ui/components/rules_table/bulk_actions/bulk_duplicate_exceptions_confirmation'; import { useAsyncConfirmation } from '../../../rule_management_ui/components/rules_table/rules_table/use_async_confirmation'; import { RuleSnoozeBadge } from '../../../rule_management/components/rule_snooze_badge'; -import { useRuleIndexPattern } from '../../../rule_creation_ui/pages/form'; -import { DataSourceType } from '../../../../detections/pages/detection_engine/rules/types'; import { useBoolState } from '../../../../common/hooks/use_bool_state'; +import { RuleDefinitionSection } from '../../../rule_management/components/rule_details/rule_definition_section'; +import { RuleScheduleSection } from '../../../rule_management/components/rule_details/rule_schedule_section'; // eslint-disable-next-line no-restricted-imports import { useLegacyUrlRedirect } from './use_redirect_legacy_url'; import { RuleDetailTabs, useRuleDetailsTabs } from './use_rule_details_tabs'; +import { castRuleAsRuleResponse } from './cast_rule_as_rule_response'; const RULE_EXCEPTION_LIST_TYPES = [ ExceptionListTypeEnum.DETECTION, @@ -174,7 +172,6 @@ const RuleDetailsPageComponent: React.FC = ({ clearSelected, }) => { const { - data, application: { navigateToApp, capabilities: { actions }, @@ -259,38 +256,14 @@ const RuleDetailsPageComponent: React.FC = ({ onFinish: hideDeleteConfirmation, }); - const { - aboutRuleData, - modifiedAboutRuleDetailsData, - defineRuleData, - scheduleRuleData, - ruleActionsData, - } = + const { aboutRuleData, modifiedAboutRuleDetailsData, ruleActionsData } = rule != null ? getStepsData({ rule, detailsView: true }) : { aboutRuleData: null, modifiedAboutRuleDetailsData: null, - defineRuleData: null, - scheduleRuleData: null, ruleActionsData: null, }; - const [dataViewTitle, setDataViewTitle] = useState(); - useEffect(() => { - const fetchDataViewTitle = async () => { - if (defineRuleData?.dataViewId != null && defineRuleData?.dataViewId !== '') { - const dataView = await data.dataViews.get(defineRuleData?.dataViewId); - setDataViewTitle(dataView.title); - } - }; - fetchDataViewTitle(); - }, [data.dataViews, defineRuleData?.dataViewId]); - - const { indexPattern: ruleIndexPattern } = useRuleIndexPattern({ - dataSourceType: defineRuleData?.dataSourceType ?? DataSourceType.IndexPatterns, - index: defineRuleData?.index ?? [], - dataViewId: defineRuleData?.dataViewId, - }); const { showBuildingBlockAlerts, setShowBuildingBlockAlerts, showOnlyThreatIndicatorAlerts } = useDataTableFilters(TableId.alertsOnRuleDetailsPage); @@ -299,11 +272,6 @@ const RuleDetailsPageComponent: React.FC = ({ const { globalFullScreen } = useGlobalFullScreen(); const [filterGroup, setFilterGroup] = useState(FILTER_OPEN); - const { isSavedQueryLoading, savedQueryBar } = useGetSavedQuery({ - savedQueryId: rule?.saved_id, - ruleType: rule?.type, - }); - // TODO: Refactor license check + hasMlAdminPermissions to common check const hasMlPermissions = hasMlLicense(mlCapabilities) && hasMlAdminPermissions(mlCapabilities); @@ -666,30 +634,25 @@ const RuleDetailsPageComponent: React.FC = ({ - + {rule !== null && ( + + )} - - {defineRuleData != null && !isSavedQueryLoading && !isStartingJobs && ( - + {rule !== null && !isStartingJobs && ( + )} @@ -697,12 +660,8 @@ const RuleDetailsPageComponent: React.FC = ({ - {scheduleRuleData != null && ( - + {rule != null && ( + )} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx index aef4eccaa4299..7c1ada1c6e1bc 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx @@ -53,11 +53,17 @@ const StyledEuiLink = styled(EuiLink)` word-break: break-word; `; +interface NameProps { + name: string; +} + +const Name = ({ name }: NameProps) => {name}; + interface DescriptionProps { description: string; } -const Description = ({ description }: DescriptionProps) => ( +export const Description = ({ description }: DescriptionProps) => ( {description} ); @@ -217,10 +223,29 @@ interface TagsProps { const Tags = ({ tags }: TagsProps) => ; -const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListProps['listItems'] => { +// eslint-disable-next-line complexity +const prepareAboutSectionListItems = ( + rule: Partial, + hideName?: boolean, + hideDescription?: boolean +): EuiDescriptionListProps['listItems'] => { const aboutSectionListItems: EuiDescriptionListProps['listItems'] = []; - if (rule.author.length > 0) { + if (!hideName && rule.name) { + aboutSectionListItems.push({ + title: i18n.NAME_FIELD_LABEL, + description: , + }); + } + + if (!hideDescription && rule.description) { + aboutSectionListItems.push({ + title: i18n.DESCRIPTION_FIELD_LABEL, + description: , + }); + } + + if (rule.author && rule.author.length > 0) { aboutSectionListItems.push({ title: i18n.AUTHOR_FIELD_LABEL, description: , @@ -234,12 +259,14 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro }); } - aboutSectionListItems.push({ - title: i18n.SEVERITY_FIELD_LABEL, - description: , - }); + if (rule.severity) { + aboutSectionListItems.push({ + title: i18n.SEVERITY_FIELD_LABEL, + description: , + }); + } - if (rule.severity_mapping.length > 0) { + if (rule.severity_mapping && rule.severity_mapping.length > 0) { aboutSectionListItems.push( ...rule.severity_mapping .filter((severityMappingItem) => severityMappingItem.field !== '') @@ -252,12 +279,14 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro ); } - aboutSectionListItems.push({ - title: i18n.RISK_SCORE_FIELD_LABEL, - description: , - }); + if (rule.risk_score) { + aboutSectionListItems.push({ + title: i18n.RISK_SCORE_FIELD_LABEL, + description: , + }); + } - if (rule.risk_score_mapping.length > 0) { + if (rule.risk_score_mapping && rule.risk_score_mapping.length > 0) { aboutSectionListItems.push( ...rule.risk_score_mapping .filter((riskScoreMappingItem) => riskScoreMappingItem.field !== '') @@ -270,14 +299,14 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro ); } - if (rule.references.length > 0) { + if (rule.references && rule.references.length > 0) { aboutSectionListItems.push({ title: i18n.REFERENCES_FIELD_LABEL, description: , }); } - if (rule.false_positives.length > 0) { + if (rule.false_positives && rule.false_positives.length > 0) { aboutSectionListItems.push({ title: i18n.FALSE_POSITIVES_FIELD_LABEL, description: , @@ -307,7 +336,7 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro }); } - if (rule.threat.length > 0) { + if (rule.threat && rule.threat.length > 0) { aboutSectionListItems.push({ title: i18n.THREAT_FIELD_LABEL, description: , @@ -328,7 +357,7 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro }); } - if (rule.tags.length > 0) { + if (rule.tags && rule.tags.length > 0) { aboutSectionListItems.push({ title: i18n.TAGS_FIELD_LABEL, description: , @@ -339,30 +368,23 @@ const prepareAboutSectionListItems = (rule: RuleResponse): EuiDescriptionListPro }; export interface RuleAboutSectionProps { - rule: RuleResponse; + rule: Partial; + hideName?: boolean; + hideDescription?: boolean; } -export const RuleAboutSection = ({ rule }: RuleAboutSectionProps) => { - const aboutSectionListItems = prepareAboutSectionListItems(rule); +export const RuleAboutSection = ({ rule, hideName, hideDescription }: RuleAboutSectionProps) => { + const aboutSectionListItems = prepareAboutSectionListItems(rule, hideName, hideDescription); return (
    - {rule.description && ( - , - }, - ]} - /> - )}
    ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index e30e6421f37ee..e32968573b6a2 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -34,12 +34,17 @@ import type { RequiredFieldArray } from '../../../../../common/api/detection_eng import { assertUnreachable } from '../../../../../common/utility_types'; import * as descriptionStepI18n from '../../../../detections/components/rules/description_step/translations'; import { RelatedIntegrationsDescription } from '../../../../detections/components/rules/related_integrations/integrations_description'; +import { AlertSuppressionTechnicalPreviewBadge } from '../../../../detections/components/rules/description_step/alert_suppression_technical_preview_badge'; import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; +import { useLicense } from '../../../../common/hooks/use_license'; import * as threatMatchI18n from '../../../../common/components/threat_match/translations'; +import { AlertSuppressionMissingFieldsStrategy } from '../../../../../common/api/detection_engine/model/rule_schema/specific_attributes/query_attributes'; import * as timelinesI18n from '../../../../timelines/components/timeline/translations'; import { useRuleIndexPattern } from '../../../rule_creation_ui/pages/form'; import { DataSourceType } from '../../../../detections/pages/detection_engine/rules/types'; +import type { Duration } from '../../../../detections/pages/detection_engine/rules/types'; import { convertHistoryStartToSize } from '../../../../detections/pages/detection_engine/rules/helpers'; +import { MlJobsDescription } from '../../../../detections/components/rules/ml_jobs_description/ml_jobs_description'; import { MlJobLink } from '../../../../detections/components/rules/ml_job_link/ml_job_link'; import { useSecurityJobs } from '../../../../common/components/ml_popover/hooks/use_security_jobs'; import { useKibana } from '../../../../common/lib/kibana/kibana_react'; @@ -170,11 +175,16 @@ const AnomalyThreshold = ({ anomalyThreshold }: AnomalyThresholdProps) => ( interface MachineLearningJobListProps { jobIds: string[]; + isInteractive: boolean; } -const MachineLearningJobList = ({ jobIds }: MachineLearningJobListProps) => { +const MachineLearningJobList = ({ jobIds, isInteractive }: MachineLearningJobListProps) => { const { jobs } = useSecurityJobs(); + if (isInteractive) { + return ; + } + const relevantJobs = jobs.filter((job) => jobIds.includes(job.id)); return ( @@ -202,7 +212,7 @@ const getRuleTypeDescription = (ruleType: Type) => { case 'eql': return descriptionStepI18n.EQL_TYPE_DESCRIPTION; case 'esql': - return descriptionStepI18n.ESQL_TYPE_DESCRIPTION; + return ; case 'threat_match': return descriptionStepI18n.THREAT_MATCH_TYPE_DESCRIPTION; case 'new_terms': @@ -301,6 +311,49 @@ const ThreatMapping = ({ threatMapping }: ThreatMappingProps) => { return {description}; }; +interface TitleWithTechnicalPreviewBadgeProps { + title: string; +} + +const TitleWithTechnicalPreviewBadge = ({ title }: TitleWithTechnicalPreviewBadgeProps) => { + const license = useLicense(); + + return ; +}; + +interface SuppressAlertsByFieldProps { + fields: string[]; +} + +const SuppressAlertsByField = ({ fields }: SuppressAlertsByFieldProps) => ( + +); + +interface SuppressAlertsDurationProps { + duration?: Duration; +} + +const SuppressAlertsDuration = ({ duration }: SuppressAlertsDurationProps) => { + const durationDescription = duration + ? `${duration.value}${duration.unit}` + : descriptionStepI18n.ALERT_SUPPRESSION_PER_RULE_EXECUTION; + + return {durationDescription}; +}; + +interface MissingFieldsStrategyProps { + missingFieldsStrategy?: AlertSuppressionMissingFieldsStrategy; +} + +const MissingFieldsStrategy = ({ missingFieldsStrategy }: MissingFieldsStrategyProps) => { + const missingFieldsDescription = + missingFieldsStrategy === AlertSuppressionMissingFieldsStrategy.Suppress + ? descriptionStepI18n.ALERT_SUPPRESSION_SUPPRESS_ON_MISSING_FIELDS + : descriptionStepI18n.ALERT_SUPPRESSION_DO_NOT_SUPPRESS_ON_MISSING_FIELDS; + + return {missingFieldsDescription}; +}; + interface NewTermsFieldsProps { newTermsFields: string[]; } @@ -321,7 +374,8 @@ const HistoryWindowSize = ({ historyWindowStart }: HistoryWindowSizeProps) => { // eslint-disable-next-line complexity const prepareDefinitionSectionListItems = ( - rule: RuleResponse, + rule: Partial, + isInteractive: boolean, savedQuery?: SavedQuery ): EuiDescriptionListProps['listItems'] => { const definitionSectionListItems: EuiDescriptionListProps['listItems'] = []; @@ -358,13 +412,18 @@ const prepareDefinitionSectionListItems = ( description: , }); } + + if (typeof savedQuery.attributes.query.query === 'string') { + definitionSectionListItems.push({ + title: descriptionStepI18n.SAVED_QUERY_LABEL, + description: , + }); + } } - if ('filters' in rule && 'data_view_id' in rule && rule.filters?.length) { + if ('filters' in rule && rule.filters?.length) { definitionSectionListItems.push({ - title: savedQuery - ? descriptionStepI18n.SAVED_QUERY_FILTERS_LABEL - : descriptionStepI18n.FILTERS_LABEL, + title: descriptionStepI18n.FILTERS_LABEL, description: ( , }); } - definitionSectionListItems.push({ - title: i18n.RULE_TYPE_FIELD_LABEL, - description: , - }); + if (rule.type) { + definitionSectionListItems.push({ + title: i18n.RULE_TYPE_FIELD_LABEL, + description: , + }); + } if ('anomaly_threshold' in rule && rule.anomaly_threshold) { definitionSectionListItems.push({ @@ -397,11 +467,16 @@ const prepareDefinitionSectionListItems = ( if ('machine_learning_job_id' in rule) { definitionSectionListItems.push({ title: i18n.MACHINE_LEARNING_JOB_ID_FIELD_LABEL, - description: , + description: ( + + ), }); } - if (rule.related_integrations.length > 0) { + if (rule.related_integrations && rule.related_integrations.length > 0) { definitionSectionListItems.push({ title: i18n.RELATED_INTEGRATIONS_FIELD_LABEL, description: ( @@ -410,7 +485,7 @@ const prepareDefinitionSectionListItems = ( }); } - if (rule.required_fields.length > 0) { + if (rule.required_fields && rule.required_fields.length > 0) { definitionSectionListItems.push({ title: i18n.REQUIRED_FIELDS_FIELD_LABEL, description: , @@ -447,9 +522,7 @@ const prepareDefinitionSectionListItems = ( if ('threat_filters' in rule && rule.threat_filters && rule.threat_filters.length > 0) { definitionSectionListItems.push({ - title: savedQuery - ? descriptionStepI18n.SAVED_QUERY_FILTERS_LABEL - : descriptionStepI18n.FILTERS_LABEL, + title: i18n.THREAT_FILTERS_FIELD_LABEL, description: ( , }); } + if ('alert_suppression' in rule && rule.alert_suppression) { + definitionSectionListItems.push({ + title: , + description: , + }); + + definitionSectionListItems.push({ + title: , + description: , + }); + + definitionSectionListItems.push({ + title: , + description: ( + + ), + }); + } + if ('new_terms_fields' in rule && rule.new_terms_fields && rule.new_terms_fields.length > 0) { definitionSectionListItems.push({ title: i18n.NEW_TERMS_FIELDS_FIELD_LABEL, @@ -476,7 +568,7 @@ const prepareDefinitionSectionListItems = ( }); } - if (rule.type === 'new_terms' || 'history_window_start' in rule) { + if ('history_window_start' in rule) { definitionSectionListItems.push({ title: i18n.HISTORY_WINDOW_SIZE_FIELD_LABEL, description: , @@ -487,24 +579,35 @@ const prepareDefinitionSectionListItems = ( }; export interface RuleDefinitionSectionProps { - rule: RuleResponse; + rule: Partial; + isInteractive?: boolean; + dataTestSubj?: string; } -export const RuleDefinitionSection = ({ rule }: RuleDefinitionSectionProps) => { +export const RuleDefinitionSection = ({ + rule, + isInteractive = false, + dataTestSubj, +}: RuleDefinitionSectionProps) => { const { savedQuery } = useGetSavedQuery({ savedQueryId: rule.type === 'saved_query' ? rule.saved_id : '', ruleType: rule.type, }); - const definitionSectionListItems = prepareDefinitionSectionListItems(rule, savedQuery); + const definitionSectionListItems = prepareDefinitionSectionListItems( + rule, + isInteractive, + savedQuery + ); return ( -
    +
    ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_overview_tab.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_overview_tab.tsx index aa9b42abe6ba7..3d4501bd1f797 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_overview_tab.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_overview_tab.tsx @@ -15,7 +15,7 @@ import { useGeneratedHtmlId, } from '@elastic/eui'; import type { RuleResponse } from '../../../../../common/api/detection_engine/model/rule_schema/rule_schemas'; -import { RuleAboutSection } from './rule_about_section'; +import { RuleAboutSection, Description } from './rule_about_section'; import { RuleDefinitionSection } from './rule_definition_section'; import { RuleScheduleSection } from './rule_schedule_section'; import { RuleSetupGuideSection } from './rule_setup_guide_section'; @@ -103,7 +103,8 @@ export const RuleOverviewTab = ({ isOpen={expandedOverviewSections.about} toggle={toggleOverviewSection.about} > - + {rule.description && } + ( ); export interface RuleScheduleSectionProps { - rule: RuleResponse; + rule: Partial; } export const RuleScheduleSection = ({ rule }: RuleScheduleSectionProps) => { + if (!rule.interval || !rule.from) { + return null; + } + const ruleSectionListItems = []; ruleSectionListItems.push( @@ -46,7 +50,7 @@ export const RuleScheduleSection = ({ rule }: RuleScheduleSectionProps) => { ); return ( -
    +
    { - let mockRule: AboutStepRule; + let stepDataMock: AboutStepRule; beforeEach(() => { - mockRule = mockAboutStepRule(); + stepDataMock = mockAboutStepRule(); }); test('it renders loading component when "loading" is true', () => { @@ -35,11 +38,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -49,7 +53,12 @@ describe('StepAboutRuleToggleDetails', () => { test('it does not render details if stepDataDetails is null', () => { const wrapper = shallow( - + ); expect(wrapper.find(StepAboutRule).exists()).toBeFalsy(); @@ -65,6 +74,7 @@ describe('StepAboutRuleToggleDetails', () => { setup: '', }} stepData={null} + rule={mockRule('mocked-rule-id')} /> ); @@ -74,7 +84,7 @@ describe('StepAboutRuleToggleDetails', () => { describe('note value is empty string', () => { test('it does not render toggle buttons', () => { const mockAboutStepWithoutNote = { - ...mockRule, + ...stepDataMock, note: '', }; const wrapper = shallow( @@ -82,10 +92,11 @@ describe('StepAboutRuleToggleDetails', () => { loading={false} stepDataDetails={{ note: '', - description: mockRule.description, + description: stepDataMock.description, setup: '', }} stepData={mockAboutStepWithoutNote} + rule={mockRule('mocked-rule-id')} /> ); @@ -103,11 +114,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -123,11 +135,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -151,11 +164,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -180,11 +194,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -203,11 +218,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -224,11 +240,12 @@ describe('StepAboutRuleToggleDetails', () => { ); @@ -254,11 +271,12 @@ describe('StepAboutRuleToggleDetails', () => { ); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx index 66ad2cfcf64fe..c0d1db9f837fe 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx @@ -21,14 +21,16 @@ import type { PropsWithChildren } from 'react'; import React, { memo, useCallback, useMemo, useState } from 'react'; import { css } from '@emotion/css'; +import type { Rule } from '../../../../detection_engine/rule_management/logic/types'; +import { RuleAboutSection } from '../../../../detection_engine/rule_management/components/rule_details/rule_about_section'; import { HeaderSection } from '../../../../common/components/header_section'; import { MarkdownRenderer } from '../../../../common/components/markdown_editor'; import type { AboutStepRule, AboutStepRuleDetails, } from '../../../pages/detection_engine/rules/types'; +import { castRuleAsRuleResponse } from '../../../../detection_engine/rule_details_ui/pages/rule_details/cast_rule_as_rule_response'; import * as i18n from './translations'; -import { StepAboutRuleReadOnly } from '../step_about_rule'; import { fullHeight } from './styles'; const detailsOption: EuiButtonGroupOptionProps = { @@ -51,12 +53,14 @@ interface StepPanelProps { stepData: AboutStepRule | null; stepDataDetails: AboutStepRuleDetails | null; loading: boolean; + rule: Rule; } const StepAboutRuleToggleDetailsComponent: React.FC = ({ stepData, stepDataDetails, loading, + rule, }) => { const [selectedToggleOption, setToggleOption] = useState('details'); const [aboutPanelHeight, setAboutPanelHeight] = useState(0); @@ -124,10 +128,10 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ -
    )} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 4d5c96f4d3196..884507b4372a1 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -30606,7 +30606,7 @@ "xpack.securitySolution.detectionEngine.createRule.mlRuleTypeDescription": "Machine Learning", "xpack.securitySolution.detectionEngine.createRule.newTermsRuleTypeDescription": "Nouveaux termes", "xpack.securitySolution.detectionEngine.createRule.pageTitle": "Créer une nouvelle règle", - "xpack.securitySolution.detectionEngine.createRule.QueryLabel": "Requête personnalisée", + "xpack.securitySolution.detectionEngine.createRule.queryLabel": "Requête personnalisée", "xpack.securitySolution.detectionEngine.createRule.queryRuleTypeDescription": "Requête", "xpack.securitySolution.detectionEngine.createRule.ruleActionsField.ruleActionsFormErrorsTitle": "Veuillez corriger les problèmes répertoriés ci-dessous", "xpack.securitySolution.detectionEngine.createRule.rulePreviewDescription": "L'aperçu des règles reflète la configuration actuelle de vos paramètres et exceptions de règles. Cliquez sur l'icône d'actualisation pour afficher l'aperçu mis à jour.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 11bf49746b2bc..4319709c23bea 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -30605,7 +30605,7 @@ "xpack.securitySolution.detectionEngine.createRule.mlRuleTypeDescription": "機械学習", "xpack.securitySolution.detectionEngine.createRule.newTermsRuleTypeDescription": "新しい用語", "xpack.securitySolution.detectionEngine.createRule.pageTitle": "新規ルールを作成", - "xpack.securitySolution.detectionEngine.createRule.QueryLabel": "カスタムクエリ", + "xpack.securitySolution.detectionEngine.createRule.queryLabel": "カスタムクエリ", "xpack.securitySolution.detectionEngine.createRule.queryRuleTypeDescription": "クエリ", "xpack.securitySolution.detectionEngine.createRule.ruleActionsField.ruleActionsFormErrorsTitle": "次の一覧の問題を解決してください", "xpack.securitySolution.detectionEngine.createRule.rulePreviewDescription": "ルールプレビューには、ルール設定と例外の現在の構成が反映されます。更新アイコンをクリックすると、更新されたプレビューが表示されます。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 23f68132c7adf..fdb3d3ac3d227 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -30601,7 +30601,7 @@ "xpack.securitySolution.detectionEngine.createRule.mlRuleTypeDescription": "Machine Learning", "xpack.securitySolution.detectionEngine.createRule.newTermsRuleTypeDescription": "新字词", "xpack.securitySolution.detectionEngine.createRule.pageTitle": "创建新规则", - "xpack.securitySolution.detectionEngine.createRule.QueryLabel": "定制查询", + "xpack.securitySolution.detectionEngine.createRule.queryLabel": "定制查询", "xpack.securitySolution.detectionEngine.createRule.queryRuleTypeDescription": "查询", "xpack.securitySolution.detectionEngine.createRule.ruleActionsField.ruleActionsFormErrorsTitle": "请修复下面所列的问题", "xpack.securitySolution.detectionEngine.createRule.rulePreviewDescription": "规则预览反映了您的规则设置和例外的当前配置,单击刷新图标可查看已更新的预览。", diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts index 1ceef1fd79826..c4cdba4416f26 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts @@ -8,7 +8,7 @@ import { getEsqlRule } from '../../../objects/rule'; import { - CUSTOM_QUERY_DETAILS, + ESQL_QUERY_DETAILS, DEFINITION_DETAILS, RULE_NAME_HEADER, RULE_TYPE_DETAILS, @@ -43,7 +43,7 @@ describe('Detection ES|QL rules, details view', { tags: ['@ess'] }, () => { cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); cy.get(DEFINITION_DETAILS).within(() => { - getDetails(CUSTOM_QUERY_DETAILS).should('have.text', rule.query); + getDetails(ESQL_QUERY_DETAILS).should('have.text', rule.query); getDetails(RULE_TYPE_DETAILS).contains('ES|QL'); // ensures ES|QL rule in technical preview diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts index f3dee0a27160e..fe236f369567a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts @@ -7,7 +7,7 @@ import { getEsqlRule } from '../../../objects/rule'; -import { CUSTOM_QUERY_DETAILS, RULE_NAME_OVERRIDE_DETAILS } from '../../../screens/rule_details'; +import { ESQL_QUERY_DETAILS, RULE_NAME_OVERRIDE_DETAILS } from '../../../screens/rule_details'; import { ESQL_QUERY_BAR, ESQL_QUERY_BAR_EXPAND_BTN } from '../../../screens/create_new_rule'; @@ -60,7 +60,7 @@ describe('Detection ES|QL rules, edit', { tags: ['@ess'] }, () => { saveEditedRule(); // ensure updated query is displayed on details page - getDetails(CUSTOM_QUERY_DETAILS).should('have.text', expectedValidEsqlQuery); + getDetails(ESQL_QUERY_DETAILS).should('have.text', expectedValidEsqlQuery); }); it('edits ES|QL rule query and override rule name with new property', () => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts index 66c506e0f2157..1984ef5a5eda4 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts @@ -22,7 +22,7 @@ import { ABOUT_INVESTIGATION_NOTES, ABOUT_RULE_DESCRIPTION, ADDITIONAL_LOOK_BACK_DETAILS, - CUSTOM_QUERY_DETAILS, + EQL_QUERY_DETAILS, DEFINITION_DETAILS, FALSE_POSITIVES_DETAILS, removeExternalLinkText, @@ -115,7 +115,7 @@ describe('EQL rules', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { getDetails(INDEX_PATTERNS_DETAILS).should('have.text', getIndexPatterns().join('')); - getDetails(CUSTOM_QUERY_DETAILS).should('have.text', rule.query); + getDetails(EQL_QUERY_DETAILS).should('have.text', rule.query); getDetails(RULE_TYPE_DETAILS).should('have.text', 'Event Correlation'); getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts b/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts index d061f4a49114d..4759c3cd2b08c 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts @@ -23,6 +23,10 @@ export const ANOMALY_SCORE_DETAILS = 'Anomaly score'; export const CUSTOM_QUERY_DETAILS = 'Custom query'; +export const EQL_QUERY_DETAILS = 'EQL query'; + +export const ESQL_QUERY_DETAILS = 'ES|QL query'; + export const SAVED_QUERY_NAME_DETAILS = 'Saved query name'; export const SAVED_QUERY_DETAILS = /^Saved query$/; From 5c72df1d47bc544d9e9c4425dcb50552daf0b857 Mon Sep 17 00:00:00 2001 From: Rachel Shen Date: Tue, 3 Oct 2023 16:55:52 -0600 Subject: [PATCH 035/170] Reporting Puppeteer update v21.3.5 (#167554) ## Summary Update the chromium version to 21.3.5 ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) (tested locally on arm64 and win surface laptop locally) --- package.json | 2 +- x-pack/build_chromium/README.md | 11 +- .../chromium/driver_factory/args.test.ts | 2 +- .../server/browsers/chromium/paths.ts | 34 +- yarn.lock | 325 ++++++++++++++---- 5 files changed, 285 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index 6ade30114dcf0..bdfa73e8a9426 100644 --- a/package.json +++ b/package.json @@ -983,7 +983,7 @@ "prop-types": "^15.8.1", "proxy-from-env": "1.0.0", "puid": "1.0.7", - "puppeteer": "20.1.0", + "puppeteer": "21.3.6", "query-string": "^6.13.2", "rbush": "^3.0.1", "re-resizable": "^6.9.9", diff --git a/x-pack/build_chromium/README.md b/x-pack/build_chromium/README.md index 5a240ffc06a0f..5f9e2bb06317d 100644 --- a/x-pack/build_chromium/README.md +++ b/x-pack/build_chromium/README.md @@ -46,6 +46,9 @@ python ./build_chromium/init.py # Run the build script with the path to the chromium src directory, the git commit hash python ./build_chromium/build.py 70f5d88ea95298a18a85c33c98ea00e02358ad75 x64 +# Make sure you are using python3, you can state the path explicitly if needed +/usr/bin/python3 ./build_chromium/build.py 67649b10b92bb182fba357831ef7dd6a1baa5648 x64 + # OR You can build for ARM python ./build_chromium/build.py 70f5d88ea95298a18a85c33c98ea00e02358ad75 arm64 ``` @@ -64,6 +67,8 @@ node scripts/chromium_version.js [PuppeteerVersion] When bumping the Puppeteer version, make sure you also update the `ChromiumArchivePaths.revision` variable in `x-pack/plugins/reporting/server/browsers/chromium/paths.ts`. +In some cases the revision number might not be available for the darwin or windows builds in `https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html`. For example, 1181205 was not available for darwin arm64 or windows. In that case, the next available revision numbers 1181286 and 1181280 were used. + ## Build args A good how-to on building Chromium from source is @@ -91,7 +96,7 @@ are created in x64 using cross-compiling. CentOS is not supported for building C - 8 CPU - 30GB memory - 80GB free space on disk (Try `ncdu /home` to see where space is used.) - - "Cloud API access scopes": must have **read / write** scope for the Storage API + - "Cloud API access scopes": must have **read / write** scope for the Storage API. Access scopes in the GCP VM instance needs to be set to allow full access to all Cloud APIs vs default access (this will return a 403 otherwise in the build.py script) 4. Install [Google Cloud SDK](https://cloud.google.com/sdk) locally to ssh into the GCP instance ## Artifacts @@ -101,8 +106,8 @@ The zip files and md5 files are copied to a **staging** bucket in GCP storage. To publish the built artifacts for bunding in Kibana, copy the files from the `headless_shell_staging` bucket to the `headless_shell` bucket. ``` -gsutil cp gs://headless_shell_staging/chromium-d163fd7-linux_arm64.md5 gs://headless_shell/ -gsutil cp gs://headless_shell_staging/chromium-d163fd7-linux_arm64.zip gs://headless_shell/ +gsutil cp gs://headless_shell_staging/chromium-67649b1-linux_arm64.md5 gs://headless_shell/ +gsutil cp gs://headless_shell_staging/chromium-67649b1-linux_arm64.zip gs://headless_shell/ ``` IMPORTANT: Do not replace builds in the `headless_shell` bucket that are referenced in an active Kibana branch. CI tests on that branch will fail since the archive checksum no longer matches the original version. diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts index f77b84ccfed28..ac1d9543b2b11 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/args.test.ts @@ -50,6 +50,6 @@ describe('headless webgl arm mac workaround', () => { // if you're updating this, then you're likely updating chromium // please double-check that the --use-angle flag is still needed for arm macs // instead of --use-angle you may need --enable-gpu - expect(getChromiumPackage().binaryChecksum).toBe('4cc4ee072b23e4a65e714ff543eea21b'); // just putting this here so that someone updating the chromium version will see this comment + expect(getChromiumPackage().binaryChecksum).toBe('361f7cbac5bcac1d9974a43e29bf4bf5'); // just putting this here so that someone updating the chromium version will see this comment }); }); diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts index 9556aa453f263..e9f7370b446d9 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/paths.ts @@ -44,10 +44,10 @@ export class ChromiumArchivePaths { platform: 'darwin', architecture: 'x64', archiveFilename: 'chrome-mac.zip', - archiveChecksum: '2ce969500158dd98e3ad4502dbb6b13c', - binaryChecksum: '9960dd00ab27b4e9ee1455692bb65701', + archiveChecksum: '086ffb9d1e248f41f1e385aaea1bb568', + binaryChecksum: '58ed6d2bba7773b85aaec1d78b9c1a7b', binaryRelativePath: 'chrome-mac/Chromium.app/Contents/MacOS/Chromium', - revision: 1121448, + revision: 1181205, location: 'common', archivePath: 'Mac', isPreInstalled: false, @@ -56,10 +56,10 @@ export class ChromiumArchivePaths { platform: 'darwin', architecture: 'arm64', archiveFilename: 'chrome-mac.zip', - archiveChecksum: 'a4fea96b155483e0617d909c9b2cb32a', - binaryChecksum: '4cc4ee072b23e4a65e714ff543eea21b', + archiveChecksum: 'f80b2cb14025e283a740836aa66e46d4', + binaryChecksum: '361f7cbac5bcac1d9974a43e29bf4bf5', binaryRelativePath: 'chrome-mac/Chromium.app/Contents/MacOS/Chromium', - revision: 1121443, + revision: 1181286, // 1181205 is not available for Mac_Arm location: 'common', archivePath: 'Mac_Arm', isPreInstalled: false, @@ -67,22 +67,22 @@ export class ChromiumArchivePaths { { platform: 'linux', architecture: 'x64', - archiveFilename: 'chromium-38c3182-locales-linux_x64.zip', - archiveChecksum: '9635c58ccd7a6260dcfc0be7fa1545f6', - binaryChecksum: '02b21e91e39eb9aa68bbb4fedfa73204', + archiveFilename: 'chromium-67649b1-locales-linux_x64.zip', + archiveChecksum: '21bd8a1e06f236fa405c74d92a7ccd63', + binaryChecksum: 'b75d45d3044cc320bb09ce7356003d24', binaryRelativePath: 'headless_shell-linux_x64/headless_shell', - revision: 1121455, + revision: 1181205, location: 'custom', isPreInstalled: true, }, { platform: 'linux', architecture: 'arm64', - archiveFilename: 'chromium-38c3182-locales-linux_arm64.zip', - archiveChecksum: '96dca82cccea6ae82aaf0bc46104a501', - binaryChecksum: '753e07c59b6f269b2f06091155d53f4b', + archiveFilename: 'chromium-67649b1-locales-linux_arm64.zip', + archiveChecksum: '0c3b42ada934258b4596f3e984d011e3', + binaryChecksum: 'ac521fbc52fb1589416a214ce7b299ee', binaryRelativePath: 'headless_shell-linux_arm64/headless_shell', - revision: 1121455, + revision: 1181205, location: 'custom', isPreInstalled: true, }, @@ -90,10 +90,10 @@ export class ChromiumArchivePaths { platform: 'win32', architecture: 'x64', archiveFilename: 'chrome-win.zip', - archiveChecksum: '76b6c8aa15f0b16df18f793c9953f59f', - binaryChecksum: '762fe3b0ffe86d525bb3ed91f870cb7a', + archiveChecksum: '08186d7494e75c2cca03270d9a4ff589', + binaryChecksum: '1623fed921c9acee7221b2de98abe54e', binaryRelativePath: path.join('chrome-win', 'chrome.exe'), - revision: 1121435, + revision: 1181280, // 1181205 is not available for win location: 'common', archivePath: 'Win', isPreInstalled: true, diff --git a/yarn.lock b/yarn.lock index 8efceaca77015..67674a57416ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7173,17 +7173,16 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@puppeteer/browsers@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.0.0.tgz#89de56a718c922857b1d802aac473ebbe1f54d99" - integrity sha512-YKecOIlwH0UsiM9zkKy31DYg11iD8NhOoQ7SQ4oCpwDSd1Ud31WYRoAldbVlVBj9b4hLJIXxn7XSnkH1ta1tpA== +"@puppeteer/browsers@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.7.1.tgz#04f1e3aec4b87f50a7acc8f64be2149bda014f0a" + integrity sha512-nIb8SOBgDEMFY2iS2MdnUZOg2ikcYchRrBoF+wtdjieRFKR2uGRipHY/oFLo+2N6anDualyClPzGywTHRGrLfw== dependencies: debug "4.3.4" extract-zip "2.0.1" - https-proxy-agent "5.0.1" progress "2.0.3" - proxy-from-env "1.1.0" - tar-fs "2.1.1" + proxy-agent "6.3.1" + tar-fs "3.0.4" unbzip2-stream "1.4.3" yargs "17.7.1" @@ -8360,6 +8359,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -10709,6 +10713,13 @@ agent-base@^7.0.2: dependencies: debug "^4.3.4" +agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + agentkeepalive@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.4.1.tgz#aa95aebc3a749bca5ed53e3880a09f5235b48f0c" @@ -11348,6 +11359,13 @@ ast-types@^0.13.2: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + ast-types@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" @@ -11526,6 +11544,11 @@ axobject-query@^3.1.1: dependencies: dequal "^2.0.3" +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + babel-jest@^29.6.1: version "29.6.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" @@ -11825,6 +11848,11 @@ basic-auth@^2.0.1: dependencies: safe-buffer "5.1.2" +basic-ftp@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228" + integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g== + batch-processor@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" @@ -12797,12 +12825,13 @@ chromedriver@^116.0.0: proxy-from-env "^1.1.0" tcp-port-used "^1.0.1" -chromium-bidi@0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.7.tgz#4c022c2b0fb1d1c9b571fadf373042160e71d236" - integrity sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ== +chromium-bidi@0.4.28: + version "0.4.28" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.28.tgz#05befef4f3f19003198237245780d1c60e6f4dbc" + integrity sha512-2HZ74QlAApJrEwcGlU/sUu0s4VS+FI3CJ09Toc9aE9VemMyhHZXeaROQgJKNRaYMUTUx6qIv1cLBs3F+vfgjSw== dependencies: - mitt "3.0.0" + mitt "3.0.1" + urlpattern-polyfill "9.0.0" ci-info@^2.0.0: version "2.0.0" @@ -13484,14 +13513,14 @@ core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" - integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== +cosmiconfig@8.3.6: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - import-fresh "^3.2.1" + import-fresh "^3.3.0" js-yaml "^4.1.0" - parse-json "^5.0.0" + parse-json "^5.2.0" path-type "^4.0.0" cosmiconfig@^6.0.0: @@ -13604,12 +13633,12 @@ cross-env@^6.0.3: dependencies: cross-spawn "^7.0.0" -cross-fetch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== +cross-fetch@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== dependencies: - node-fetch "2.6.7" + node-fetch "^2.6.12" cross-spawn@^6.0.0: version "6.0.5" @@ -14269,6 +14298,11 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== +data-uri-to-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c" + integrity sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg== + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -14558,6 +14592,15 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -14790,10 +14833,10 @@ detective@^5.0.2: defined "^1.0.0" minimist "^1.1.1" -devtools-protocol@0.0.1120988: - version "0.0.1120988" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz#8fe49088919ae3b8df7235774633763f1f925066" - integrity sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q== +devtools-protocol@0.0.1179426: + version "0.0.1179426" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1179426.tgz#c4c3ee671efae868395569123002facbbbffa267" + integrity sha512-KKC7IGwdOr7u9kTGgjUvGTov/z1s2H7oHi3zKCdR9eSDyCPia5CBi4aRhtp7d8uR7l0GS5UTDw3TjKGu5CqINg== dezalgo@^1.0.0: version "1.0.3" @@ -15799,6 +15842,17 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + escodegen@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.2.0.tgz#09de7967791cc958b7f89a2ddb6d23451af327e1" @@ -16501,6 +16555,11 @@ fast-fifo@^1.1.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== +fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -17182,6 +17241,15 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -17438,6 +17506,16 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-uri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c" + integrity sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^5.0.1" + debug "^4.3.4" + fs-extra "^8.1.0" + get-value@^2.0.2, get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -18470,6 +18548,14 @@ http-proxy-agent@^6.0.1: agent-base "^7.0.2" debug "^4.3.4" +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" @@ -18512,7 +18598,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -18528,6 +18614,14 @@ https-proxy-agent@^6.1.0: agent-base "^7.0.2" debug "4" +https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -18631,6 +18725,14 @@ import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-in-the-middle@1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz#2a266676e3495e72c04bbaa5ec14756ba168391b" @@ -18857,6 +18959,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + ip@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" @@ -21408,6 +21515,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + lru-cache@^7.7.1: version "7.14.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" @@ -22306,10 +22418,10 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" -mitt@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd" - integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ== +mitt@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== mixin-deep@^1.2.0: version "1.3.2" @@ -22765,6 +22877,11 @@ nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + next-line@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-line/-/next-line-1.1.0.tgz#fcae57853052b6a9bae8208e40dd7d3c2d304603" @@ -22865,13 +22982,6 @@ node-emoji@^1.10.0: dependencies: lodash.toarray "^4.4.0" -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^1.0.1, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.8" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" @@ -22879,6 +22989,13 @@ node-fetch@^1.0.1, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" @@ -23759,6 +23876,29 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75" + integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.2" + +pac-resolver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" + integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== + dependencies: + degenerator "^5.0.0" + ip "^1.1.8" + netmask "^2.0.2" + package-hash@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" @@ -24966,12 +25106,26 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-agent@6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.1.tgz#40e7b230552cf44fd23ffaf7c59024b692612687" + integrity sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= -proxy-from-env@1.1.0, proxy-from-env@^1.1.0: +proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== @@ -25063,34 +25217,26 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" -puppeteer-core@20.1.0: - version "20.1.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.1.0.tgz#c74e21ad642b0adb273da83b4bf444fdecc6500f" - integrity sha512-/xTvabzAN4mnnuYkJCuWNnnEhOb3JrBTa3sY6qVi1wybuIEk5ODRg8Z5PPiKUGiKC9iG7GWOJ5CjF3iuMuxZSA== +puppeteer-core@21.3.6: + version "21.3.6" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-21.3.6.tgz#5507fafb790692ff887e368de71a1c5a0d08af1e" + integrity sha512-ZH6tjTdRXwW2fx5W3jBbG+yUVQdDfZW1kjfwvWwMzsnKEli5ZwV70Zp97GOebHQHrK8zM3vX5VqI9sd48c9PnQ== dependencies: - "@puppeteer/browsers" "1.0.0" - chromium-bidi "0.4.7" - cross-fetch "3.1.5" + "@puppeteer/browsers" "1.7.1" + chromium-bidi "0.4.28" + cross-fetch "4.0.0" debug "4.3.4" - devtools-protocol "0.0.1120988" - extract-zip "2.0.1" - https-proxy-agent "5.0.1" - proxy-from-env "1.1.0" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.13.0" + devtools-protocol "0.0.1179426" + ws "8.14.2" -puppeteer@20.1.0: - version "20.1.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-20.1.0.tgz#30331e2729b235b3306a39cab3ad5b0cf2b90e7d" - integrity sha512-kZp1eYScK1IpHxkgnDaFSGKKCzt27iZfsxO6Xlv/cklzYrhobxTK9/PxzCacPCrYnxNQwKwHzHLPOCuSyjw1jg== +puppeteer@21.3.6: + version "21.3.6" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-21.3.6.tgz#961a44cd532ab5344ed53d7714aa56b4602ace10" + integrity sha512-ulK9+KLvdaVsG0EKbKyw/DCXCz88rsnrvIJg9tY8AmkGR01AxI4ZJTH9BJl1OE7cLfh2vxjBvY+xfvJod6rfgw== dependencies: - "@puppeteer/browsers" "1.0.0" - cosmiconfig "8.1.3" - https-proxy-agent "5.0.1" - progress "2.0.3" - proxy-from-env "1.1.0" - puppeteer-core "20.1.0" + "@puppeteer/browsers" "1.7.1" + cosmiconfig "8.3.6" + puppeteer-core "21.3.6" pure-rand@^6.0.0: version "6.0.2" @@ -27525,7 +27671,16 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.1, socks@^2.6.2: +socks-proxy-agent@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.6.1, socks@^2.6.2, socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -28058,6 +28213,14 @@ streamx@^2.12.0, streamx@^2.12.5, streamx@^2.13.2, streamx@^2.14.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" +streamx@^2.15.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.1.tgz#396ad286d8bc3eeef8f5cea3f029e81237c024c6" + integrity sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -28602,7 +28765,16 @@ tape@^5.0.1: string.prototype.trim "^1.2.1" through "^2.3.8" -tar-fs@2.1.1, tar-fs@^2.0.0, tar-fs@^2.1.1: +tar-fs@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + +tar-fs@^2.0.0, tar-fs@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== @@ -28623,6 +28795,15 @@ tar-stream@^2.1.4, tar-stream@^2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + tar@^6.0.2, tar@^6.1.11, tar@^6.1.15, tar@^6.1.2: version "6.1.15" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" @@ -29839,6 +30020,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +urlpattern-polyfill@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz#bc7e386bb12fd7898b58d1509df21d3c29ab3460" + integrity sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== + use-callback-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" @@ -31112,7 +31298,12 @@ write-file-atomic@^4.0.1, write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@8.13.0, ws@>=8.13.0: +ws@8.14.2: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + +ws@>=8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From f17b2ab8c0ee131179043b5ca704f45b086c220c Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 3 Oct 2023 17:01:37 -0600 Subject: [PATCH 036/170] =?UTF-8?q?unskip=20Failing=20test:=20Chrome=20X-P?= =?UTF-8?q?ack=20UI=20Functional=20Tests.x-pack/test/functional/apps/dashb?= =?UTF-8?q?oard/group1/preserve=5Furl=C2=B7ts=20(#167836)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes https://github.com/elastic/kibana/issues/166900 Flaky test runner https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3295 Flaky test because `await appsMenu.clickLink('Dashboard', { category: 'kibana' });` is opening dashboard application. Looking at the screen shot, kibana stays on home page. Looking at the logs, the context menu is opened and Dashboard link is clicked. PR resolves flakiness by adding retry around appsMenu.clickLink. Screenshot 2023-10-02 at 3 52 19 PM Screenshot 2023-10-02 at 3 52 42 PM --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- test/functional/page_objects/dashboard_page.ts | 12 ++++++++++++ .../functional/apps/dashboard/group1/preserve_url.ts | 12 +++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index 4798117f11687..6119a87c16a5f 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -43,6 +43,7 @@ export class DashboardPageObject extends FtrService { private readonly header = this.ctx.getPageObject('header'); private readonly visualize = this.ctx.getPageObject('visualize'); private readonly discover = this.ctx.getPageObject('discover'); + private readonly appsMenu = this.ctx.getService('appsMenu'); private readonly logstashIndex = this.config.get('esTestCluster.ccs') ? 'ftr-remote:logstash-*' @@ -65,6 +66,17 @@ export class DashboardPageObject extends FtrService { await this.common.navigateToApp(this.APP_ID); } + public async navigateToAppFromAppsMenu() { + await this.retry.try(async () => { + await this.appsMenu.clickLink('Dashboard', { category: 'kibana' }); + await this.header.waitUntilLoadingHasFinished(); + const currentUrl = await this.browser.getCurrentUrl(); + if (!currentUrl.includes('app/dashboard')) { + throw new Error(`Not in dashboard application after clicking 'Dashboard' in apps menu`); + } + }); + } + public async expectAppStateRemovedFromURL() { this.retry.try(async () => { const url = await this.browser.getCurrentUrl(); diff --git a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts index db9912be25625..cb5713e4d03ee 100644 --- a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts +++ b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts @@ -10,13 +10,11 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common', 'dashboard', 'spaceSelector', 'header']); - const appsMenu = getService('appsMenu'); const globalNav = getService('globalNav'); const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); - // Failing: See https://github.com/elastic/kibana/issues/166900 - describe.skip('preserve url', function () { + describe('preserve url', function () { const anotherSpace = 'another-space'; before(async () => { @@ -39,7 +37,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); await PageObjects.common.navigateToApp('home'); - await appsMenu.clickLink('Dashboard', { category: 'kibana' }); + await PageObjects.dashboard.navigateToAppFromAppsMenu(); await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); await PageObjects.header.waitUntilLoadingHasFinished(); const activeTitle = await globalNav.getLastBreadcrumb(); @@ -56,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.spaceSelector.expectHomePage('another-space'); // other space - await appsMenu.clickLink('Dashboard', { category: 'kibana' }); + await PageObjects.dashboard.navigateToAppFromAppsMenu(); await PageObjects.dashboard.loadSavedDashboard('A Dashboard in another space'); await PageObjects.spaceSelector.openSpacesNav(); @@ -64,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.spaceSelector.expectHomePage('default'); // default space - await appsMenu.clickLink('Dashboard', { category: 'kibana' }); + await PageObjects.dashboard.navigateToAppFromAppsMenu(); await PageObjects.dashboard.waitForRenderComplete(); const activeTitleDefaultSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleDefaultSpace).to.be('A Dashboard'); @@ -74,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.spaceSelector.expectHomePage('another-space'); // other space - await appsMenu.clickLink('Dashboard', { category: 'kibana' }); + await PageObjects.dashboard.navigateToAppFromAppsMenu(); await PageObjects.dashboard.waitForRenderComplete(); const activeTitleOtherSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleOtherSpace).to.be('A Dashboard in another space'); From ce5ae7d5628ff3c3598275a349940c310cba9c89 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Tue, 3 Oct 2023 16:52:07 -0700 Subject: [PATCH 037/170] [Security Solution] fix serverless metering tasks not registering (#167881) --- .../server/task_manager/task_state.ts | 35 +++++++++++++++++++ .../task_manager/usage_reporting_task.ts | 8 +++-- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 x-pack/plugins/security_solution_serverless/server/task_manager/task_state.ts diff --git a/x-pack/plugins/security_solution_serverless/server/task_manager/task_state.ts b/x-pack/plugins/security_solution_serverless/server/task_manager/task_state.ts new file mode 100644 index 0000000000000..dca03e31c5593 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/server/task_manager/task_state.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, type TypeOf } from '@kbn/config-schema'; + +/** + * WARNING: Do not modify the existing versioned schema(s) below, instead define a new version (ex: 2, 3, 4). + * This is required to support zero-downtime upgrades and rollbacks. See https://github.com/elastic/kibana/issues/155764. + * + * As you add a new schema version, don't forget to change latestTaskStateSchema variable to reference the latest schema. + * For example, changing stateSchemaByVersion[1].schema to stateSchemaByVersion[2].schema. + */ +export const stateSchemaByVersion = { + 1: { + // A task that was created < 8.10 will go through this "up" migration + // to ensure it matches the v1 schema. + up: (state: Record) => ({ + lastSuccessfulReport: state.lastSuccessfulReport || null, + }), + schema: schema.object({ + lastSuccessfulReport: schema.nullable(schema.string()), + }), + }, +}; + +const latestTaskStateSchema = stateSchemaByVersion[1].schema; +export type LatestTaskStateSchema = TypeOf; + +export const emptyState: LatestTaskStateSchema = { + lastSuccessfulReport: null, +}; diff --git a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts index a292d7646791d..2fa2f50f4b9d9 100644 --- a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts +++ b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.ts @@ -10,6 +10,7 @@ import type { CoreSetup, Logger } from '@kbn/core/server'; import type { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; import { throwUnrecoverableError } from '@kbn/task-manager-plugin/server'; + import { usageReportingService } from '../common/services'; import type { MeteringCallback, @@ -19,6 +20,8 @@ import type { } from '../types'; import type { ServerlessSecurityConfig } from '../config'; +import { stateSchemaByVersion, emptyState } from './task_state'; + const SCOPE = ['serverlessSecurity']; const TIMEOUT = '1m'; @@ -58,6 +61,7 @@ export class SecurityUsageReportingTask { [taskType]: { title: taskTitle, timeout: TIMEOUT, + stateSchemaByVersion, createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { return { run: async () => { @@ -94,9 +98,7 @@ export class SecurityUsageReportingTask { schedule: { interval, }, - state: { - lastSuccessfulReport: null, - }, + state: emptyState, params: { version: this.version }, }); } catch (e) { From e74e5e2bfccb03806871b66b83525096069270c4 Mon Sep 17 00:00:00 2001 From: Garrett Spong Date: Tue, 3 Oct 2023 17:53:46 -0600 Subject: [PATCH 038/170] [Security Solution][Elastic AI Assistant] Refactors Knowledge Base feature flag to UI feature toggle (#167935) ## Summary This PR refactors the `assistantLangChain` code feature flag introduced in https://github.com/elastic/kibana/pull/164908, to be a UI feature toggle that users can enable/disable via the `Knowledge Base` assistant advanced settings. Left image shows the feature disabled, and the right image shows the feature partly enabled. If ELSER is configured, the UI will attempt to install all resources automatically for a one-click UX, however if ELSER is not configured, or there are failures, the user can manually enable the Knowledge Base or ES|QL base documentation:

    Also, since this code feature flag was shared with the model evaluator experimental feature, a `modelEvaluatorEnabled` flag has been plumbed to fully decouple the two settings. Now _only the_ model evaluator is enabled when setting security Solution Advanced setting: ``` xpack.securitySolution.enableExperimental: ['assistantModelEvaluation'] ``` and the previous `assistantLangChain` code feature flag is now enabled by simply toggling on the Knowledge Base in the settings shown above. > [!NOTE] > Even if ELSER isn't configured, and the knowledge base/docs aren't setup, if the Knowledge Base is enabled, the LangChain code path will still be enabled as intended, but we can change this behavior if testing shows this is not ideal. ### 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)added to match the most common scenarios - [X] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) --- .../advanced_settings/advanced_settings.tsx | 193 ------------ .../advanced_settings/translations.ts | 79 ----- .../assistant/settings/assistant_settings.tsx | 39 ++- .../impl/assistant/settings/translations.ts | 6 +- .../use_settings_updater.tsx | 23 +- .../impl/assistant/types.ts | 4 + .../assistant/use_send_messages/index.tsx | 6 +- .../impl/assistant_context/constants.tsx | 7 + .../impl/assistant_context/index.test.tsx | 1 - .../impl/assistant_context/index.tsx | 28 +- .../knowledge_base_settings.tsx | 294 ++++++++++++++++++ .../knowledge_base_settings/translations.ts | 109 +++++++ .../mock/test_providers/test_providers.tsx | 1 - .../mock/test_providers/test_providers.tsx | 1 - .../public/assistant/provider.tsx | 4 +- .../common/mock/mock_assistant_provider.tsx | 1 - 16 files changed, 487 insertions(+), 309 deletions(-) delete mode 100644 x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/advanced_settings.tsx delete mode 100644 x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/translations.ts create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/knowledge_base_settings.tsx create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/translations.ts diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/advanced_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/advanced_settings.tsx deleted file mode 100644 index 4474973b3ce62..0000000000000 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/advanced_settings.tsx +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useMemo, useState } from 'react'; -import { - EuiFormRow, - EuiTitle, - EuiText, - EuiTextColor, - EuiHorizontalRule, - EuiLoadingSpinner, - EuiSpacer, - EuiSwitch, - EuiToolTip, - EuiSwitchEvent, - EuiLink, -} from '@elastic/eui'; - -import { FormattedMessage } from '@kbn/i18n-react'; -import * as i18n from './translations'; -import { useKnowledgeBaseStatus } from '../../../knowledge_base/use_knowledge_base_status/use_knowledge_base_status'; -import { useAssistantContext } from '../../../assistant_context'; -import { useSetupKnowledgeBase } from '../../../knowledge_base/use_setup_knowledge_base/use_setup_knowledge_base'; -import { useDeleteKnowledgeBase } from '../../../knowledge_base/use_delete_knowledge_base/use_delete_knowledge_base'; - -const ESQL_RESOURCE = 'esql'; -interface Props { - onAdvancedSettingsChange?: () => void; -} - -/** - * Advanced Settings -- enable and disable LangChain integration, Knowledge Base, and ESQL KB Documents - */ -export const AdvancedSettings: React.FC = React.memo(({ onAdvancedSettingsChange }) => { - const { http, assistantLangChain } = useAssistantContext(); - const { - data: kbStatus, - isLoading, - isFetching, - } = useKnowledgeBaseStatus({ http, resource: ESQL_RESOURCE }); - const { mutate: setupKB, isLoading: isSettingUpKB } = useSetupKnowledgeBase({ http }); - const { mutate: deleteKB, isLoading: isDeletingUpKB } = useDeleteKnowledgeBase({ http }); - - const [isLangChainEnabled, setIsLangChainEnabled] = useState(assistantLangChain); - const isKnowledgeBaseEnabled = - (kbStatus?.index_exists && kbStatus?.pipeline_exists && kbStatus?.elser_exists) ?? false; - const isESQLEnabled = kbStatus?.esql_exists ?? false; - - const isLoadingKb = isLoading || isFetching || isSettingUpKB || isDeletingUpKB; - const isKnowledgeBaseAvailable = isLangChainEnabled && kbStatus?.elser_exists; - const isESQLAvailable = isLangChainEnabled && isKnowledgeBaseAvailable && isKnowledgeBaseEnabled; - - const onEnableKnowledgeBaseChange = useCallback( - (event: EuiSwitchEvent) => { - if (event.target.checked) { - setupKB(); - } else { - deleteKB(); - } - }, - [deleteKB, setupKB] - ); - - const onEnableESQLChange = useCallback( - (event: EuiSwitchEvent) => { - if (event.target.checked) { - setupKB(ESQL_RESOURCE); - } else { - deleteKB(ESQL_RESOURCE); - } - }, - [deleteKB, setupKB] - ); - - const langchainSwitch = useMemo(() => { - return ( - setIsLangChainEnabled(!isLangChainEnabled)} - showLabel={false} - /> - ); - }, [isLangChainEnabled]); - - const knowledgeBaseSwitch = useMemo(() => { - return isLoadingKb ? ( - - ) : ( - - - - ); - }, [isLoadingKb, isKnowledgeBaseAvailable, isKnowledgeBaseEnabled, onEnableKnowledgeBaseChange]); - - const esqlSwitch = useMemo(() => { - return isLoadingKb ? ( - - ) : ( - - - - ); - }, [isLoadingKb, isESQLAvailable, isESQLEnabled, onEnableESQLChange]); - - return ( - <> - -

    {i18n.SETTINGS_TITLE}

    -
    - - - {i18n.SETTINGS_DESCRIPTION} - - - - - {langchainSwitch} - - - {i18n.LANNGCHAIN_DESCRIPTION} - - - - {knowledgeBaseSwitch} - - - - - {i18n.KNOWLEDGE_BASE_DESCRIPTION_ELSER_LEARN_MORE} - - ), - }} - /> - - - - - {esqlSwitch} - - - {i18n.ESQL_DESCRIPTION} - - - ); -}); - -AdvancedSettings.displayName = 'AdvancedSettings'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/translations.ts deleted file mode 100644 index ca849f0a6f7c5..0000000000000 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/advanced_settings/translations.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const SETTINGS_TITLE = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.settingsTitle', - { - defaultMessage: 'Advanced Settings', - } -); -export const SETTINGS_DESCRIPTION = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.settingsDescription', - { - defaultMessage: 'Additional knobs and dials for the Elastic AI Assistant.', - } -); - -export const LANNGCHAIN_LABEL = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.langChainLabel', - { - defaultMessage: 'Experimental LangChain Integration', - } -); - -export const LANNGCHAIN_DESCRIPTION = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.langChainDescription', - { - defaultMessage: - 'Enables advanced features and workflows like the Knowledge Base, Functions, Memories, and advanced agent and chain configurations. ', - } -); - -export const KNOWLEDGE_BASE_LABEL = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.knowledgeBaseLabel', - { - defaultMessage: 'Knowledge Base', - } -); - -export const KNOWLEDGE_BASE_LABEL_TOOLTIP = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.knowledgeBaseLabelTooltip', - { - defaultMessage: 'Requires ELSER to be configured and started.', - } -); - -export const KNOWLEDGE_BASE_DESCRIPTION_ELSER_LEARN_MORE = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.knowledgeBaseElserLearnMoreDescription', - { - defaultMessage: 'Learn more.', - } -); - -export const ESQL_LABEL = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.esqlLabel', - { - defaultMessage: 'ES|QL Knowledge Base Documents', - } -); - -export const ESQL_LABEL_TOOLTIP = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.esqlTooltip', - { - defaultMessage: 'Requires `Knowledge Base` to be enabled.', - } -); - -export const ESQL_DESCRIPTION = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.advancedSettings.esqlDescription', - { - defaultMessage: - 'Loads ES|QL documentation and language files into the Knowledge Base for use in generating ES|QL queries.', - } -); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx index caf8fa77a9b61..5b357fb6594cc 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx @@ -30,7 +30,7 @@ import { useAssistantContext } from '../../assistant_context'; import { AnonymizationSettings } from '../../data_anonymization/settings/anonymization_settings'; import { QuickPromptSettings } from '../quick_prompts/quick_prompt_settings/quick_prompt_settings'; import { SystemPromptSettings } from '../prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings'; -import { AdvancedSettings } from './advanced_settings/advanced_settings'; +import { KnowledgeBaseSettings } from '../../knowledge_base/knowledge_base_settings/knowledge_base_settings'; import { ConversationSettings } from '../conversations/conversation_settings/conversation_settings'; import { TEST_IDS } from '../constants'; import { useSettingsUpdater } from './use_settings_updater/use_settings_updater'; @@ -45,7 +45,7 @@ export const CONVERSATIONS_TAB = 'CONVERSATION_TAB' as const; export const QUICK_PROMPTS_TAB = 'QUICK_PROMPTS_TAB' as const; export const SYSTEM_PROMPTS_TAB = 'SYSTEM_PROMPTS_TAB' as const; export const ANONYMIZATION_TAB = 'ANONYMIZATION_TAB' as const; -export const ADVANCED_TAB = 'ADVANCED_TAB' as const; +export const KNOWLEDGE_BASE_TAB = 'KNOWLEDGE_BASE_TAB' as const; export const EVALUATION_TAB = 'EVALUATION_TAB' as const; export type SettingsTabs = @@ -53,7 +53,7 @@ export type SettingsTabs = | typeof QUICK_PROMPTS_TAB | typeof SYSTEM_PROMPTS_TAB | typeof ANONYMIZATION_TAB - | typeof ADVANCED_TAB + | typeof KNOWLEDGE_BASE_TAB | typeof EVALUATION_TAB; interface Props { defaultConnectorId?: string; @@ -68,7 +68,7 @@ interface Props { /** * Modal for overall Assistant Settings, including conversation settings, quick prompts, system prompts, - * anonymization, functions (coming soon!), and advanced settings. + * anonymization, knowledge base, and evaluation via the `isModelEvaluationEnabled` feature flag. */ export const AssistantSettings: React.FC = React.memo( ({ @@ -79,17 +79,19 @@ export const AssistantSettings: React.FC = React.memo( selectedConversation: defaultSelectedConversation, setSelectedConversationId, }) => { - const { assistantLangChain, http, selectedSettingsTab, setSelectedSettingsTab } = + const { modelEvaluatorEnabled, http, selectedSettingsTab, setSelectedSettingsTab } = useAssistantContext(); const { conversationSettings, defaultAllow, defaultAllowReplacement, + knowledgeBase, quickPromptSettings, systemPromptSettings, setUpdatedConversationSettings, setUpdatedDefaultAllow, setUpdatedDefaultAllowReplacement, + setUpdatedKnowledgeBaseSettings, setUpdatedQuickPromptSettings, setUpdatedSystemPromptSettings, saveSettings, @@ -236,17 +238,15 @@ export const AssistantSettings: React.FC = React.memo( > - {assistantLangChain && ( - setSelectedSettingsTab(ADVANCED_TAB)} - > - - - )} - {assistantLangChain && ( + setSelectedSettingsTab(KNOWLEDGE_BASE_TAB)} + > + + + {modelEvaluatorEnabled && ( = React.memo( setUpdatedDefaultAllowReplacement={setUpdatedDefaultAllowReplacement} /> )} - {selectedSettingsTab === ADVANCED_TAB && } + {selectedSettingsTab === KNOWLEDGE_BASE_TAB && ( + + )} {selectedSettingsTab === EVALUATION_TAB && } void; systemPromptSettings: Prompt[]; @@ -21,6 +23,7 @@ interface UseSettingsUpdater { setUpdatedConversationSettings: React.Dispatch< React.SetStateAction >; + setUpdatedKnowledgeBaseSettings: React.Dispatch>; setUpdatedQuickPromptSettings: React.Dispatch>; setUpdatedSystemPromptSettings: React.Dispatch>; saveSettings: () => void; @@ -34,11 +37,13 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { conversations, defaultAllow, defaultAllowReplacement, + knowledgeBase, setAllQuickPrompts, setAllSystemPrompts, setConversations, setDefaultAllow, setDefaultAllowReplacement, + setKnowledgeBase, } = useAssistantContext(); /** @@ -57,6 +62,9 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { const [updatedDefaultAllow, setUpdatedDefaultAllow] = useState(defaultAllow); const [updatedDefaultAllowReplacement, setUpdatedDefaultAllowReplacement] = useState(defaultAllowReplacement); + // Knowledge Base + const [updatedKnowledgeBaseSettings, setUpdatedKnowledgeBaseSettings] = + useState(knowledgeBase); /** * Reset all pending settings @@ -64,10 +72,18 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { const resetSettings = useCallback((): void => { setUpdatedConversationSettings(conversations); setUpdatedQuickPromptSettings(allQuickPrompts); + setUpdatedKnowledgeBaseSettings(knowledgeBase); setUpdatedSystemPromptSettings(allSystemPrompts); setUpdatedDefaultAllow(defaultAllow); setUpdatedDefaultAllowReplacement(defaultAllowReplacement); - }, [allQuickPrompts, allSystemPrompts, conversations, defaultAllow, defaultAllowReplacement]); + }, [ + allQuickPrompts, + allSystemPrompts, + conversations, + defaultAllow, + defaultAllowReplacement, + knowledgeBase, + ]); /** * Save all pending settings @@ -76,6 +92,7 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { setAllQuickPrompts(updatedQuickPromptSettings); setAllSystemPrompts(updatedSystemPromptSettings); setConversations(updatedConversationSettings); + setKnowledgeBase(updatedKnowledgeBaseSettings); setDefaultAllow(updatedDefaultAllow); setDefaultAllowReplacement(updatedDefaultAllowReplacement); }, [ @@ -84,9 +101,11 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { setConversations, setDefaultAllow, setDefaultAllowReplacement, + setKnowledgeBase, updatedConversationSettings, updatedDefaultAllow, updatedDefaultAllowReplacement, + updatedKnowledgeBaseSettings, updatedQuickPromptSettings, updatedSystemPromptSettings, ]); @@ -95,6 +114,7 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { conversationSettings: updatedConversationSettings, defaultAllow: updatedDefaultAllow, defaultAllowReplacement: updatedDefaultAllowReplacement, + knowledgeBase: updatedKnowledgeBaseSettings, quickPromptSettings: updatedQuickPromptSettings, resetSettings, systemPromptSettings: updatedSystemPromptSettings, @@ -102,6 +122,7 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { setUpdatedDefaultAllow, setUpdatedDefaultAllowReplacement, setUpdatedConversationSettings, + setUpdatedKnowledgeBaseSettings, setUpdatedQuickPromptSettings, setUpdatedSystemPromptSettings, }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts index dd5d184abfd20..e9ffd8f8014e8 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts @@ -15,3 +15,7 @@ export interface Prompt { isDefault?: boolean; // TODO: Should be renamed to isImmutable as this flag is used to prevent users from deleting prompts isNewConversationDefault?: boolean; } + +export interface KnowledgeBaseConfig { + assistantLangChain: boolean; +} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx index 38dc60c5fc9e7..f9f63aa8ef8ac 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx @@ -29,7 +29,7 @@ interface UseSendMessages { } export const useSendMessages = (): UseSendMessages => { - const { assistantLangChain } = useAssistantContext(); + const { knowledgeBase } = useAssistantContext(); const [isLoading, setIsLoading] = useState(false); const sendMessages = useCallback( @@ -37,7 +37,7 @@ export const useSendMessages = (): UseSendMessages => { setIsLoading(true); try { return await fetchConnectorExecuteAction({ - assistantLangChain, + assistantLangChain: knowledgeBase.assistantLangChain, http, messages, apiConfig, @@ -46,7 +46,7 @@ export const useSendMessages = (): UseSendMessages => { setIsLoading(false); } }, - [assistantLangChain] + [knowledgeBase.assistantLangChain] ); return { isLoading, sendMessages }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx index cad3783c4669b..fbf1f68e05e0d 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx @@ -5,7 +5,14 @@ * 2.0. */ +import { KnowledgeBaseConfig } from '../assistant/types'; + export const DEFAULT_ASSISTANT_NAMESPACE = 'elasticAssistantDefault'; export const QUICK_PROMPT_LOCAL_STORAGE_KEY = 'quickPrompts'; export const SYSTEM_PROMPT_LOCAL_STORAGE_KEY = 'systemPrompts'; export const LAST_CONVERSATION_ID_LOCAL_STORAGE_KEY = 'lastConversationId'; +export const KNOWLEDGE_BASE_LOCAL_STORAGE_KEY = 'knowledgeBase'; + +export const DEFAULT_KNOWLEDGE_BASE_SETTINGS: KnowledgeBaseConfig = { + assistantLangChain: false, +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx index 89d3e4c6e8878..7e50643ae7595 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx @@ -28,7 +28,6 @@ const ContextWrapper: React.FC = ({ children }) => ( CodeBlockDetails[][]; baseAllow: string[]; @@ -73,6 +74,7 @@ export interface AssistantProviderProps { }) => EuiCommentProps[]; http: HttpSetup; getInitialConversations: () => Record; + modelEvaluatorEnabled?: boolean; nameSpace?: string; setConversations: React.Dispatch>>; setDefaultAllow: React.Dispatch>; @@ -87,7 +89,6 @@ export interface UseAssistantContext { augmentMessageCodeBlocks: (currentConversation: Conversation) => CodeBlockDetails[][]; allQuickPrompts: QuickPrompt[]; allSystemPrompts: Prompt[]; - assistantLangChain: boolean; baseAllow: string[]; baseAllowReplacement: string[]; docLinks: Omit; @@ -110,8 +111,10 @@ export interface UseAssistantContext { showAnonymizedValues: boolean; }) => EuiCommentProps[]; http: HttpSetup; + knowledgeBase: KnowledgeBaseConfig; localStorageLastConversationId: string | undefined; promptContexts: Record; + modelEvaluatorEnabled: boolean; nameSpace: string; registerPromptContext: RegisterPromptContext; selectedSettingsTab: SettingsTabs; @@ -120,6 +123,7 @@ export interface UseAssistantContext { setConversations: React.Dispatch>>; setDefaultAllow: React.Dispatch>; setDefaultAllowReplacement: React.Dispatch>; + setKnowledgeBase: React.Dispatch>; setLastConversationId: React.Dispatch>; setSelectedSettingsTab: React.Dispatch>; setShowAssistantOverlay: (showAssistantOverlay: ShowAssistantOverlay) => void; @@ -133,7 +137,6 @@ const AssistantContext = React.createContext(un export const AssistantProvider: React.FC = ({ actionTypeRegistry, assistantAvailability, - assistantLangChain, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, @@ -149,6 +152,7 @@ export const AssistantProvider: React.FC = ({ getComments, http, getInitialConversations, + modelEvaluatorEnabled = false, nameSpace = DEFAULT_ASSISTANT_NAMESPACE, setConversations, setDefaultAllow, @@ -174,6 +178,14 @@ export const AssistantProvider: React.FC = ({ const [localStorageLastConversationId, setLocalStorageLastConversationId] = useLocalStorage(`${nameSpace}.${LAST_CONVERSATION_ID_LOCAL_STORAGE_KEY}`); + /** + * Local storage for knowledge base configuration, prefixed by assistant nameSpace + */ + const [localStorageKnowledgeBase, setLocalStorageKnowledgeBase] = useLocalStorage( + `${nameSpace}.${KNOWLEDGE_BASE_LOCAL_STORAGE_KEY}`, + DEFAULT_KNOWLEDGE_BASE_SETTINGS + ); + /** * Prompt contexts are used to provide components a way to register and make their data available to the assistant. */ @@ -254,7 +266,6 @@ export const AssistantProvider: React.FC = ({ () => ({ actionTypeRegistry, assistantAvailability, - assistantLangChain, assistantTelemetry, augmentMessageCodeBlocks, allQuickPrompts: localStorageQuickPrompts ?? [], @@ -272,6 +283,8 @@ export const AssistantProvider: React.FC = ({ docLinks, getComments, http, + knowledgeBase: localStorageKnowledgeBase ?? DEFAULT_KNOWLEDGE_BASE_SETTINGS, + modelEvaluatorEnabled, promptContexts, nameSpace, registerPromptContext, @@ -281,6 +294,7 @@ export const AssistantProvider: React.FC = ({ setConversations: onConversationsUpdated, setDefaultAllow, setDefaultAllowReplacement, + setKnowledgeBase: setLocalStorageKnowledgeBase, setSelectedSettingsTab, setShowAssistantOverlay, showAssistantOverlay, @@ -292,7 +306,6 @@ export const AssistantProvider: React.FC = ({ [ actionTypeRegistry, assistantAvailability, - assistantLangChain, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, @@ -308,9 +321,11 @@ export const AssistantProvider: React.FC = ({ docLinks, getComments, http, + localStorageKnowledgeBase, localStorageLastConversationId, localStorageQuickPrompts, localStorageSystemPrompts, + modelEvaluatorEnabled, nameSpace, onConversationsUpdated, promptContexts, @@ -318,6 +333,7 @@ export const AssistantProvider: React.FC = ({ selectedSettingsTab, setDefaultAllow, setDefaultAllowReplacement, + setLocalStorageKnowledgeBase, setLocalStorageLastConversationId, setLocalStorageQuickPrompts, setLocalStorageSystemPrompts, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/knowledge_base_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/knowledge_base_settings.tsx new file mode 100644 index 0000000000000..2c667a5739ef6 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/knowledge_base_settings.tsx @@ -0,0 +1,294 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { + EuiFormRow, + EuiTitle, + EuiText, + EuiHorizontalRule, + EuiLoadingSpinner, + EuiSpacer, + EuiSwitchEvent, + EuiLink, + EuiBetaBadge, + EuiFlexGroup, + EuiFlexItem, + EuiHealth, + EuiButtonEmpty, + EuiSwitch, +} from '@elastic/eui'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; +import * as i18n from './translations'; +import { useAssistantContext } from '../../assistant_context'; +import { useDeleteKnowledgeBase } from '../use_delete_knowledge_base/use_delete_knowledge_base'; +import { useKnowledgeBaseStatus } from '../use_knowledge_base_status/use_knowledge_base_status'; +import { useSetupKnowledgeBase } from '../use_setup_knowledge_base/use_setup_knowledge_base'; + +import type { KnowledgeBaseConfig } from '../../assistant/types'; + +const ESQL_RESOURCE = 'esql'; +const KNOWLEDGE_BASE_INDEX_PATTERN = '.kibana-elastic-ai-assistant-kb'; + +interface Props { + knowledgeBase: KnowledgeBaseConfig; + setUpdatedKnowledgeBaseSettings: React.Dispatch>; +} + +/** + * Knowledge Base Settings -- enable and disable LangChain integration, Knowledge Base, and ESQL KB Documents + */ +export const KnowledgeBaseSettings: React.FC = React.memo( + ({ knowledgeBase, setUpdatedKnowledgeBaseSettings }) => { + const { http } = useAssistantContext(); + const { + data: kbStatus, + isLoading, + isFetching, + } = useKnowledgeBaseStatus({ http, resource: ESQL_RESOURCE }); + const { mutate: setupKB, isLoading: isSettingUpKB } = useSetupKnowledgeBase({ http }); + const { mutate: deleteKB, isLoading: isDeletingUpKB } = useDeleteKnowledgeBase({ http }); + + // Resource enabled state + const isKnowledgeBaseEnabled = + (kbStatus?.index_exists && kbStatus?.pipeline_exists && kbStatus?.elser_exists) ?? false; + const isESQLEnabled = kbStatus?.esql_exists ?? false; + + // Resource availability state + const isLoadingKb = isLoading || isFetching || isSettingUpKB || isDeletingUpKB; + const isKnowledgeBaseAvailable = knowledgeBase.assistantLangChain && kbStatus?.elser_exists; + const isESQLAvailable = + knowledgeBase.assistantLangChain && isKnowledgeBaseAvailable && isKnowledgeBaseEnabled; + + // Calculated health state for EuiHealth component + const elserHealth = kbStatus?.elser_exists ? 'success' : 'subdued'; + const knowledgeBaseHealth = isKnowledgeBaseEnabled ? 'success' : 'subdued'; + const esqlHealth = isESQLEnabled ? 'success' : 'subdued'; + + ////////////////////////////////////////////////////////////////////////////////////////// + // Main `Knowledge Base` switch, which toggles the `assistantLangChain` UI feature toggle + // setting that is saved to localstorage + const onEnableAssistantLangChainChange = useCallback( + (event: EuiSwitchEvent) => { + setUpdatedKnowledgeBaseSettings({ + ...knowledgeBase, + assistantLangChain: event.target.checked, + }); + + // If enabling and ELSER exists, try to set up automatically + if (event.target.checked && kbStatus?.elser_exists) { + setupKB(ESQL_RESOURCE); + } + }, + [kbStatus?.elser_exists, knowledgeBase, setUpdatedKnowledgeBaseSettings, setupKB] + ); + + const assistantLangChainSwitch = useMemo(() => { + return isLoadingKb ? ( + + ) : ( + + ); + }, [isLoadingKb, knowledgeBase.assistantLangChain, onEnableAssistantLangChainChange]); + + ////////////////////////////////////////////////////////////////////////////////////////// + // Knowledge Base Resource + const onEnableKB = useCallback( + (enabled: boolean) => { + if (enabled) { + setupKB(); + } else { + deleteKB(); + } + }, + [deleteKB, setupKB] + ); + + const knowledgeBaseActionButton = useMemo(() => { + return isLoadingKb || !isKnowledgeBaseAvailable ? ( + <> + ) : ( + onEnableKB(!isKnowledgeBaseEnabled)} + size="xs" + > + {isKnowledgeBaseEnabled + ? i18n.KNOWLEDGE_BASE_DELETE_BUTTON + : i18n.KNOWLEDGE_BASE_INIT_BUTTON} + + ); + }, [isKnowledgeBaseAvailable, isKnowledgeBaseEnabled, isLoadingKb, onEnableKB]); + + const knowledgeBaseDescription = useMemo(() => { + return isKnowledgeBaseEnabled ? ( + <> + {i18n.KNOWLEDGE_BASE_DESCRIPTION_INSTALLED(KNOWLEDGE_BASE_INDEX_PATTERN)}{' '} + {knowledgeBaseActionButton} + + ) : ( + <> + {i18n.KNOWLEDGE_BASE_DESCRIPTION} {knowledgeBaseActionButton} + + ); + }, [isKnowledgeBaseEnabled, knowledgeBaseActionButton]); + + ////////////////////////////////////////////////////////////////////////////////////////// + // ESQL Resource + const onEnableESQL = useCallback( + (enabled: boolean) => { + if (enabled) { + setupKB(ESQL_RESOURCE); + } else { + deleteKB(ESQL_RESOURCE); + } + }, + [deleteKB, setupKB] + ); + + const esqlActionButton = useMemo(() => { + return isLoadingKb || !isESQLAvailable ? ( + <> + ) : ( + onEnableESQL(!isESQLEnabled)} + size="xs" + > + {isESQLEnabled ? i18n.KNOWLEDGE_BASE_DELETE_BUTTON : i18n.KNOWLEDGE_BASE_INIT_BUTTON} + + ); + }, [isLoadingKb, isESQLAvailable, isESQLEnabled, onEnableESQL]); + + const esqlDescription = useMemo(() => { + return isESQLEnabled ? ( + <> + {i18n.ESQL_DESCRIPTION_INSTALLED} {esqlActionButton} + + ) : ( + <> + {i18n.ESQL_DESCRIPTION} {esqlActionButton} + + ); + }, [esqlActionButton, isESQLEnabled]); + + return ( + <> + +

    + {i18n.SETTINGS_TITLE}{' '} + +

    +
    + + {i18n.SETTINGS_DESCRIPTION} + + + + {assistantLangChainSwitch} + + + + + +
    + {i18n.KNOWLEDGE_BASE_ELSER_LABEL} + + + {i18n.KNOWLEDGE_BASE_ELSER_MACHINE_LEARNING} + + ), + seeDocs: ( + + {i18n.KNOWLEDGE_BASE_ELSER_SEE_DOCS} + + ), + }} + /> + +
    +
    + +
    + {i18n.KNOWLEDGE_BASE_LABEL} + + {knowledgeBaseDescription} + +
    +
    + + + {i18n.ESQL_LABEL} + + {esqlDescription} + + + +
    + + ); + } +); + +KnowledgeBaseSettings.displayName = 'KnowledgeBaseSettings'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/translations.ts new file mode 100644 index 0000000000000..95417ddf6a889 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings/translations.ts @@ -0,0 +1,109 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const SETTINGS_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.settingsTitle', + { + defaultMessage: 'Knowledge Base', + } +); + +export const SETTINGS_BADGE = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.settingsBadgeTitle', + { + defaultMessage: 'Experimental', + } +); + +export const SETTINGS_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.settingsDescription', + { + defaultMessage: + 'Powered by ELSER, the Knowledge Base enables the ability to recall documents and other relevant context within your conversation.', + } +); + +export const KNOWLEDGE_BASE_LABEL = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.knowledgeBaseLabel', + { + defaultMessage: 'Knowledge Base', + } +); + +export const KNOWLEDGE_BASE_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.knowledgeBaseDescription', + { + defaultMessage: 'Index where Knowledge Base docs are stored', + } +); + +export const KNOWLEDGE_BASE_DESCRIPTION_INSTALLED = (kbIndexPattern: string) => + i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.knowledgeBaseInstalledDescription', + { + defaultMessage: 'Initialized to `{kbIndexPattern}`', + values: { kbIndexPattern }, + } + ); + +export const KNOWLEDGE_BASE_INIT_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.initializeKnowledgeBaseButton', + { + defaultMessage: 'Initialize', + } +); + +export const KNOWLEDGE_BASE_DELETE_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.deleteKnowledgeBaseButton', + { + defaultMessage: 'Delete', + } +); + +export const KNOWLEDGE_BASE_ELSER_LABEL = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.elserLabel', + { + defaultMessage: 'ELSER Configured', + } +); + +export const KNOWLEDGE_BASE_ELSER_MACHINE_LEARNING = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.elserMachineLearningDescription', + { + defaultMessage: 'Machine Learning', + } +); + +export const KNOWLEDGE_BASE_ELSER_SEE_DOCS = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.elserSeeDocsDescription', + { + defaultMessage: 'See docs', + } +); + +export const ESQL_LABEL = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.esqlLabel', + { + defaultMessage: 'ES|QL Knowledge Base Documents', + } +); + +export const ESQL_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.esqlDescription', + { + defaultMessage: 'Knowledge Base docs for generating ES|QL queries', + } +); + +export const ESQL_DESCRIPTION_INSTALLED = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.esqlInstalledDescription', + { + defaultMessage: 'ES|QL Knowledge Base docs loaded', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx index 53a73ec16b661..024e39ac46c3c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx @@ -72,7 +72,6 @@ export const TestProvidersComponent: React.FC = ({ = ({ children, isILMAvailab { actionTypeRegistry={actionTypeRegistry} augmentMessageCodeBlocks={augmentMessageCodeBlocks} assistantAvailability={assistantAvailability} - // NOTE: `assistantLangChain` and `assistantModelEvaluation` experimental feature will be coupled until upcoming - // Knowledge Base UI updates, which will remove the `assistantLangChain` feature flag in favor of a UI feature toggle - assistantLangChain={isModelEvaluationEnabled} assistantTelemetry={assistantTelemetry} defaultAllow={defaultAllow} defaultAllowReplacement={defaultAllowReplacement} @@ -71,6 +68,7 @@ export const AssistantProvider: React.FC = ({ children }) => { getInitialConversations={getInitialConversation} getComments={getComments} http={http} + modelEvaluatorEnabled={isModelEvaluationEnabled} nameSpace={nameSpace} setConversations={setConversations} setDefaultAllow={setDefaultAllow} diff --git a/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx b/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx index 2954f47e0d1a8..4dc5f01b0ee7d 100644 --- a/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx +++ b/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx @@ -34,7 +34,6 @@ export const MockAssistantProviderComponent: React.FC = ({ children }) => [])} baseAllow={[]} baseAllowReplacement={[]} From 5b1ae6683f34087836868fd2daca7cb22c0daaea Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Tue, 3 Oct 2023 19:47:07 -0500 Subject: [PATCH 039/170] [RAM] Add bulk action to Untrack selected alerts (#167579) ## Summary Part of #164059 Screenshot 2023-09-28 at 5 38 45 PM Screenshot 2023-09-28 at 5 38 11 PM This PR: - Moves the `setAlertStatusToUntracked` function from the `AlertsClient` into the `AlertsService`. This function doesn't actually need any Rule IDs to do what it's supposed to do, only indices and Alert UUIDs. Therefore, we want to make it possible to use outside of a created `AlertsClient`, which requires a Rule to initialize. - Creates a versioned internal API to bulk untrack a given set of `alertUuids` present on `indices`. Both of these pieces of information are readily available from the ECS fields sent to the alert table component, from where this bulk action will be called. - Switches the `setAlertStatusToUntracked` query to look for alert UUIDs instead of alert instance IDs. https://github.com/elastic/kibana/pull/164788 dealt with untracking alerts that were bound to a single rule at a time, but this PR could be untracking alerts generated by many different rules at once. Multiple rules may generate the same alert instance ID names with different UUIDs, so using UUID increases the specificity and prevents us from untracking alert instances that the user didn't intend. - Adds a `bulkUpdateState` method to the task scheduler. https://github.com/elastic/kibana/pull/164788 modified the `bulkDisable` method to clear untracked alerts from task states, but this new method allows us to untrack a given set of alert instances without disabling the task that generated them. #### Why omit rule ID from this API? The rule ID is technically readily available from the alert table, but it becomes redundant when we already have immediate access to the alert document's index. https://github.com/elastic/kibana/pull/164788 used the rule ID to get the `ruleTypeId` and turn this into a corresponding index, which we don't have to do anymore. Furthermore, it helps to omit the rule ID from the `updateByQuery` request, because the user can easily select alerts that were generated by a wide variety of different rules, and untrack them all at once. We could include the rule ID in a separate `should` query, but this adds needless complexity to the query. We do need to know the rule ID after performing `updateByQuery`, because it corresponds to the task state we want to modify, but it's easier to retrieve this using the same query params provided. ### 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) - [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: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Jiawei Wu Co-authored-by: Xavier Mouligneau --- .../routes/rule/apis/bulk_untrack/index.ts | 12 + .../rule/apis/bulk_untrack/schemas/latest.ts | 7 + .../rule/apis/bulk_untrack/schemas/v1.ts | 13 + .../rule/apis/bulk_untrack/types/latest.ts | 8 + .../routes/rule/apis/bulk_untrack/types/v1.ts | 10 + .../alerts_client/alerts_client.test.ts | 47 --- .../server/alerts_client/alerts_client.ts | 62 +--- .../alerting/server/alerts_client/types.ts | 1 - .../alerts_service/alerts_service.mock.ts | 1 + .../server/alerts_service/alerts_service.ts | 9 + .../lib/set_alerts_to_untracked.test.ts | 337 ++++++++++++++++++ .../lib/set_alerts_to_untracked.ts | 191 ++++++++++ .../methods/bulk_delete/bulk_delete_rules.ts | 5 + .../bulk_untrack/bulk_untrack_alerts.test.ts | 232 ++++++++++++ .../bulk_untrack/bulk_untrack_alerts.ts | 106 ++++++ .../schemas/bulk_untrack_body_schema.ts | 12 + .../methods/bulk_untrack/schemas/index.ts | 7 + .../bulk_untrack/types/bulk_untrack_body.ts | 11 + .../rule/methods/bulk_untrack/types/index.ts | 8 + .../plugins/alerting/server/routes/index.ts | 2 + .../bulk_untrack/bulk_untrack_alert_route.ts | 44 +++ .../routes/rule/apis/bulk_untrack/index.ts | 8 + .../apis/bulk_untrack/transforms/index.ts | 8 + .../latest.ts | 8 + .../v1.ts | 17 + .../alerting/server/rules_client.mock.ts | 1 + .../rules_client/common/audit_events.ts | 3 + .../rules_client/lib/untrack_rule_alerts.ts | 26 +- .../rules_client/methods/bulk_disable.ts | 2 +- .../server/rules_client/methods/delete.ts | 5 +- .../server/rules_client/methods/disable.ts | 5 +- .../server/rules_client/rules_client.ts | 6 + x-pack/plugins/alerting/tsconfig.json | 3 +- .../alerts/components/alert_actions.test.tsx | 26 +- .../pages/alerts/components/alert_actions.tsx | 42 ++- x-pack/plugins/task_manager/server/mocks.ts | 1 + x-pack/plugins/task_manager/server/plugin.ts | 2 + .../server/task_scheduling.test.ts | 130 +++++++ .../task_manager/server/task_scheduling.ts | 17 + .../alerts_table/alerts_table.test.tsx | 6 + .../bulk_actions/bulk_actions.test.tsx | 6 + .../alerts_table/hooks/translations.ts | 7 + .../hooks/use_bulk_actions.test.tsx | 41 ++- .../alerts_table/hooks/use_bulk_actions.ts | 86 ++++- .../hooks/use_bulk_untrack_alerts.tsx | 60 ++++ .../triggers_actions_ui/public/index.ts | 2 + .../packages/helpers/es_test_index_tool.ts | 10 +- .../group1/tests/alerting/bulk_untrack.ts | 132 +++++++ .../group1/tests/alerting/index.ts | 1 + .../alerts/helpers/alerting_api_helper.ts | 6 +- .../alerts_table.ts | 2 +- .../custom_threshold_rule/avg_pct_fired.ts | 2 + .../custom_threshold_rule/avg_pct_no_data.ts | 2 + .../custom_eq_avg_bytes_fired.ts | 2 + .../documents_count_fired.ts | 2 + .../custom_threshold_rule/group_by_fired.ts | 2 + .../observability/cases/configure.ts | 6 +- 57 files changed, 1647 insertions(+), 163 deletions(-) create mode 100644 x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/index.ts create mode 100644 x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/latest.ts create mode 100644 x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/v1.ts create mode 100644 x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/latest.ts create mode 100644 x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/v1.ts create mode 100644 x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts create mode 100644 x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.test.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/bulk_untrack_body_schema.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/index.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/bulk_untrack_body.ts create mode 100644 x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/index.ts create mode 100644 x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/bulk_untrack_alert_route.ts create mode 100644 x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/index.ts create mode 100644 x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/index.ts create mode 100644 x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/latest.ts create mode 100644 x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/v1.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts.tsx create mode 100644 x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/index.ts b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/index.ts new file mode 100644 index 0000000000000..7535593ce73f5 --- /dev/null +++ b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { bulkUntrackBodySchema } from './schemas/latest'; +export { bulkUntrackBodySchema as bulkUntrackBodySchemaV1 } from './schemas/v1'; + +export type { BulkUntrackRequestBody } from './types/latest'; +export type { BulkUntrackRequestBody as BulkUntrackRequestBodyV1 } from './types/v1'; diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/latest.ts b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/latest.ts new file mode 100644 index 0000000000000..b9785b6b8f9e8 --- /dev/null +++ b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/latest.ts @@ -0,0 +1,7 @@ +/* + * Copyright 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 { bulkUntrackBodySchema } from './v1'; diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/v1.ts b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/v1.ts new file mode 100644 index 0000000000000..63a7db6284345 --- /dev/null +++ b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/schemas/v1.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; + +export const bulkUntrackBodySchema = schema.object({ + indices: schema.arrayOf(schema.string()), + alert_uuids: schema.arrayOf(schema.string()), +}); diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/latest.ts b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/latest.ts new file mode 100644 index 0000000000000..21c3b1a2f826a --- /dev/null +++ b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/latest.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 type { BulkUntrackRequestBody } from './v1'; diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/v1.ts b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/v1.ts new file mode 100644 index 0000000000000..011499122e90a --- /dev/null +++ b/x-pack/plugins/alerting/common/routes/rule/apis/bulk_untrack/types/v1.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { TypeOf } from '@kbn/config-schema'; +import { bulkUntrackBodySchemaV1 } from '..'; + +export type BulkUntrackRequestBody = TypeOf; diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts index d1da82d9a9701..dc98c34b20a39 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts @@ -2331,53 +2331,6 @@ describe('Alerts Client', () => { expect(recoveredAlert.hit).toBeUndefined(); }); }); - - describe('setAlertStatusToUntracked()', () => { - test('should call updateByQuery on provided ruleIds', async () => { - const alertsClient = new AlertsClient<{}, {}, {}, 'default', 'recovered'>( - alertsClientParams - ); - - const opts = { - maxAlerts, - ruleLabel: `test: rule-name`, - flappingSettings: DEFAULT_FLAPPING_SETTINGS, - activeAlertsFromState: {}, - recoveredAlertsFromState: {}, - }; - await alertsClient.initializeExecution(opts); - - await alertsClient.setAlertStatusToUntracked(['test-index'], ['test-rule']); - - expect(clusterClient.updateByQuery).toHaveBeenCalledTimes(1); - }); - - test('should retry updateByQuery on failure', async () => { - clusterClient.updateByQuery.mockResponseOnce({ - total: 10, - updated: 8, - }); - const alertsClient = new AlertsClient<{}, {}, {}, 'default', 'recovered'>( - alertsClientParams - ); - - const opts = { - maxAlerts, - ruleLabel: `test: rule-name`, - flappingSettings: DEFAULT_FLAPPING_SETTINGS, - activeAlertsFromState: {}, - recoveredAlertsFromState: {}, - }; - await alertsClient.initializeExecution(opts); - - await alertsClient.setAlertStatusToUntracked(['test-index'], ['test-rule']); - - expect(clusterClient.updateByQuery).toHaveBeenCalledTimes(2); - expect(logger.warn).toHaveBeenCalledWith( - 'Attempt 1: Failed to untrack 2 of 10; indices test-index, ruleIds test-rule' - ); - }); - }); }); } }); diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts index 34d4e994cfe8b..1b3fe16442d9e 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts @@ -6,14 +6,7 @@ */ import { ElasticsearchClient } from '@kbn/core/server'; -import { - ALERT_INSTANCE_ID, - ALERT_RULE_UUID, - ALERT_STATUS, - ALERT_STATUS_UNTRACKED, - ALERT_STATUS_ACTIVE, - ALERT_UUID, -} from '@kbn/rule-data-utils'; +import { ALERT_INSTANCE_ID, ALERT_RULE_UUID, ALERT_STATUS, ALERT_UUID } from '@kbn/rule-data-utils'; import { chunk, flatMap, get, isEmpty, keys } from 'lodash'; import { SearchRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from '@kbn/alerts-as-data-utils'; @@ -206,51 +199,6 @@ export class AlertsClient< return { hits, total }; } - public async setAlertStatusToUntracked(indices: string[], ruleIds: string[]) { - const esClient = await this.options.elasticsearchClientPromise; - const terms: Array<{ term: Record }> = ruleIds.map((ruleId) => ({ - term: { - [ALERT_RULE_UUID]: { value: ruleId }, - }, - })); - terms.push({ - term: { - [ALERT_STATUS]: { value: ALERT_STATUS_ACTIVE }, - }, - }); - - try { - // Retry this updateByQuery up to 3 times to make sure the number of documents - // updated equals the number of documents matched - for (let retryCount = 0; retryCount < 3; retryCount++) { - const response = await esClient.updateByQuery({ - index: indices, - allow_no_indices: true, - body: { - conflicts: 'proceed', - script: { - source: UNTRACK_UPDATE_PAINLESS_SCRIPT, - lang: 'painless', - }, - query: { - bool: { - must: terms, - }, - }, - }, - }); - if (response.total === response.updated) break; - this.options.logger.warn( - `Attempt ${retryCount + 1}: Failed to untrack ${ - (response.total ?? 0) - (response.updated ?? 0) - } of ${response.total}; indices ${indices}, ruleIds ${ruleIds}` - ); - } - } catch (err) { - this.options.logger.error(`Error marking ${ruleIds} as untracked - ${err.message}`); - } - } - public report( alert: ReportedAlert< AlertData, @@ -621,11 +569,3 @@ export class AlertsClient< return this._isUsingDataStreams; } } - -const UNTRACK_UPDATE_PAINLESS_SCRIPT = ` -// Certain rule types don't flatten their AAD values, apply the ALERT_STATUS key to them directly -if (!ctx._source.containsKey('${ALERT_STATUS}') || ctx._source['${ALERT_STATUS}'].empty) { - ctx._source.${ALERT_STATUS} = '${ALERT_STATUS_UNTRACKED}'; -} else { - ctx._source['${ALERT_STATUS}'] = '${ALERT_STATUS_UNTRACKED}' -}`; diff --git a/x-pack/plugins/alerting/server/alerts_client/types.ts b/x-pack/plugins/alerting/server/alerts_client/types.ts index 0c48138615e43..2f8c54238baee 100644 --- a/x-pack/plugins/alerting/server/alerts_client/types.ts +++ b/x-pack/plugins/alerting/server/alerts_client/types.ts @@ -81,7 +81,6 @@ export interface IAlertsClient< alertsToReturn: Record; recoveredAlertsToReturn: Record; }; - setAlertStatusToUntracked(indices: string[], ruleIds: string[]): Promise; factory(): PublicAlertFactory< State, Context, diff --git a/x-pack/plugins/alerting/server/alerts_service/alerts_service.mock.ts b/x-pack/plugins/alerting/server/alerts_service/alerts_service.mock.ts index 1df9e8b2ff67a..ca8b9199fa6c8 100644 --- a/x-pack/plugins/alerting/server/alerts_service/alerts_service.mock.ts +++ b/x-pack/plugins/alerting/server/alerts_service/alerts_service.mock.ts @@ -12,6 +12,7 @@ const creatAlertsServiceMock = () => { isInitialized: jest.fn(), getContextInitializationPromise: jest.fn(), createAlertsClient: jest.fn(), + setAlertsToUntracked: jest.fn(), }; }); }; diff --git a/x-pack/plugins/alerting/server/alerts_service/alerts_service.ts b/x-pack/plugins/alerting/server/alerts_service/alerts_service.ts index d0c9474389ef0..c90d11d50f56a 100644 --- a/x-pack/plugins/alerting/server/alerts_service/alerts_service.ts +++ b/x-pack/plugins/alerting/server/alerts_service/alerts_service.ts @@ -44,6 +44,7 @@ import { import type { LegacyAlertsClientParams, AlertRuleData } from '../alerts_client'; import { AlertsClient } from '../alerts_client'; import { IAlertsClient } from '../alerts_client/types'; +import { setAlertsToUntracked, SetAlertsToUntrackedOpts } from './lib/set_alerts_to_untracked'; export const TOTAL_FIELDS_LIMIT = 2500; const LEGACY_ALERT_CONTEXT = 'legacy-alert'; @@ -458,4 +459,12 @@ export class AlertsService implements IAlertsService { }); } } + + public async setAlertsToUntracked(opts: SetAlertsToUntrackedOpts) { + return setAlertsToUntracked({ + logger: this.options.logger, + esClient: await this.options.elasticsearchClientPromise, + ...opts, + }); + } } diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts new file mode 100644 index 0000000000000..8b8d6407fdcbf --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts @@ -0,0 +1,337 @@ +/* + * Copyright 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 { setAlertsToUntracked } from './set_alerts_to_untracked'; + +let clusterClient: ElasticsearchClientMock; +let logger: ReturnType; + +describe('setAlertsToUntracked()', () => { + beforeEach(() => { + logger = loggingSystemMock.createLogger(); + clusterClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + clusterClient.search.mockResponse({ + took: 1, + timed_out: false, + _shards: { + total: 1, + successful: 1, + skipped: 0, + failed: 0, + }, + hits: { + hits: [], + }, + }); + }); + test('should call updateByQuery on provided ruleIds', async () => { + await setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + ruleIds: ['test-rule'], + }); + + expect(clusterClient.updateByQuery).toHaveBeenCalledTimes(1); + expect(clusterClient.updateByQuery.mock.lastCall).toMatchInlineSnapshot(` + Array [ + Object { + "allow_no_indices": true, + "body": Object { + "conflicts": "proceed", + "query": Object { + "bool": Object { + "must": Array [ + Object { + "term": Object { + "kibana.alert.status": Object { + "value": "active", + }, + }, + }, + Object { + "bool": Object { + "should": Array [ + Object { + "term": Object { + "kibana.alert.rule.uuid": Object { + "value": "test-rule", + }, + }, + }, + ], + }, + }, + Object { + "bool": Object { + "should": Array [], + }, + }, + ], + }, + }, + "script": Object { + "lang": "painless", + "source": " + if (!ctx._source.containsKey('kibana.alert.status') || ctx._source['kibana.alert.status'].empty) { + ctx._source.kibana.alert.status = 'untracked'; + } else { + ctx._source['kibana.alert.status'] = 'untracked' + }", + }, + }, + "index": Array [ + "test-index", + ], + }, + ] + `); + }); + + test('should call updateByQuery on provided alertUuids', async () => { + await setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + alertUuids: ['test-alert'], + }); + + expect(clusterClient.updateByQuery).toHaveBeenCalledTimes(1); + expect(clusterClient.updateByQuery.mock.lastCall).toMatchInlineSnapshot(` + Array [ + Object { + "allow_no_indices": true, + "body": Object { + "conflicts": "proceed", + "query": Object { + "bool": Object { + "must": Array [ + Object { + "term": Object { + "kibana.alert.status": Object { + "value": "active", + }, + }, + }, + Object { + "bool": Object { + "should": Array [], + }, + }, + Object { + "bool": Object { + "should": Array [ + Object { + "term": Object { + "kibana.alert.uuid": Object { + "value": "test-alert", + }, + }, + }, + ], + }, + }, + ], + }, + }, + "script": Object { + "lang": "painless", + "source": " + if (!ctx._source.containsKey('kibana.alert.status') || ctx._source['kibana.alert.status'].empty) { + ctx._source.kibana.alert.status = 'untracked'; + } else { + ctx._source['kibana.alert.status'] = 'untracked' + }", + }, + }, + "index": Array [ + "test-index", + ], + }, + ] + `); + }); + + test('should retry updateByQuery on failure', async () => { + clusterClient.updateByQuery.mockResponseOnce({ + total: 10, + updated: 8, + }); + + await setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + ruleIds: ['test-rule'], + }); + + expect(clusterClient.updateByQuery).toHaveBeenCalledTimes(2); + expect(logger.warn).toHaveBeenCalledWith( + 'Attempt 1: Failed to untrack 2 of 10; indices test-index, ruleIds test-rule' + ); + }); + + describe('ensureAuthorized', () => { + test('should fail on siem consumer', async () => { + clusterClient.search.mockResponseOnce({ + took: 1, + timed_out: false, + _shards: { + total: 1, + successful: 1, + skipped: 0, + failed: 0, + }, + hits: { + hits: [], + }, + aggregations: { + ruleTypeIds: { + buckets: [ + { + key: 'some rule type', + consumers: { + buckets: [ + { + key: 'not siem', + }, + { + key: 'definitely not siem', + }, + { + key: 'hey guess what still not siem', + }, + { + key: 'siem', + }, + { + key: 'uh oh was that siem', + }, + { + key: 'not good', + }, + { + key: 'this is gonna fail', + }, + ], + }, + }, + ], + }, + }, + }); + await expect( + setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + ruleIds: ['test-rule'], + ensureAuthorized: () => Promise.resolve(), + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Untracking Security alerts is not permitted"`); + }); + + test('should fail on unauthorized consumer', async () => { + clusterClient.search.mockResponseOnce({ + took: 1, + timed_out: false, + _shards: { + total: 1, + successful: 1, + skipped: 0, + failed: 0, + }, + hits: { + hits: [], + }, + aggregations: { + ruleTypeIds: { + buckets: [ + { + key: 'some rule', + consumers: { + buckets: [ + { + key: 'authorized', + }, + { + key: 'unauthorized', + }, + ], + }, + }, + ], + }, + }, + }); + await expect( + setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + ruleIds: ['test-rule'], + ensureAuthorized: async ({ consumer }) => { + if (consumer === 'unauthorized') throw new Error('Unauthorized consumer'); + }, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Unauthorized consumer"`); + }); + }); + + test('should succeed when all consumers are authorized', async () => { + clusterClient.search.mockResponseOnce({ + took: 1, + timed_out: false, + _shards: { + total: 1, + successful: 1, + skipped: 0, + failed: 0, + }, + hits: { + hits: [], + }, + aggregations: { + ruleTypeIds: { + buckets: [ + { + key: 'some rule', + consumers: { + buckets: [ + { + key: 'authorized', + }, + { + key: 'still authorized', + }, + { + key: 'even this one is authorized', + }, + ], + }, + }, + ], + }, + }, + }); + await expect( + setAlertsToUntracked({ + logger, + esClient: clusterClient, + indices: ['test-index'], + ruleIds: ['test-rule'], + ensureAuthorized: async ({ consumer }) => { + if (consumer === 'unauthorized') throw new Error('Unauthorized consumer'); + }, + }) + ).resolves; + }); +}); diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts new file mode 100644 index 0000000000000..4fd9f116205e9 --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts @@ -0,0 +1,191 @@ +/* + * Copyright 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 { isEmpty } from 'lodash'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { Logger } from '@kbn/logging'; +import { + ALERT_RULE_CONSUMER, + ALERT_RULE_TYPE_ID, + ALERT_RULE_UUID, + ALERT_STATUS, + ALERT_STATUS_ACTIVE, + ALERT_STATUS_UNTRACKED, + ALERT_UUID, +} from '@kbn/rule-data-utils'; + +export interface SetAlertsToUntrackedOpts { + indices: string[]; + ruleIds?: string[]; + alertUuids?: string[]; + ensureAuthorized?: (opts: { ruleTypeId: string; consumer: string }) => Promise; +} + +type UntrackedAlertsResult = Array<{ [ALERT_RULE_UUID]: string; [ALERT_UUID]: string }>; +interface ConsumersAndRuleTypesAggregation { + ruleTypeIds: { + buckets: Array<{ + key: string; + consumers: { + buckets: Array<{ key: string }>; + }; + }>; + }; +} + +export async function setAlertsToUntracked({ + logger, + esClient, + indices, + ruleIds = [], + alertUuids = [], // OPTIONAL - If no alertUuids are passed, untrack ALL ids by default, + ensureAuthorized, +}: { + logger: Logger; + esClient: ElasticsearchClient; +} & SetAlertsToUntrackedOpts): Promise { + if (isEmpty(ruleIds) && isEmpty(alertUuids)) + throw new Error('Must provide either ruleIds or alertUuids'); + + const shouldMatchRules: Array<{ term: Record }> = ruleIds.map( + (ruleId) => ({ + term: { + [ALERT_RULE_UUID]: { value: ruleId }, + }, + }) + ); + const shouldMatchAlerts: Array<{ term: Record }> = alertUuids.map( + (alertId) => ({ + term: { + [ALERT_UUID]: { value: alertId }, + }, + }) + ); + + const statusTerms: Array<{ term: Record }> = [ + { + term: { + [ALERT_STATUS]: { value: ALERT_STATUS_ACTIVE }, + }, + }, + ]; + + const must = [ + ...statusTerms, + { + bool: { + should: shouldMatchRules, + }, + }, + { + bool: { + should: shouldMatchAlerts, + // If this is empty, ES will default to minimum_should_match: 0 + }, + }, + ]; + + if (ensureAuthorized) { + // Fetch all rule type IDs and rule consumers, then run the provided ensureAuthorized check for each of them + const response = await esClient.search({ + index: indices, + allow_no_indices: true, + body: { + size: 0, + query: { + bool: { + must, + }, + }, + aggs: { + ruleTypeIds: { + terms: { field: ALERT_RULE_TYPE_ID }, + aggs: { consumers: { terms: { field: ALERT_RULE_CONSUMER } } }, + }, + }, + }, + }); + const ruleTypeIdBuckets = response.aggregations?.ruleTypeIds.buckets; + if (!ruleTypeIdBuckets) throw new Error('Unable to fetch ruleTypeIds for authorization'); + for (const { + key: ruleTypeId, + consumers: { buckets: consumerBuckets }, + } of ruleTypeIdBuckets) { + const consumers = consumerBuckets.map((b) => b.key); + for (const consumer of consumers) { + if (consumer === 'siem') throw new Error('Untracking Security alerts is not permitted'); + await ensureAuthorized({ ruleTypeId, consumer }); + } + } + } + + try { + // Retry this updateByQuery up to 3 times to make sure the number of documents + // updated equals the number of documents matched + let total = 0; + for (let retryCount = 0; retryCount < 3; retryCount++) { + const response = await esClient.updateByQuery({ + index: indices, + allow_no_indices: true, + body: { + conflicts: 'proceed', + script: { + source: UNTRACK_UPDATE_PAINLESS_SCRIPT, + lang: 'painless', + }, + query: { + bool: { + must, + }, + }, + }, + }); + if (total === 0 && response.total === 0) + throw new Error('No active alerts matched the query'); + if (response.total) total = response.total; + if (response.total === response.updated) break; + logger.warn( + `Attempt ${retryCount + 1}: Failed to untrack ${ + (response.total ?? 0) - (response.updated ?? 0) + } of ${response.total}; indices ${indices}, ${ruleIds ? 'ruleIds' : 'alertUuids'} ${ + ruleIds ? ruleIds : alertUuids + }` + ); + } + + // Fetch and return updated rule and alert instance UUIDs + const searchResponse = await esClient.search({ + index: indices, + allow_no_indices: true, + body: { + _source: [ALERT_RULE_UUID, ALERT_UUID], + size: total, + query: { + bool: { + must, + }, + }, + }, + }); + return searchResponse.hits.hits.map((hit) => hit._source) as UntrackedAlertsResult; + } catch (err) { + logger.error( + `Error marking ${ruleIds ? 'ruleIds' : 'alertUuids'} ${ + ruleIds ? ruleIds : alertUuids + } as untracked - ${err.message}` + ); + throw err; + } +} + +// Certain rule types don't flatten their AAD values, apply the ALERT_STATUS key to them directly +const UNTRACK_UPDATE_PAINLESS_SCRIPT = ` +if (!ctx._source.containsKey('${ALERT_STATUS}') || ctx._source['${ALERT_STATUS}'].empty) { + ctx._source.${ALERT_STATUS} = '${ALERT_STATUS_UNTRACKED}'; +} else { + ctx._source['${ALERT_STATUS}'] = '${ALERT_STATUS_UNTRACKED}' +}`; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts index e8a7b77a88c3d..37eae940e1669 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts @@ -36,6 +36,7 @@ import { transformRuleAttributesToRuleDomain, transformRuleDomainToRule } from ' import { ruleDomainSchema } from '../../schemas'; import type { RuleParams, RuleDomain } from '../../types'; import type { RawRule, SanitizedRule } from '../../../../types'; +import { untrackRuleAlerts } from '../../../../rules_client/lib'; export const bulkDeleteRules = async ( context: RulesClientContext, @@ -176,6 +177,10 @@ const bulkDeleteWithOCC = async ( } ); + for (const { id, attributes } of rulesToDelete) { + await untrackRuleAlerts(context, id, attributes as RuleAttributes); + } + const result = await withSpan( { name: 'unsecuredSavedObjectsClient.bulkDelete', type: 'rules' }, () => diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.test.ts new file mode 100644 index 0000000000000..4a79e0a07b580 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.test.ts @@ -0,0 +1,232 @@ +/* + * Copyright 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 { RulesClient, ConstructorOptions } from '../../../../rules_client/rules_client'; +import { savedObjectsClientMock, savedObjectsRepositoryMock } from '@kbn/core/server/mocks'; +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; +import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; +import { actionsAuthorizationMock } from '@kbn/actions-plugin/server/mocks'; +import { ActionsAuthorization } from '@kbn/actions-plugin/server'; +import { auditLoggerMock } from '@kbn/security-plugin/server/audit/mocks'; +import { loggerMock } from '@kbn/logging-mocks'; +import { ruleTypeRegistryMock } from '../../../../rule_type_registry.mock'; +import { alertingAuthorizationMock } from '../../../../authorization/alerting_authorization.mock'; +import { AlertingAuthorization } from '../../../../authorization/alerting_authorization'; +import { alertsServiceMock } from '../../../../alerts_service/alerts_service.mock'; +import { ALERT_RULE_UUID, ALERT_UUID } from '@kbn/rule-data-utils'; +import { ConcreteTaskInstance, TaskStatus } from '@kbn/task-manager-plugin/server'; + +const taskManager = taskManagerMock.createStart(); +const ruleTypeRegistry = ruleTypeRegistryMock.create(); +const unsecuredSavedObjectsClient = savedObjectsClientMock.create(); +const encryptedSavedObjects = encryptedSavedObjectsMock.createClient(); +const authorization = alertingAuthorizationMock.create(); +const actionsAuthorization = actionsAuthorizationMock.create(); +const auditLogger = auditLoggerMock.create(); +const logger = loggerMock.create(); +const internalSavedObjectsRepository = savedObjectsRepositoryMock.create(); + +const alertsService = alertsServiceMock.create(); + +const kibanaVersion = 'v8.2.0'; +const createAPIKeyMock = jest.fn(); +const rulesClientParams: jest.Mocked = { + taskManager, + ruleTypeRegistry, + unsecuredSavedObjectsClient, + authorization: authorization as unknown as AlertingAuthorization, + actionsAuthorization: actionsAuthorization as unknown as ActionsAuthorization, + spaceId: 'default', + namespace: 'default', + getUserName: jest.fn(), + createAPIKey: createAPIKeyMock, + logger, + internalSavedObjectsRepository, + encryptedSavedObjectsClient: encryptedSavedObjects, + getActionsClient: jest.fn(), + getEventLogClient: jest.fn(), + kibanaVersion, + auditLogger, + maxScheduledPerMinute: 10000, + minimumScheduleInterval: { value: '1m', enforce: false }, + isAuthenticationTypeAPIKey: jest.fn(), + getAuthenticationAPIKey: jest.fn(), + getAlertIndicesAlias: jest.fn(), + alertsService, +}; + +describe('bulkUntrackAlerts()', () => { + let rulesClient: RulesClient; + beforeEach(async () => { + rulesClient = new RulesClient(rulesClientParams); + }); + + it('should untrack alert documents and update task states', async () => { + alertsService.setAlertsToUntracked.mockResolvedValueOnce([ + { + [ALERT_RULE_UUID]: + 'did you know that you can put whatever you want into these mocked values', + [ALERT_UUID]: "it's true", + }, + ]); + + await rulesClient.bulkUntrackAlerts({ + indices: [ + 'she had them apple bottom jeans (jeans)', + 'boots with the fur (with the fur)', + 'the whole club was lookin at her', + 'she hit the floor (she hit the floor)', + 'next thing you know', + 'shawty got low, low, low, low, low, low, low, low', + ], + alertUuids: [ + 'you wake up late for school, man, you dont wanna GO', + 'you ask your mom, please? but she still says NO', + 'you missed two classes and no homeWORK', + 'but your teacher preaches class like youre some kinda JERK', + 'you gotta fight', + 'for your right', + 'to paaaaaaaaaarty', + ], + }); + + expect(alertsService.setAlertsToUntracked).toHaveBeenCalledTimes(1); + expect(taskManager.bulkUpdateState).toHaveBeenCalledWith( + ['did you know that you can put whatever you want into these mocked values'], + expect.any(Function) + ); + }); + + it('should remove provided uuids from task state', async () => { + const mockTaskId = 'task'; + const mockAlertUuid = 'alert'; + + const trackedAlertsNotToRemove = { + "we're no strangers to love": { alertUuid: 'you know the rules and so do i' }, + "a full commitment's what i'm thinkin' of": { + alertUuid: "you wouldn't get this from any other guy", + }, + "i just wanna tell you how i'm feelin'": { alertUuid: 'got to make you understand' }, + 'never gonna give you up': { alertUuid: 'never gonna let you down' }, + 'never gonna run around and desert you': { alertUuid: 'never gonna make you cry' }, + 'never gonna say goodbye': { alertUuid: 'never gonna tell a lie and hurt you' }, + }; + + const mockDate = new Date('2023-10-03T16:00:15.523Z'); + + const initialTask: ConcreteTaskInstance = { + id: mockTaskId, + state: { + alertTypeState: { + trackedAlerts: { + removeMe: { alertUuid: mockAlertUuid }, + ...trackedAlertsNotToRemove, + }, + alertInstances: { + removeMe: { alertUuid: mockAlertUuid }, + ...trackedAlertsNotToRemove, + }, + }, + }, + scheduledAt: mockDate, + runAt: mockDate, + startedAt: mockDate, + retryAt: mockDate, + ownerId: 'somebody', + taskType: "once told me the world was gonna roll me i ain't the sharpest tool in the shed", + params: {}, + attempts: 0, + status: TaskStatus.Idle, + }; + + taskManager.bulkUpdateState.mockImplementationOnce(async (taskIds, updater) => ({ + errors: [], + tasks: [{ ...initialTask, state: updater(initialTask.state, taskIds[0]) }], + })); + + alertsService.setAlertsToUntracked.mockResolvedValueOnce([ + { + [ALERT_RULE_UUID]: mockTaskId, + [ALERT_UUID]: mockAlertUuid, + }, + ]); + + await rulesClient.bulkUntrackAlerts({ + indices: ["honestly who cares we're not even testing the index right now"], + alertUuids: [mockAlertUuid], + }); + + const bulkUntrackResults = taskManager.bulkUpdateState.mock.results; + const lastBulkUntrackResult = await bulkUntrackResults[bulkUntrackResults.length - 1].value; + expect(lastBulkUntrackResult).toMatchInlineSnapshot(` + Object { + "errors": Array [], + "tasks": Array [ + Object { + "attempts": 0, + "id": "task", + "ownerId": "somebody", + "params": Object {}, + "retryAt": 2023-10-03T16:00:15.523Z, + "runAt": 2023-10-03T16:00:15.523Z, + "scheduledAt": 2023-10-03T16:00:15.523Z, + "startedAt": 2023-10-03T16:00:15.523Z, + "state": Object { + "alertInstances": Object {}, + "alertTypeState": Object { + "alertInstances": Object { + "a full commitment's what i'm thinkin' of": Object { + "alertUuid": "you wouldn't get this from any other guy", + }, + "i just wanna tell you how i'm feelin'": Object { + "alertUuid": "got to make you understand", + }, + "never gonna give you up": Object { + "alertUuid": "never gonna let you down", + }, + "never gonna run around and desert you": Object { + "alertUuid": "never gonna make you cry", + }, + "never gonna say goodbye": Object { + "alertUuid": "never gonna tell a lie and hurt you", + }, + "removeMe": Object { + "alertUuid": "alert", + }, + "we're no strangers to love": Object { + "alertUuid": "you know the rules and so do i", + }, + }, + "trackedAlerts": Object { + "a full commitment's what i'm thinkin' of": Object { + "alertUuid": "you wouldn't get this from any other guy", + }, + "i just wanna tell you how i'm feelin'": Object { + "alertUuid": "got to make you understand", + }, + "never gonna give you up": Object { + "alertUuid": "never gonna let you down", + }, + "never gonna run around and desert you": Object { + "alertUuid": "never gonna make you cry", + }, + "never gonna say goodbye": Object { + "alertUuid": "never gonna tell a lie and hurt you", + }, + "we're no strangers to love": Object { + "alertUuid": "you know the rules and so do i", + }, + }, + }, + }, + "status": "idle", + "taskType": "once told me the world was gonna roll me i ain't the sharpest tool in the shed", + }, + ], + } + `); + }); +}); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.ts new file mode 100644 index 0000000000000..e3c75f2889198 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/bulk_untrack_alerts.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { omitBy } from 'lodash'; +import Boom from '@hapi/boom'; +import { withSpan } from '@kbn/apm-utils'; +import { ALERT_RULE_UUID, ALERT_UUID } from '@kbn/rule-data-utils'; +import { bulkUntrackBodySchema } from './schemas'; +import type { BulkUntrackBody } from './types'; +import { WriteOperations, AlertingAuthorizationEntity } from '../../../../authorization'; +import { retryIfConflicts } from '../../../../lib/retry_if_conflicts'; +import { ruleAuditEvent, RuleAuditAction } from '../../../../rules_client/common/audit_events'; +import { RulesClientContext } from '../../../../rules_client/types'; + +export type { BulkUntrackBody }; + +export async function bulkUntrackAlerts( + context: RulesClientContext, + params: BulkUntrackBody +): Promise { + try { + bulkUntrackBodySchema.validate(params); + } catch (error) { + throw Boom.badRequest(`Failed to validate params: ${error.message}`); + } + + return await retryIfConflicts( + context.logger, + `rulesClient.bulkUntrack('${params.alertUuids}')`, + async () => await bulkUntrackAlertsWithOCC(context, params) + ); +} + +async function bulkUntrackAlertsWithOCC( + context: RulesClientContext, + { indices, alertUuids }: BulkUntrackBody +) { + try { + if (!context.alertsService) throw new Error('unable to access alertsService'); + const result = await context.alertsService.setAlertsToUntracked({ + indices, + alertUuids, + ensureAuthorized: async ({ + ruleTypeId, + consumer, + }: { + ruleTypeId: string; + consumer: string; + }) => + await withSpan({ name: 'authorization.ensureAuthorized', type: 'alerts' }, () => + context.authorization.ensureAuthorized({ + ruleTypeId, + consumer, + operation: WriteOperations.Update, + entity: AlertingAuthorizationEntity.Alert, + }) + ), + }); + + // Clear alert instances from their corresponding tasks so that they can remain untracked + const taskIds = [...new Set(result.map((doc) => doc[ALERT_RULE_UUID]))]; + await context.taskManager.bulkUpdateState(taskIds, (state, id) => { + try { + const uuidsToClear = result + .filter((doc) => doc[ALERT_RULE_UUID] === id) + .map((doc) => doc[ALERT_UUID]); + const alertTypeState = { + ...state.alertTypeState, + trackedAlerts: omitBy(state.alertTypeState.trackedAlerts, ({ alertUuid }) => + uuidsToClear.includes(alertUuid) + ), + }; + const alertInstances = omitBy(state.alertInstances, ({ meta: { uuid } }) => + uuidsToClear.includes(uuid) + ); + return { + ...state, + alertTypeState, + alertInstances, + }; + } catch (e) { + context.logger.error(`Failed to untrack alerts in task ID ${id}`); + return state; + } + }); + + context.auditLogger?.log( + ruleAuditEvent({ + action: RuleAuditAction.UNTRACK_ALERT, + outcome: 'success', + }) + ); + } catch (error) { + context.auditLogger?.log( + ruleAuditEvent({ + action: RuleAuditAction.UNTRACK_ALERT, + error, + }) + ); + throw error; + } +} diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/bulk_untrack_body_schema.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/bulk_untrack_body_schema.ts new file mode 100644 index 0000000000000..9c77a6e6b2b3a --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/bulk_untrack_body_schema.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { schema } from '@kbn/config-schema'; + +export const bulkUntrackBodySchema = schema.object({ + indices: schema.arrayOf(schema.string()), + alertUuids: schema.arrayOf(schema.string()), +}); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/index.ts new file mode 100644 index 0000000000000..206c3f494c588 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/schemas/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright 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 { bulkUntrackBodySchema } from './bulk_untrack_body_schema'; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/bulk_untrack_body.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/bulk_untrack_body.ts new file mode 100644 index 0000000000000..f515314b2ef50 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/bulk_untrack_body.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TypeOf } from '@kbn/config-schema'; +import { bulkUntrackBodySchema } from '../schemas'; + +export type BulkUntrackBody = TypeOf; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/index.ts new file mode 100644 index 0000000000000..7c663d1859850 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_untrack/types/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 type { BulkUntrackBody } from './bulk_untrack_body'; diff --git a/x-pack/plugins/alerting/server/routes/index.ts b/x-pack/plugins/alerting/server/routes/index.ts index 5086cb56279ed..d0dc928173ef8 100644 --- a/x-pack/plugins/alerting/server/routes/index.ts +++ b/x-pack/plugins/alerting/server/routes/index.ts @@ -48,6 +48,7 @@ import { getFlappingSettingsRoute } from './get_flapping_settings'; import { updateFlappingSettingsRoute } from './update_flapping_settings'; import { getRuleTagsRoute } from './get_rule_tags'; import { getScheduleFrequencyRoute } from './rule/apis/get_schedule_frequency'; +import { bulkUntrackAlertRoute } from './rule/apis/bulk_untrack'; import { createMaintenanceWindowRoute } from './maintenance_window/apis/create/create_maintenance_window_route'; import { getMaintenanceWindowRoute } from './maintenance_window/apis/get/get_maintenance_window_route'; @@ -131,4 +132,5 @@ export function defineRoutes(opts: RouteOptions) { registerFieldsRoute(router, licenseState); bulkGetMaintenanceWindowRoute(router, licenseState); getScheduleFrequencyRoute(router, licenseState); + bulkUntrackAlertRoute(router, licenseState); } diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/bulk_untrack_alert_route.ts b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/bulk_untrack_alert_route.ts new file mode 100644 index 0000000000000..791fdcca533cc --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/bulk_untrack_alert_route.ts @@ -0,0 +1,44 @@ +/* + * Copyright 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 { IRouter } from '@kbn/core/server'; +import { + BulkUntrackRequestBodyV1, + bulkUntrackBodySchemaV1, +} from '../../../../../common/routes/rule/apis/bulk_untrack'; +import { transformRequestBodyToApplicationV1 } from './transforms'; +import { ILicenseState, RuleTypeDisabledError } from '../../../../lib'; +import { verifyAccessAndContext } from '../../../lib'; +import { AlertingRequestHandlerContext, INTERNAL_BASE_ALERTING_API_PATH } from '../../../../types'; + +export const bulkUntrackAlertRoute = ( + router: IRouter, + licenseState: ILicenseState +) => { + router.post( + { + path: `${INTERNAL_BASE_ALERTING_API_PATH}/alerts/_bulk_untrack`, + validate: { + body: bulkUntrackBodySchemaV1, + }, + }, + router.handleLegacyErrors( + verifyAccessAndContext(licenseState, async function (context, req, res) { + const rulesClient = (await context.alerting).getRulesClient(); + const body: BulkUntrackRequestBodyV1 = req.body; + try { + await rulesClient.bulkUntrackAlerts(transformRequestBodyToApplicationV1(body)); + return res.noContent(); + } catch (e) { + if (e instanceof RuleTypeDisabledError) { + return e.sendResponse(res); + } + throw e; + } + }) + ) + ); +}; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/index.ts b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/index.ts new file mode 100644 index 0000000000000..b453f47ecbb6e --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { bulkUntrackAlertRoute } from './bulk_untrack_alert_route'; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/index.ts b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/index.ts new file mode 100644 index 0000000000000..aa4eae3d633cf --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { transformRequestBodyToApplication } from './transform_request_body_to_application/latest'; +export { transformRequestBodyToApplication as transformRequestBodyToApplicationV1 } from './transform_request_body_to_application/v1'; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/latest.ts b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/latest.ts new file mode 100644 index 0000000000000..3dab7ef9587fb --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/latest.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { transformRequestBodyToApplication } from './v1'; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/v1.ts b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/v1.ts new file mode 100644 index 0000000000000..0a0750bf45b1b --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/transforms/transform_request_body_to_application/v1.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RewriteRequestCase } from '../../../../../lib'; +import { BulkUntrackBody } from '../../../../../../application/rule/methods/bulk_untrack/types'; + +export const transformRequestBodyToApplication: RewriteRequestCase = ({ + indices, + alert_uuids: alertUuids, +}) => ({ + indices, + alertUuids, +}); diff --git a/x-pack/plugins/alerting/server/rules_client.mock.ts b/x-pack/plugins/alerting/server/rules_client.mock.ts index ebe6f6c555a67..0b4122e221ca5 100644 --- a/x-pack/plugins/alerting/server/rules_client.mock.ts +++ b/x-pack/plugins/alerting/server/rules_client.mock.ts @@ -53,6 +53,7 @@ const createRulesClientMock = () => { clone: jest.fn(), getAlertFromRaw: jest.fn(), getScheduleFrequency: jest.fn(), + bulkUntrackAlerts: jest.fn(), }; return mocked; }; diff --git a/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts b/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts index 4909a71b89b8c..0088f623f43b7 100644 --- a/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts +++ b/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts @@ -33,6 +33,7 @@ export enum RuleAuditAction { SNOOZE = 'rule_snooze', UNSNOOZE = 'rule_unsnooze', RUN_SOON = 'rule_run_soon', + UNTRACK_ALERT = 'rule_alert_untrack', } type VerbsTuple = [string, string, string]; @@ -81,6 +82,7 @@ const eventVerbs: Record = { 'accessing global execution KPI for', 'accessed global execution KPI for', ], + rule_alert_untrack: ['untrack', 'untracking', 'untracked'], }; const eventTypes: Record> = { @@ -107,6 +109,7 @@ const eventTypes: Record> = { rule_run_soon: 'access', rule_get_execution_kpi: 'access', rule_get_global_execution_kpi: 'access', + rule_alert_untrack: 'change', }; export interface RuleAuditEventParams { diff --git a/x-pack/plugins/alerting/server/rules_client/lib/untrack_rule_alerts.ts b/x-pack/plugins/alerting/server/rules_client/lib/untrack_rule_alerts.ts index 7eaee0e468e1c..17794aeb4ebdf 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/untrack_rule_alerts.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/untrack_rule_alerts.ts @@ -8,17 +8,18 @@ import { mapValues } from 'lodash'; import { SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; import { withSpan } from '@kbn/apm-utils'; -import { RawRule, SanitizedRule, RawAlertInstance as RawAlert } from '../../types'; +import { SanitizedRule, RawAlertInstance as RawAlert } from '../../types'; import { taskInstanceToAlertTaskInstance } from '../../task_runner/alert_task_instance'; import { Alert } from '../../alert'; import { EVENT_LOG_ACTIONS } from '../../plugin'; import { createAlertEventLogRecordObject } from '../../lib/create_alert_event_log_record_object'; import { RulesClientContext } from '../types'; +import { RuleAttributes } from '../../data/rule/types'; export const untrackRuleAlerts = async ( context: RulesClientContext, id: string, - attributes: RawRule + attributes: RuleAttributes ) => { return withSpan({ name: 'untrackRuleAlerts', type: 'rules' }, async () => { if (!context.eventLogger || !attributes.scheduledTaskId) return; @@ -27,7 +28,6 @@ export const untrackRuleAlerts = async ( await context.taskManager.get(attributes.scheduledTaskId), attributes as unknown as SanitizedRule ); - const { state } = taskInstance; const untrackedAlerts = mapValues, Alert>( @@ -78,24 +78,10 @@ export const untrackRuleAlerts = async ( // Untrack Lifecycle alerts (Alerts As Data-enabled) if (isLifecycleAlert) { - const alertsClient = await context.alertsService?.createAlertsClient({ - namespace: context.namespace!, - rule: { - id, - name: attributes.name, - consumer: attributes.consumer, - revision: attributes.revision, - spaceId: context.spaceId, - tags: attributes.tags, - parameters: attributes.parameters, - executionId: '', - }, - ruleType, - logger: context.logger, - }); - if (!alertsClient) throw new Error('Could not create alertsClient'); const indices = context.getAlertIndicesAlias([ruleType.id], context.spaceId); - await alertsClient.setAlertStatusToUntracked(indices, [id]); + if (!context.alertsService) + throw new Error('Could not access alertsService to untrack alerts'); + await context.alertsService.setAlertsToUntracked({ indices, ruleIds: [id] }); } } catch (error) { // this should not block the rest of the disable process diff --git a/x-pack/plugins/alerting/server/rules_client/methods/bulk_disable.ts b/x-pack/plugins/alerting/server/rules_client/methods/bulk_disable.ts index d409d69f8a6ac..0a1af5511fe38 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/bulk_disable.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/bulk_disable.ts @@ -115,7 +115,7 @@ const bulkDisableRulesWithOCC = async ( for await (const response of rulesFinder.find()) { await pMap(response.saved_objects, async (rule) => { try { - await untrackRuleAlerts(context, rule.id, rule.attributes); + await untrackRuleAlerts(context, rule.id, rule.attributes as RuleAttributes); if (rule.attributes.name) { ruleNameToRuleIdMapping[rule.id] = rule.attributes.name; diff --git a/x-pack/plugins/alerting/server/rules_client/methods/delete.ts b/x-pack/plugins/alerting/server/rules_client/methods/delete.ts index 605753cfcdfc8..566945f0357fc 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/delete.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/delete.ts @@ -12,7 +12,8 @@ import { retryIfConflicts } from '../../lib/retry_if_conflicts'; import { bulkMarkApiKeysForInvalidation } from '../../invalidate_pending_api_keys/bulk_mark_api_keys_for_invalidation'; import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; import { RulesClientContext } from '../types'; -import { migrateLegacyActions } from '../lib'; +import { untrackRuleAlerts, migrateLegacyActions } from '../lib'; +import { RuleAttributes } from '../../data/rule/types'; export async function deleteRule(context: RulesClientContext, { id }: { id: string }) { return await retryIfConflicts( @@ -66,6 +67,8 @@ async function deleteWithOCC(context: RulesClientContext, { id }: { id: string } throw error; } + await untrackRuleAlerts(context, id, attributes as RuleAttributes); + // migrate legacy actions only for SIEM rules if (attributes.consumer === AlertConsumers.SIEM) { await migrateLegacyActions(context, { ruleId: id, attributes, skipActionsValidation: true }); diff --git a/x-pack/plugins/alerting/server/rules_client/methods/disable.ts b/x-pack/plugins/alerting/server/rules_client/methods/disable.ts index 88ffd510e8800..d51a5793371f0 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/disable.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/disable.ts @@ -12,6 +12,7 @@ import { retryIfConflicts } from '../../lib/retry_if_conflicts'; import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; import { RulesClientContext } from '../types'; import { untrackRuleAlerts, updateMeta, migrateLegacyActions } from '../lib'; +import { RuleAttributes } from '../../data/rule/types'; export async function disable(context: RulesClientContext, { id }: { id: string }): Promise { return await retryIfConflicts( @@ -43,8 +44,6 @@ async function disableWithOCC(context: RulesClientContext, { id }: { id: string references = alert.references; } - await untrackRuleAlerts(context, id, attributes); - try { await context.authorization.ensureAuthorized({ ruleTypeId: attributes.alertTypeId, @@ -63,6 +62,8 @@ async function disableWithOCC(context: RulesClientContext, { id }: { id: string throw error; } + await untrackRuleAlerts(context, id, attributes as RuleAttributes); + context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.DISABLE, diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index d7a576ac99d0b..8664a0c42b9be 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -62,6 +62,10 @@ import { listRuleTypes } from './methods/list_rule_types'; import { getAlertFromRaw, GetAlertFromRawParams } from './lib/get_alert_from_raw'; import { getTags, GetTagsParams } from './methods/get_tags'; import { getScheduleFrequency } from '../application/rule/methods/get_schedule_frequency/get_schedule_frequency'; +import { + bulkUntrackAlerts, + BulkUntrackBody, +} from '../application/rule/methods/bulk_untrack/bulk_untrack_alerts'; export type ConstructorOptions = Omit< RulesClientContext, @@ -167,6 +171,8 @@ export class RulesClient { public muteInstance = (options: MuteAlertParams) => muteInstance(this.context, options); public unmuteInstance = (options: MuteAlertParams) => unmuteInstance(this.context, options); + public bulkUntrackAlerts = (options: BulkUntrackBody) => bulkUntrackAlerts(this.context, options); + public runSoon = (options: { id: string }) => runSoon(this.context, options); public listRuleTypes = () => listRuleTypes(this.context); diff --git a/x-pack/plugins/alerting/tsconfig.json b/x-pack/plugins/alerting/tsconfig.json index d2d5aafc7fde9..987ad98b927cf 100644 --- a/x-pack/plugins/alerting/tsconfig.json +++ b/x-pack/plugins/alerting/tsconfig.json @@ -58,7 +58,8 @@ "@kbn/core-http-server-mocks", "@kbn/serverless", "@kbn/core-http-router-server-mocks", - "@kbn/core-application-common", + "@kbn/core-elasticsearch-server", + "@kbn/core-application-common" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx index 4a92143943f26..70dfcd0a82d43 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx @@ -4,6 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { act } from '@testing-library/react-hooks'; import { kibanaStartMock } from '../../../utils/kibana_react.mock'; import React from 'react'; @@ -44,6 +45,12 @@ jest.mock('../../../hooks/use_get_user_cases_permissions', () => ({ useGetUserCasesPermissions: jest.fn(() => ({ create: true, read: true })), })); +jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana/kibana_react', () => ({ + useKibana: jest.fn(() => ({ + services: { notifications: { toasts: { addDanger: jest.fn(), addSuccess: jest.fn() } } }, + })), +})); + const config = { unsafe: { alertDetails: { @@ -69,6 +76,19 @@ describe('ObservabilityActions component', () => { }); const setup = async (pageId: string) => { + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + logger: { + log: () => {}, + warn: () => {}, + error: () => {}, + }, + }); + const props: Props = { config, data: inventoryThresholdAlert as unknown as TimelineNonEcsData[], @@ -82,7 +102,11 @@ describe('ObservabilityActions component', () => { refresh, }; - const wrapper = mountWithIntl(); + const wrapper = mountWithIntl( + + + + ); await act(async () => { await nextTick(); wrapper.update(); diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx index 567bb32b07f8c..7799655908907 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx @@ -20,8 +20,15 @@ import { CaseAttachmentsWithoutOwner } from '@kbn/cases-plugin/public'; import { AttachmentType } from '@kbn/cases-plugin/common'; import { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { TimelineNonEcsData } from '@kbn/timelines-plugin/common'; -import { ALERT_RULE_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; - +import { + ALERT_RULE_TYPE_ID, + ALERT_RULE_UUID, + ALERT_STATUS, + ALERT_STATUS_ACTIVE, + ALERT_UUID, + OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, +} from '@kbn/rule-data-utils'; +import { useBulkUntrackAlerts } from '@kbn/triggers-actions-ui-plugin/public'; import { useKibana } from '../../../utils/kibana_react'; import { useGetUserCasesPermissions } from '../../../hooks/use_get_user_cases_permissions'; import { isAlertDetailsEnabledPerApp } from '../../../utils/is_alert_details_enabled'; @@ -63,6 +70,7 @@ export function AlertActions({ }, } = useKibana().services; const userCasesPermissions = useGetUserCasesPermissions(); + const { mutateAsync: untrackAlerts } = useBulkUntrackAlerts(); const parseObservabilityAlert = useMemo( () => parseAlert(observabilityRuleTypeRegistry), @@ -74,13 +82,13 @@ export function AlertActions({ const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const ruleId = alert.fields['kibana.alert.rule.uuid'] ?? null; + const ruleId = alert.fields[ALERT_RULE_UUID] ?? null; const linkToRule = pageId !== RULE_DETAILS_PAGE_ID && ruleId ? prepend(paths.observability.ruleDetails(ruleId)) : null; - const alertId = alert.fields['kibana.alert.uuid'] ?? null; + const alertId = alert.fields[ALERT_UUID] ?? null; const linkToAlert = pageId !== ALERT_DETAILS_PAGE_ID && alertId ? prepend(paths.observability.alertDetails(alertId)) @@ -99,6 +107,11 @@ export function AlertActions({ : []; }, [ecsData, getRuleIdFromEvent, data]); + const isActiveAlert = useMemo( + () => alert.fields[ALERT_STATUS] === ALERT_STATUS_ACTIVE, + [alert.fields] + ); + const onSuccess = useCallback(() => { refresh(); }, [refresh]); @@ -124,6 +137,14 @@ export function AlertActions({ closeActionsPopover(); }; + const handleUntrackAlert = useCallback(async () => { + await untrackAlerts({ + indices: [ecsData?._index ?? ''], + alertUuids: [alertId], + }); + onSuccess(); + }, [untrackAlerts, alertId, ecsData, onSuccess]); + const actionsMenuItems = [ ...(userCasesPermissions.create && userCasesPermissions.read ? [ @@ -190,6 +211,19 @@ export function AlertActions({ ), ], + ...(isActiveAlert + ? [ + + {i18n.translate('xpack.observability.alerts.actions.untrack', { + defaultMessage: 'Mark as untracked', + })} + , + ] + : []), ]; const actionsToolTip = diff --git a/x-pack/plugins/task_manager/server/mocks.ts b/x-pack/plugins/task_manager/server/mocks.ts index 1363b0ab9b1ee..45a2f117167ca 100644 --- a/x-pack/plugins/task_manager/server/mocks.ts +++ b/x-pack/plugins/task_manager/server/mocks.ts @@ -36,6 +36,7 @@ const createStartMock = () => { bulkDisable: jest.fn(), bulkEnable: jest.fn(), getRegisteredTypes: jest.fn(), + bulkUpdateState: jest.fn(), }; return mock; }; diff --git a/x-pack/plugins/task_manager/server/plugin.ts b/x-pack/plugins/task_manager/server/plugin.ts index 0c1bafe9f4fc1..4c9879f25b591 100644 --- a/x-pack/plugins/task_manager/server/plugin.ts +++ b/x-pack/plugins/task_manager/server/plugin.ts @@ -61,6 +61,7 @@ export type TaskManagerStartContract = Pick< | 'bulkEnable' | 'bulkDisable' | 'bulkSchedule' + | 'bulkUpdateState' > & Pick & { removeIfExists: TaskStore['remove']; @@ -325,6 +326,7 @@ export class TaskManagerPlugin supportsEphemeralTasks: () => this.config.ephemeral_tasks.enabled && this.shouldRunBackgroundTasks, getRegisteredTypes: () => this.definitions.getAllTypes(), + bulkUpdateState: (...args) => taskScheduling.bulkUpdateState(...args), }; } } diff --git a/x-pack/plugins/task_manager/server/task_scheduling.test.ts b/x-pack/plugins/task_manager/server/task_scheduling.test.ts index 9f822b9cd2d76..11a2e8a115d8a 100644 --- a/x-pack/plugins/task_manager/server/task_scheduling.test.ts +++ b/x-pack/plugins/task_manager/server/task_scheduling.test.ts @@ -21,6 +21,7 @@ import { mockLogger } from './test_utils'; import { TaskTypeDictionary } from './task_type_dictionary'; import { ephemeralTaskLifecycleMock } from './ephemeral_task_lifecycle.mock'; import { taskManagerMock } from './mocks'; +import { omit } from 'lodash'; let fakeTimer: sinon.SinonFakeTimers; jest.mock('uuid', () => ({ @@ -370,6 +371,135 @@ describe('TaskScheduling', () => { }); }); + describe('bulkUpdateState', () => { + const id = '01ddff11-e88a-4d13-bc4e-256164e755e2'; + beforeEach(() => { + mockTaskStore.bulkUpdate.mockImplementation(() => + Promise.resolve([{ tag: 'ok', value: taskManagerMock.createTask() }]) + ); + }); + + test('should split search on chunks when input ids array too large', async () => { + mockTaskStore.bulkGet.mockResolvedValue([]); + const taskScheduling = new TaskScheduling(taskSchedulingOpts); + + await taskScheduling.bulkUpdateState(Array.from({ length: 1250 }), jest.fn()); + + expect(mockTaskStore.bulkGet).toHaveBeenCalledTimes(13); + }); + + test('should transform response into correct format', async () => { + const successfulTask = taskManagerMock.createTask({ + id: 'task-1', + enabled: false, + schedule: { interval: '1h' }, + state: { + 'hello i am a state that has been modified': "not really but we're going to pretend", + }, + }); + const failedToUpdateTask = taskManagerMock.createTask({ + id: 'task-2', + enabled: true, + schedule: { interval: '1h' }, + state: { 'this state is unchangeable': 'none shall update me' }, + }); + mockTaskStore.bulkUpdate.mockImplementation(() => + Promise.resolve([ + { tag: 'ok', value: successfulTask }, + { + tag: 'err', + error: { + type: 'task', + id: failedToUpdateTask.id, + error: { + statusCode: 400, + error: 'fail', + message: 'fail', + }, + }, + }, + ]) + ); + mockTaskStore.bulkGet.mockResolvedValue([asOk(successfulTask), asOk(failedToUpdateTask)]); + + const taskScheduling = new TaskScheduling(taskSchedulingOpts); + const result = await taskScheduling.bulkUpdateState( + [successfulTask.id, failedToUpdateTask.id], + jest.fn() + ); + + expect(result).toEqual({ + tasks: [successfulTask], + errors: [ + { + type: 'task', + id: failedToUpdateTask.id, + error: { + statusCode: 400, + error: 'fail', + message: 'fail', + }, + }, + ], + }); + }); + + test('should execute updater function on tasks', async () => { + const task = taskManagerMock.createTask({ + id, + enabled: false, + schedule: { interval: '3h' }, + runAt: new Date('1969-09-13T21:33:58.285Z'), + scheduledAt: new Date('1969-09-10T21:33:58.285Z'), + state: { removeMe: 'please remove me i dont like being in this task manager state' }, + }); + const updaterFn = jest.fn((state) => { + return { + ...omit(state, 'removeMe'), + expectedValue: 'HELLO I AM AN EXPECTED VALUE IT IS VERY NICE TO MEET YOU', + }; + }); + mockTaskStore.bulkUpdate.mockImplementation(() => + Promise.resolve([{ tag: 'ok', value: task }]) + ); + mockTaskStore.bulkGet.mockResolvedValue([asOk(task)]); + + const taskScheduling = new TaskScheduling(taskSchedulingOpts); + await taskScheduling.bulkUpdateState([id], updaterFn); + + const bulkUpdatePayload = mockTaskStore.bulkUpdate.mock.calls[0][0]; + + expect(bulkUpdatePayload).toMatchInlineSnapshot(` + Array [ + Object { + "attempts": 0, + "enabled": false, + "id": "01ddff11-e88a-4d13-bc4e-256164e755e2", + "ownerId": "123", + "params": Object { + "hello": "world", + }, + "retryAt": null, + "runAt": 1969-09-13T21:33:58.285Z, + "schedule": Object { + "interval": "3h", + }, + "scheduledAt": 1969-09-10T21:33:58.285Z, + "scope": undefined, + "startedAt": null, + "state": Object { + "expectedValue": "HELLO I AM AN EXPECTED VALUE IT IS VERY NICE TO MEET YOU", + }, + "status": "idle", + "taskType": "foo", + "user": undefined, + "version": "123", + }, + ] + `); + }); + }); + describe('bulkUpdateSchedules', () => { const id = '01ddff11-e88a-4d13-bc4e-256164e755e2'; beforeEach(() => { diff --git a/x-pack/plugins/task_manager/server/task_scheduling.ts b/x-pack/plugins/task_manager/server/task_scheduling.ts index 5ee848c716bec..795e563986586 100644 --- a/x-pack/plugins/task_manager/server/task_scheduling.ts +++ b/x-pack/plugins/task_manager/server/task_scheduling.ts @@ -186,6 +186,23 @@ export class TaskScheduling { }); } + public async bulkUpdateState( + taskIds: string[], + stateMapFn: (s: ConcreteTaskInstance['state'], id: string) => ConcreteTaskInstance['state'] + ) { + return await retryableBulkUpdate({ + taskIds, + store: this.store, + getTasks: async (ids) => await this.bulkGetTasksHelper(ids), + filter: () => true, + map: (task) => ({ + ...task, + state: stateMapFn(task.state, task.id), + }), + validate: false, + }); + } + /** * Bulk updates schedules for tasks by ids. * Only tasks with `idle` status will be updated, as for the tasks which have `running` status, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx index 564ac2d80bad9..16e7af7c79425 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx @@ -53,6 +53,12 @@ jest.mock('@kbn/kibana-react-plugin/public', () => { useKibana: () => ({ services: { cases: mockCaseService, + notifications: { + toasts: { + addDanger: jest.fn(), + addSuccess: jest.fn(), + }, + }, }, }), }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/bulk_actions.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/bulk_actions.test.tsx index ff05e9e282e9e..e028ae1867a8e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/bulk_actions.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/bulk_actions.test.tsx @@ -49,6 +49,12 @@ const mockCaseService = createCasesServiceMock(); const mockKibana = jest.fn().mockReturnValue({ services: { cases: mockCaseService, + notifications: { + toasts: { + addDanger: jest.fn(), + addSuccess: jest.fn(), + }, + }, }, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts index 80b346b833f41..56054948d3ac0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts @@ -48,3 +48,10 @@ export const ALERTS_ALREADY_ATTACHED_TO_CASE = i18n.translate( defaultMessage: 'All selected alerts are already attached to the case', } ); + +export const MARK_AS_UNTRACKED = i18n.translate( + 'xpack.triggersActionsUI.alerts.table.actions.markAsUntracked', + { + defaultMessage: 'Mark as untracked', + } +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx index 158867ebb5a53..b6d9616b9fc7d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx @@ -6,7 +6,7 @@ */ import { renderHook } from '@testing-library/react-hooks'; -import { useBulkActions, useBulkAddToCaseActions } from './use_bulk_actions'; +import { useBulkActions, useBulkAddToCaseActions, useBulkUntrackActions } from './use_bulk_actions'; import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; import { createCasesServiceMock } from '../index.mock'; @@ -43,6 +43,7 @@ describe('bulk action hooks', () => { const refresh = jest.fn(); const clearSelection = jest.fn(); const openNewCase = jest.fn(); + const setIsBulkActionsLoading = jest.fn(); const openExistingCase = jest.fn().mockImplementation(({ getAttachments }) => { getAttachments({ theCase: { id: caseId } }); @@ -295,14 +296,40 @@ describe('bulk action hooks', () => { }); }); + describe('useBulkUntrackActions', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should not how the bulk actions when the user lacks any observability permissions', () => { + mockKibana.mockImplementation(() => ({ + services: { + application: { capabilities: {} }, + }, + })); + const { result } = renderHook( + () => useBulkUntrackActions({ setIsBulkActionsLoading, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + expect(result.current.length).toBe(0); + }); + }); + describe('useBulkActions', () => { beforeEach(() => { jest.clearAllMocks(); - mockKibana.mockImplementation(() => ({ services: { cases: mockCaseService } })); + mockKibana.mockImplementation(() => ({ + services: { + cases: mockCaseService, + application: { capabilities: { infrastructure: { show: true } } }, + }, + })); mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); }); - it('appends the case bulk actions', async () => { + it('appends the case and untrack bulk actions', async () => { const { result } = renderHook( () => useBulkActions({ alerts: [], query: {}, casesConfig, refresh }), { @@ -331,6 +358,14 @@ describe('bulk action hooks', () => { "label": "Add to existing case", "onClick": [Function], }, + Object { + "data-test-subj": "mark-as-untracked", + "disableOnQuery": true, + "disabledLabel": "Mark as untracked", + "key": "mark-as-untracked", + "label": "Mark as untracked", + "onClick": [Function], + }, ], }, ] diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts index 59a9ad8d1e99f..47a892ef76331 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts @@ -27,9 +27,11 @@ import { ADD_TO_EXISTING_CASE, ADD_TO_NEW_CASE, ALERTS_ALREADY_ATTACHED_TO_CASE, + MARK_AS_UNTRACKED, NO_ALERTS_ADDED_TO_CASE, } from './translations'; import { TimelineItem } from '../bulk_actions/components/toolbar'; +import { useBulkUntrackAlerts } from './use_bulk_untrack_alerts'; interface BulkActionsProps { query: Pick; @@ -51,6 +53,9 @@ export interface UseBulkActions { type UseBulkAddToCaseActionsProps = Pick & Pick; +type UseBulkUntrackActionsProps = Pick & + Pick; + const filterAlertsAlreadyAttachedToCase = (alerts: TimelineItem[], caseId: string) => alerts.filter( (alert) => @@ -171,6 +176,60 @@ export const useBulkAddToCaseActions = ({ ]); }; +export const useBulkUntrackActions = ({ + setIsBulkActionsLoading, + refresh, + clearSelection, +}: UseBulkUntrackActionsProps) => { + const onSuccess = useCallback(() => { + refresh(); + clearSelection(); + }, [clearSelection, refresh]); + + const { application } = useKibana().services; + const { mutateAsync: untrackAlerts } = useBulkUntrackAlerts(); + // Check if at least one Observability feature is enabled + if (!application?.capabilities) return []; + const hasApmPermission = application.capabilities.apm?.['alerting:show']; + const hasInfrastructurePermission = application.capabilities.infrastructure?.show; + const hasLogsPermission = application.capabilities.logs?.show; + const hasUptimePermission = application.capabilities.uptime?.show; + const hasSloPermission = application.capabilities.slo?.show; + const hasObservabilityPermission = application.capabilities.observability?.show; + + if ( + !hasApmPermission && + !hasInfrastructurePermission && + !hasLogsPermission && + !hasUptimePermission && + !hasSloPermission && + !hasObservabilityPermission + ) + return []; + + return [ + { + label: MARK_AS_UNTRACKED, + key: 'mark-as-untracked', + disableOnQuery: true, + disabledLabel: MARK_AS_UNTRACKED, + 'data-test-subj': 'mark-as-untracked', + onClick: async (alerts?: TimelineItem[]) => { + if (!alerts) return; + const alertUuids = alerts.map((alert) => alert._id); + const indices = alerts.map((alert) => alert._index ?? ''); + try { + setIsBulkActionsLoading(true); + await untrackAlerts({ indices, alertUuids }); + onSuccess(); + } finally { + setIsBulkActionsLoading(false); + } + }, + }, + ]; +}; + export function useBulkActions({ alerts, casesConfig, @@ -184,15 +243,24 @@ export function useBulkActions({ const clearSelection = () => { updateBulkActionsState({ action: BulkActionsVerbs.clear }); }; + const setIsBulkActionsLoading = (isLoading: boolean = true) => { + updateBulkActionsState({ action: BulkActionsVerbs.updateAllLoadingState, isLoading }); + }; const caseBulkActions = useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }); + const untrackBulkActions = useBulkUntrackActions({ + setIsBulkActionsLoading, + refresh, + clearSelection, + }); + + const initialItems = [...caseBulkActions, ...untrackBulkActions]; - const bulkActions = - caseBulkActions.length !== 0 - ? addItemsToInitialPanel({ - panels: configBulkActionPanels, - items: caseBulkActions, - }) - : configBulkActionPanels; + const bulkActions = initialItems.length + ? addItemsToInitialPanel({ + panels: configBulkActionPanels, + items: initialItems, + }) + : configBulkActionPanels; const isBulkActionsColumnActive = bulkActions.length !== 0; @@ -200,10 +268,6 @@ export function useBulkActions({ updateBulkActionsState({ action: BulkActionsVerbs.rowCountUpdate, rowCount: alerts.length }); }, [alerts, updateBulkActionsState]); - const setIsBulkActionsLoading = (isLoading: boolean = true) => { - updateBulkActionsState({ action: BulkActionsVerbs.updateAllLoadingState, isLoading }); - }; - return { isBulkActionsColumnActive, getBulkActionsLeadingControlColumn, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts.tsx new file mode 100644 index 0000000000000..baec1aeaf86d3 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { useMutation } from '@tanstack/react-query'; +import { INTERNAL_BASE_ALERTING_API_PATH } from '@kbn/alerting-plugin/common'; +import { useKibana } from '../../../../common'; + +export const useBulkUntrackAlerts = () => { + const { + http, + notifications: { toasts }, + } = useKibana().services; + + const untrackAlerts = useMutation( + ['untrackAlerts'], + ({ indices, alertUuids }) => { + try { + const body = JSON.stringify({ + ...(indices?.length ? { indices } : {}), + ...(alertUuids ? { alert_uuids: alertUuids } : {}), + }); + return http.post(`${INTERNAL_BASE_ALERTING_API_PATH}/alerts/_bulk_untrack`, { body }); + } catch (e) { + throw new Error(`Unable to parse bulk untrack params: ${e}`); + } + }, + { + onError: (_err, params) => { + toasts.addDanger( + i18n.translate( + 'xpack.triggersActionsUI.rules.deleteConfirmationModal.errorNotification.descriptionText', + { + defaultMessage: 'Failed to untrack {uuidsCount, plural, one {alert} other {alerts}}', + values: { uuidsCount: params.alertUuids.length }, + } + ) + ); + }, + + onSuccess: (_, params) => { + toasts.addSuccess( + i18n.translate( + 'xpack.triggersActionsUI.rules.deleteConfirmationModal.successNotification.descriptionText', + { + defaultMessage: 'Untracked {uuidsCount, plural, one {alert} other {alerts}}', + values: { uuidsCount: params.alertUuids.length }, + } + ) + ); + }, + } + ); + + return untrackAlerts; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/index.ts b/x-pack/plugins/triggers_actions_ui/public/index.ts index 6d3c3bbee0d5f..7dd3d36ce6c06 100644 --- a/x-pack/plugins/triggers_actions_ui/public/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/index.ts @@ -152,3 +152,5 @@ export const getNotifyWhenOptions = async () => { export { transformRule } from './application/lib/rule_api/common_transformations'; export { validateActionFilterQuery } from './application/lib/value_validators'; + +export { useBulkUntrackAlerts } from './application/sections/alerts_table/hooks/use_bulk_untrack_alerts'; diff --git a/x-pack/test/alerting_api_integration/packages/helpers/es_test_index_tool.ts b/x-pack/test/alerting_api_integration/packages/helpers/es_test_index_tool.ts index 07fd5dba0cf23..7607cecc3e2f2 100644 --- a/x-pack/test/alerting_api_integration/packages/helpers/es_test_index_tool.ts +++ b/x-pack/test/alerting_api_integration/packages/helpers/es_test_index_tool.ts @@ -5,6 +5,7 @@ * 2.0. */ import type { Client } from '@elastic/elasticsearch'; +import { DeleteByQueryRequest } from '@elastic/elasticsearch/lib/api/types'; export const ES_TEST_INDEX_NAME = '.kibana-alerting-test-data'; @@ -135,13 +136,12 @@ export class ESTestIndexTool { } async removeAll() { - const params = { + const params: DeleteByQueryRequest = { index: this.index, - body: { - query: { - match_all: {}, - }, + query: { + match_all: {}, }, + conflicts: 'proceed', }; return await this.es.deleteByQuery(params); } diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts new file mode 100644 index 0000000000000..b2710626032fe --- /dev/null +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts @@ -0,0 +1,132 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { ES_TEST_INDEX_NAME } from '@kbn/alerting-api-integration-helpers'; +import { ALERT_STATUS, ALERT_UUID } from '@kbn/rule-data-utils'; +import { getUrlPrefix, ObjectRemover, getTestRuleData, getEventLog } from '../../../../common/lib'; +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; +import { UserAtSpaceScenarios } from '../../../scenarios'; + +const alertAsDataIndex = '.internal.alerts-observability.test.alerts.alerts-default-000001'; + +// eslint-disable-next-line import/no-default-export +export default function bulkUntrackTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const retry = getService('retry'); + const es = getService('es'); + + describe('bulk untrack', () => { + const objectRemover = new ObjectRemover(supertest); + + afterEach(async () => { + await es.deleteByQuery({ + index: alertAsDataIndex, + query: { + match_all: {}, + }, + conflicts: 'proceed', + }); + objectRemover.removeAll(); + }); + + for (const scenario of UserAtSpaceScenarios) { + describe(scenario.id, () => { + it('should bulk mark alerts as untracked', async () => { + const { body: createdRule } = await supertest + .post(`${getUrlPrefix(scenario.space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.always-firing-alert-as-data', + schedule: { interval: '24h' }, + throttle: undefined, + notify_when: undefined, + params: { + index: ES_TEST_INDEX_NAME, + reference: 'test', + }, + }) + ) + .expect(200); + objectRemover.add(scenario.space.id, createdRule.id, 'rule', 'alerting'); + + await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: scenario.space.id, + type: 'alert', + id: createdRule.id, + provider: 'alerting', + actions: new Map([['active-instance', { equal: 2 }]]), + }); + }); + + await retry.try(async () => { + const { + hits: { hits: activeAlerts }, + } = await es.search({ + index: alertAsDataIndex, + body: { query: { match_all: {} } }, + }); + + activeAlerts.forEach((activeAlert: any) => { + expect(activeAlert._source[ALERT_STATUS]).eql('active'); + }); + }); + + const { + hits: { hits: activeAlerts }, + } = await es.search({ + index: alertAsDataIndex, + body: { query: { match_all: {} } }, + }); + + const ids = activeAlerts.map((activeAlert: any) => activeAlert._source[ALERT_UUID]); + + const response = await supertestWithoutAuth + .post(`${getUrlPrefix(scenario.space.id)}/internal/alerting/alerts/_bulk_untrack`) + .set('kbn-xsrf', 'foo') + .auth(scenario.user.username, scenario.user.password) + .send({ + indices: [alertAsDataIndex], + alert_uuids: ids, + }); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'space_1_all at space1': + case 'space_1_all at space2': + case 'global_read at space1': + case 'space_1_all_alerts_none_actions at space1': + case 'space_1_all_with_restricted_fixture at space1': + expect(response.statusCode).to.eql(403); + break; + case 'superuser at space1': + expect(response.statusCode).to.eql(204); + await retry.try(async () => { + const { + hits: { hits: untrackedAlerts }, + } = await es.search({ + index: alertAsDataIndex, + body: { query: { match_all: {} } }, + }); + + untrackedAlerts.forEach((untrackedAlert: any) => { + expect(untrackedAlert._source[ALERT_STATUS]).eql('untracked'); + }); + }); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); + }); + } + }); +} diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/index.ts index 24679b228c379..8c0fb30872ac3 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/index.ts @@ -32,6 +32,7 @@ export default function alertingTests({ loadTestFile, getService }: FtrProviderC loadTestFile(require.resolve('./get_alert_summary')); loadTestFile(require.resolve('./rule_types')); loadTestFile(require.resolve('./retain_api_key')); + loadTestFile(require.resolve('./bulk_untrack')); }); }); } diff --git a/x-pack/test/apm_api_integration/tests/alerts/helpers/alerting_api_helper.ts b/x-pack/test/apm_api_integration/tests/alerts/helpers/alerting_api_helper.ts index c32f052886961..e0423d9372d1d 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/helpers/alerting_api_helper.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/helpers/alerting_api_helper.ts @@ -160,7 +160,11 @@ export async function deleteApmRules(supertest: SuperTest) { } export function deleteApmAlerts(es: Client) { - return es.deleteByQuery({ index: APM_ALERTS_INDEX, query: { match_all: {} } }); + return es.deleteByQuery({ + index: APM_ALERTS_INDEX, + conflicts: 'proceed', + query: { match_all: {} }, + }); } export async function clearKibanaApmEventLog(es: Client) { diff --git a/x-pack/test/examples/triggers_actions_ui_examples/alerts_table.ts b/x-pack/test/examples/triggers_actions_ui_examples/alerts_table.ts index 3351dfd0064b5..947849dbde332 100644 --- a/x-pack/test/examples/triggers_actions_ui_examples/alerts_table.ts +++ b/x-pack/test/examples/triggers_actions_ui_examples/alerts_table.ts @@ -54,7 +54,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await waitAndClickByTestId('close'); const headers = await find.allByCssSelector('.euiDataGridHeaderCell'); - expect(headers.length).to.be(6); + expect(headers.length).to.be(7); }); it('should take into account the column type when sorting', async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index e85222b1d6813..be230b13193f6 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -59,10 +59,12 @@ export default function ({ getService }: FtrProviderContext) { await esClient.deleteByQuery({ index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, + conflicts: 'proceed', }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', query: { term: { 'rule.id': ruleId } }, + conflicts: 'proceed', }); await dataViewApi.delete({ id: DATA_VIEW_ID, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts index 8a7e5cbebaf70..09af6988dbc29 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -47,10 +47,12 @@ export default function ({ getService }: FtrProviderContext) { await esClient.deleteByQuery({ index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, + conflicts: 'proceed', }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', query: { term: { 'rule.id': ruleId } }, + conflicts: 'proceed', }); await dataViewApi.delete({ id: DATA_VIEW_ID, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 3e6d4fccde5fc..9ab6bd73983e3 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -61,10 +61,12 @@ export default function ({ getService }: FtrProviderContext) { await esClient.deleteByQuery({ index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, + conflicts: 'proceed', }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', query: { term: { 'rule.id': ruleId } }, + conflicts: 'proceed', }); await dataViewApi.delete({ id: DATA_VIEW_ID, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index 7759e94997e64..d98334f7d4540 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -55,10 +55,12 @@ export default function ({ getService }: FtrProviderContext) { await esClient.deleteByQuery({ index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, + conflicts: 'proceed', }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', query: { term: { 'rule.id': ruleId } }, + conflicts: 'proceed', }); await dataViewApi.delete({ id: DATA_VIEW_ID, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index 1a3420b85a2e0..2cab54a072f7f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -65,10 +65,12 @@ export default function ({ getService }: FtrProviderContext) { await esClient.deleteByQuery({ index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, + conflicts: 'proceed', }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', query: { term: { 'rule.id': ruleId } }, + conflicts: 'proceed', }); await dataViewApi.delete({ id: DATA_VIEW_ID, diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index ef58b18181f7b..cc5b01292c846 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -17,7 +17,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const cases = getService('cases'); const toasts = getService('toasts'); - describe('Configure Case', function () { + // FLAKY: https://github.com/elastic/kibana/issues/166469 + describe.skip('Configure Case', function () { before(async () => { await svlCommonPage.login(); @@ -31,8 +32,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await svlCommonPage.forceLogout(); }); - // FLAKY: https://github.com/elastic/kibana/issues/166469 - describe.skip('Closure options', function () { + describe('Closure options', function () { before(async () => { await common.clickAndValidate('configure-case-button', 'case-configure-title'); }); From 82c8e0d33dd161bcec5b63fbb3714b4702abbf1f Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 4 Oct 2023 00:59:31 -0400 Subject: [PATCH 040/170] [api-docs] 2023-10-04 Daily api_docs build (#167947) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/480 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 110 +- api_docs/apm.mdx | 4 +- 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.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.devdocs.json | 62 + api_docs/controls.mdx | 4 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 8 - api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- 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 | 12 - api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 4 +- api_docs/deprecations_by_plugin.mdx | 9 +- api_docs/deprecations_by_team.mdx | 4 +- api_docs/dev_tools.mdx | 2 +- 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.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.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- 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_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_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 +- ..._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_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_code_editor_mocks.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 +- ...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 | 128 +- 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 +- 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_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 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- 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.devdocs.json | 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_assistant.devdocs.json | 4 +- api_docs/kbn_elastic_assistant.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.mdx | 2 +- 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_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_generate_csv_types.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.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 +- .../kbn_ml_trained_models_utils.devdocs.json | 103 +- api_docs/kbn_ml_trained_models_utils.mdx | 4 +- 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 +- 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 +- ..._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_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 | 7335 +++++++++++++---- api_docs/kbn_search_connectors.mdx | 4 +- api_docs/kbn_search_response_warnings.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.devdocs.json | 24 + api_docs/kbn_shared_svg.mdx | 4 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.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_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_subscription_tracking.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_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_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_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.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.devdocs.json | 4 + api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/log_explorer.mdx | 2 +- 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.devdocs.json | 16 + api_docs/ml.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 +- api_docs/observability_log_explorer.mdx | 2 +- 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.devdocs.json | 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.devdocs.json | 19 + api_docs/triggers_actions_ui.mdx | 4 +- 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.mdx | 2 +- 611 files changed, 6803 insertions(+), 2257 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 830bff4a005ee..7865515c81381 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-10-03 +date: 2023-10-04 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 1804392b220e9..4b7a5895c09d6 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 50c328aad0118..f99157d9b1296 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-10-03 +date: 2023-10-04 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 4d0a972d2196e..3a975f357cfde 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -4923,7 +4923,7 @@ "section": "def-common.RuleTypeParams", "text": "RuleTypeParams" }, - ">, \"id\" | \"snoozeSchedule\">; version?: string | undefined; }) => Promise; unmuteAll: (options: { id: string; }) => Promise; muteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; unmuteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; runSoon: (options: { id: string; }) => Promise; listRuleTypes: () => Promise, \"id\" | \"snoozeSchedule\">; version?: string | undefined; }) => Promise; unmuteAll: (options: { id: string; }) => Promise; muteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; unmuteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; bulkUntrackAlerts: (options: Readonly<{} & { indices: string[]; alertUuids: string[]; }>) => Promise; runSoon: (options: { id: string; }) => Promise; listRuleTypes: () => Promise>; getSpaceId: () => string | undefined; getAuthorization: () => ", { diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 5c77d6dd4abbc..8f74f7e7bb42b 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 62a9dab0dd5d2..a4b12f31f1486 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -408,7 +408,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/title\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"GET /internal/apm/assistant/get_error_document\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"POST /internal/apm/assistant/get_services_list\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/title\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"GET /internal/apm/assistant/get_error_document\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"POST /internal/apm/assistant/get_services_list\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" ], "path": "x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -455,7 +455,65 @@ "label": "APMServerRouteRepository", "description": [], "signature": [ - "{ \"GET /internal/apm/services/{serviceName}/profiling/functions\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/functions\"; params?: ", + "{ \"GET /internal/apm/services/{serviceName}/dashboards\": { endpoint: \"GET /internal/apm/services/{serviceName}/dashboards\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ serviceName: ", + "StringC", + "; }>; query: ", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; }; }; }) => Promise<{ serviceDashboards: ", + "SavedApmCustomDashboard", + "[]; }>; } & ", + "APMRouteCreateOptions", + "; \"DELETE /internal/apm/custom-dashboard\": { endpoint: \"DELETE /internal/apm/custom-dashboard\"; params?: ", + "TypeC", + "<{ query: ", + "TypeC", + "<{ customDashboardId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { query: { customDashboardId: string; }; }; }) => Promise; } & ", + "APMRouteCreateOptions", + "; \"POST /internal/apm/custom-dashboard\": { endpoint: \"POST /internal/apm/custom-dashboard\"; params?: ", + "TypeC", + "<{ query: ", + "UnionC", + "<[", + "PartialC", + "<{ customDashboardId: ", + "StringC", + "; }>, ", + "UndefinedC", + "]>; body: ", + "TypeC", + "<{ dashboardSavedObjectId: ", + "StringC", + "; kuery: ", + "UnionC", + "<[", + "StringC", + ", ", + "UndefinedC", + "]>; serviceNameFilterEnabled: ", + "BooleanC", + "; serviceEnvironmentFilterEnabled: ", + "BooleanC", + "; }>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { query: { customDashboardId?: string | undefined; } | undefined; body: { dashboardSavedObjectId: string; kuery: string | undefined; serviceNameFilterEnabled: boolean; serviceEnvironmentFilterEnabled: boolean; }; }; }) => Promise<", + "SavedApmCustomDashboard", + ">; } & ", + "APMRouteCreateOptions", + "; \"GET /internal/apm/services/{serviceName}/profiling/functions\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/functions\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -5804,14 +5862,58 @@ "<{ serviceName: ", "StringC", "; }>; query: ", + "IntersectionC", + "<[", "TypeC", "<{ start: ", "Type", "; end: ", "Type", - "; }>; }> | undefined; handler: ({}: ", + "; }>, ", + "TypeC", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { start: number; end: number; }; }; }) => Promise<", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { documentType: ", + "ApmDocumentType", + ".TransactionMetric | ", + "ApmDocumentType", + ".ServiceTransactionMetric | ", + "ApmDocumentType", + ".TransactionEvent; rollupInterval: ", + "RollupInterval", + "; }; }; }) => Promise<", "ServiceTransactionTypesResponse", ">; } & ", "APMRouteCreateOptions", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index d5b282e16b248..00df9f3ae880c 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) for ques | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 29 | 119 | +| 29 | 0 | 29 | 120 | ## Client diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index c1f3e881586cd..303aff25799ab 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-10-03 +date: 2023-10-04 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 5d41485cc50fd..5c4a95c5c063a 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-10-03 +date: 2023-10-04 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 b51040e21c727..2b20563d9f23d 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-10-03 +date: 2023-10-04 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 f6d9e07f6cb19..82a2760aa1990 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-10-03 +date: 2023-10-04 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 91a6c773f6c91..756c31a594314 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-10-03 +date: 2023-10-04 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 dfdd206e0dabd..a41b8226a310d 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 2b8e630e61017..df951a523d01c 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-10-03 +date: 2023-10-04 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 40855bcdb7a6e..059e6302d2a85 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-10-03 +date: 2023-10-04 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 6020e292416de..e7ac64c0a45b7 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-10-03 +date: 2023-10-04 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 3e5da871f46b9..41275f4aba27e 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-10-03 +date: 2023-10-04 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 b6d83bc2c8d2e..2d3eb40d33976 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-10-03 +date: 2023-10-04 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 790fc9bddf008..6d31a18297b04 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-10-03 +date: 2023-10-04 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 1679a5b22c7e0..aa95d1e752b65 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-10-03 +date: 2023-10-04 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 5b78a80a6516b..ce5120e848d2c 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index abe8e403bdf60..ca34f2c954ae9 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -6045,6 +6045,68 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "controls", + "id": "def-common.generateNewControlIds", + "type": "Function", + "tags": [], + "label": "generateNewControlIds", + "description": [], + "signature": [ + "(controlGroupInput?: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.PersistableControlGroupInput", + "text": "PersistableControlGroupInput" + }, + " | undefined) => { panels: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlsPanels", + "text": "ControlsPanels" + }, + "; controlStyle: ", + "ControlStyle", + "; ignoreParentSettings?: ", + "ParentIgnoreSettings", + " | undefined; chainingSystem: ", + "ControlGroupChainingSystem", + "; } | undefined" + ], + "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-common.generateNewControlIds.$1", + "type": "Object", + "tags": [], + "label": "controlGroupInput", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.PersistableControlGroupInput", + "text": "PersistableControlGroupInput" + }, + " | undefined" + ], + "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "controls", "id": "def-common.getDefaultControlGroupInput", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index e0f16902995ae..eff0f089f8eb7 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 309 | 0 | 302 | 16 | +| 311 | 0 | 304 | 16 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 08e128500d839..35ee99b6b5e7c 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-10-03 +date: 2023-10-04 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 ee4ef45ec9fae..088e364318f89 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-10-03 +date: 2023-10-04 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 e265a1f2e6626..412b45bf97d74 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-10-03 +date: 2023-10-04 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 86b1188504ad7..6597f73d9a969 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -13670,10 +13670,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/hooks/use_search_items/common.ts" @@ -21415,10 +21411,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/hooks/use_search_items/common.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index a473b80e58d23..3709c8ab988c6 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 5f5cefcab0fc5..0afd41cff92a8 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 4a94497cb10e5..f9460e94e9899 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 7bdc9b4cbbc57..03846af7220a7 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-10-03 +date: 2023-10-04 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 9971996e10951..5744ba4b8bbf2 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-10-03 +date: 2023-10-04 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 6f30e2c306f7b..952e15de74e11 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-10-03 +date: 2023-10-04 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 aa6f12fb292d7..fae636cd7d552 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -627,10 +627,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/hooks/use_search_items/common.ts" @@ -8620,10 +8616,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/hooks/use_search_items/common.ts" @@ -15674,10 +15666,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/hooks/use_search_items/common.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 019269f51387d..93b0f65f9101b 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-10-03 +date: 2023-10-04 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 dba229fd4957f..e5d3358eb677f 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 419544259e202..e1a1b3a004005 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -139,7 +139,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core | - | | | @kbn/core-plugins-server-internal | - | | | security, aiops, licenseManagement, ml, profiling, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | -| | spaces, security, actions, alerting, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, osquery, securitySolution, painlessLab, rollup, searchprofiler, snapshotRestore, transform, upgradeAssistant | 8.8.0 | +| | spaces, security, actions, alerting, aiops, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, osquery, securitySolution, painlessLab, rollup, searchprofiler, snapshotRestore, transform, upgradeAssistant | 8.8.0 | | | apm, fleet, security, securitySolution | 8.8.0 | | | apm, fleet, security, securitySolution | 8.8.0 | | | spaces, security, alerting | 8.8.0 | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 4c55254532c92..9bc8d03a4ce6e 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -381,6 +381,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider), [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider), [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/plugin.tsx#:~:text=license%24) | 8.8.0 | +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [search_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/application/utils/search_utils.ts#:~:text=SimpleSavedObject), [search_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/application/utils/search_utils.ts#:~:text=SimpleSavedObject) | - | @@ -1465,12 +1466,12 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion)+ 12 more | - | | | [dependencies_start_mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/mock/endpoint/dependencies_start_mock.ts#:~:text=indexPatterns) | - | | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion)+ 78 more | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 30 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 28 more | - | | | [wrap_search_source_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.ts#:~:text=create) | - | | | [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch) | - | | | [api.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts#:~:text=options) | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 30 more | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 10 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 28 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 9 more | - | | | [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/saved_objects.ts#:~:text=toMountPoint)+ 3 more | - | | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider) | - | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 86a346dcc28d9..b9d10871a4d39 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -120,7 +120,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| | ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/plugin.tsx#:~:text=license%24) | 8.8.0 | -| ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/transform/server/services/license.ts#:~:text=license%24) | 8.8.0 | +| ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/transform/server/services/license.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/server/plugin.ts#:~:text=license%24) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 14fcfc6eb2dc0..238ae40d31a40 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 17da7c6e8ac83..068620922588d 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-10-03 +date: 2023-10-04 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 639642ccde073..7390866525e15 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-10-03 +date: 2023-10-04 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 76cca1b6fe014..a99c2f8eb1411 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-10-03 +date: 2023-10-04 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 e83988ce14e67..2a80ba9cd8783 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-10-03 +date: 2023-10-04 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 118057dd7d301..00deb995b5c95 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-10-03 +date: 2023-10-04 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 d7f3bd4789069..f2ff6b7d655d9 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-10-03 +date: 2023-10-04 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 4227073a25075..92df92379c1a4 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-10-03 +date: 2023-10-04 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 ef1581797820c..8ba7beec0ce61 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-10-03 +date: 2023-10-04 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 74cb7b5ce06a6..222295607199b 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 6f75f1be2cf07..9cebdbcb838fd 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-10-03 +date: 2023-10-04 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 a4cc63566d061..1d4b555eb678d 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-10-03 +date: 2023-10-04 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 9a7d4b8b6fb3a..8c6c6cd16ff30 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-10-03 +date: 2023-10-04 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 d6a5a18bb049e..37d670daa555d 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-10-03 +date: 2023-10-04 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 6cc61b692eb93..1b9a91b390ed8 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 4c434a034fc2a..8226afed10eb6 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index c81c27fe290f1..81a0266817e70 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 7f4fa034e7a56..7c7bff6beab7f 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index df80ced15c1fc..1533707c0d55c 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 1ea36d6f5c6c5..453e5dccca4da 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index acc562223d9d1..8256b7a4d25fe 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 7aed3941ccd91..0bcd2e1c069e1 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 3226452595b6a..08fdea666da30 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-10-03 +date: 2023-10-04 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 1a8ff18f94962..2ad70d81f0db3 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 2520892eddd7d..5506a938d0ff2 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index ac6ddd05c4abd..a6aaa2f548e18 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index d81c138919e0e..e5c6384f99c4c 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index dd479890b39ab..7b70d059e6285 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-10-03 +date: 2023-10-04 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 1d11dc93166b0..1eea9336254fb 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-10-03 +date: 2023-10-04 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 0dd7d01913000..a7f8564a4da2b 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-10-03 +date: 2023-10-04 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 6a15156dc00fb..574406b54f72e 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-10-03 +date: 2023-10-04 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 ffb8f75442c5d..29e2a7e7ee869 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-10-03 +date: 2023-10-04 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 df12ecc432db6..babd1ad4101ad 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-10-03 +date: 2023-10-04 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 eb1515947b628..848e80c4294f3 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-10-03 +date: 2023-10-04 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 311c2d9063694..3b4f019aa6cee 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-10-03 +date: 2023-10-04 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 0c1557f00bb45..1362b9f2bcadd 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-10-03 +date: 2023-10-04 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 8f440cc95a011..c3ac645b73385 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-10-03 +date: 2023-10-04 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 cb74be56d5413..660b526285c73 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-10-03 +date: 2023-10-04 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 7a32b30be5610..2d60d18aed9be 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-10-03 +date: 2023-10-04 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 15d1271acb446..a8de454418166 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-10-03 +date: 2023-10-04 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 17f3a9e594f06..59449d9c99d55 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-10-03 +date: 2023-10-04 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 119cf2660fe55..dc3ec65a000d3 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-10-03 +date: 2023-10-04 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 95e5e76a9058a..b63a05e5cd721 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-10-03 +date: 2023-10-04 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 c15ed2b164957..eddc7c3011213 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index fdd8996e22739..c2b12c2585d79 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-10-03 +date: 2023-10-04 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 0ac64b2e53ac5..17395efff2aa7 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 11013aa1805aa..0b109ce3d397e 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-10-03 +date: 2023-10-04 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 bf29c16a3184f..b36a24fae1c6b 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 711b62fb0ffa2..700b5e310e784 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 6c77e59c3bdf7..629f986829a63 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-10-03 +date: 2023-10-04 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 622ffabf84ffd..f4ce75294b55c 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-10-03 +date: 2023-10-04 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 af7246b8ec006..e4cd3e8f0b593 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 9a4c60041f739..050ac31dab502 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 96f8d191e74f6..46c29a791c795 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-10-03 +date: 2023-10-04 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 33eb32bcace3a..da46224b109bf 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-10-03 +date: 2023-10-04 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 8bba87a242d49..7645fcf4d2d94 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-10-03 +date: 2023-10-04 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 54a227ec3c8e4..d4461115614b9 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-10-03 +date: 2023-10-04 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 dfc6e7119d6c6..a426de3247da4 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-10-03 +date: 2023-10-04 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 435cd177d3862..311ce4475a935 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-10-03 +date: 2023-10-04 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 972441d77b541..838e32eb9a262 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-10-03 +date: 2023-10-04 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 0eea1ac5a583f..97a176d006159 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 a9604dc24c2c1..eae91b473cb53 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 86a26091bee34..e71bfdca41094 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-10-03 +date: 2023-10-04 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 455dfad92b250..f510d835d4e32 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-10-03 +date: 2023-10-04 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 4ab10a99e81a4..390edf689fbbd 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-10-03 +date: 2023-10-04 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 3a3304bbe253c..3cc18b1c2d517 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-10-03 +date: 2023-10-04 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 4b94db5472494..7c0c354823b90 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-10-03 +date: 2023-10-04 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 391ff5e0ba1b3..8eb28b43c63b8 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-10-03 +date: 2023-10-04 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 f916bab085bb5..1ce5c5f2274d9 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-10-03 +date: 2023-10-04 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 f96bb8172e1b2..7da38d1ded8fa 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-10-03 +date: 2023-10-04 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 49c1fe515c925..7f2d3c5a5c82b 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 2d2e07689660b..c9e201e7e662c 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index a14916519cabd..25b484ce3e5f0 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-10-03 +date: 2023-10-04 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 a0dc27b59df5f..adfb1aa3fca7f 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-10-03 +date: 2023-10-04 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 7d55cdbc1b43d..355fa2434225f 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 66c9c83ec8a6c..abe297cfee59e 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-10-03 +date: 2023-10-04 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 85fc2b4ef160a..1fe4613e66472 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-10-03 +date: 2023-10-04 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 f358121c1e786..efe1b163da05e 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-10-03 +date: 2023-10-04 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 8233e8e38ada6..88878002f7136 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 47b51b988df95..ad683c3f39712 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-10-03 +date: 2023-10-04 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 fb3d47f36e953..3cbce545bae6a 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 b7bc981242754..96fc9b553ec79 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 591e6054d5ccf..8d03118fe4acc 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 69293c25e96ea..34a4579235f35 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 f28e929c72c3e..1f9f99069c43c 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-10-03 +date: 2023-10-04 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 a46ef0d3718c7..c9678edd1a781 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 393dd5492704d..087da7b66a7fe 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 09f14eeb19884..bb23b12e8ea9d 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 fece4f2fdf3c3..281ce96184988 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 4ce3449d8a4f7..6cebcbf3745d0 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 02f01a938b47a..cc6cd6f93f082 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-10-03 +date: 2023-10-04 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 e32a6ccf183f9..d73e4c10578b1 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 b07c5a804dbad..9c1cdf6c52abc 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 29914546f83af..f615c70a4ad85 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 0a6acf72ed3e3..7c630ed3543d4 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 cbd846523d9a8..c86578d403d06 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-10-03 +date: 2023-10-04 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 93479c8de44be..8ae992ea3a230 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 ef819d2ced1cd..fe17576adfb01 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 721280a5730b6..7f19981f3d57f 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 3a1a0622305d9..c9f49f6962342 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-10-03 +date: 2023-10-04 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 4e86f3e278055..664bb01c9b9f9 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-10-03 +date: 2023-10-04 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 980e8b3aa7749..bf7d1d0a26721 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 52f27f013fc45..1ed5d87c0543a 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 18ae872c1f1df..b6204480a8099 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 6a0984948ed4d..969ca5a6d49c2 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 63eb8500ee7ad..7289c0475cfdf 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 eb21e58ac7bc6..57907642925c0 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 cdd3b08f5931b..ff9c078288354 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 e98ff23262c7f..83fa609336574 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-10-03 +date: 2023-10-04 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 b7c564cf3eb28..98b99cfc39b13 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-10-03 +date: 2023-10-04 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 411308e1a35a3..d77dcbb152441 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 1e3ff95472227..957b6753dc31a 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 f72cb45c672b8..dd9b8abf41be7 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 1718544bf9cbb..ac7571da0b2db 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 72b86ed722952..5efb83f3307bd 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1a3cfb1b7e41e..0e9c94a9269c3 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-10-03 +date: 2023-10-04 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 40fd9b4254459..7920bd0900222 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-10-03 +date: 2023-10-04 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 9ba765d5b6edd..8a772cadb6f33 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 32f3b1a4310c4..342cbf06052ce 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 dbce97ed8139b..15d00fa8a9c0a 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 b8bebcacd13ee..a270167e53110 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 7e7a99817f633..a7e257b21e686 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-10-03 +date: 2023-10-04 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 15250578f8089..527ec2f5df9fb 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 b9d3840a52a03..be7963a1bb8eb 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 3acd4d2cc710b..21a60d25046fd 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1136fb571b293..3af0a99784b75 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-10-03 +date: 2023-10-04 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 daa6523d60a2f..f49735b9b263a 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 130b30d8211a0..0f1604993ebbb 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 d68dab225210c..bbe87b748077d 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 8ad822c48e56d..3f20471c1931d 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 2cd421e035005..068ce3276dcaa 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 347de818e0987..b7d1d6977cc0e 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 e2234a70e32cf..557c3d83a1664 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 8a9a494e2d7b7..526d856120728 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-10-03 +date: 2023-10-04 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 10e1b351ee3ba..fb4b13e04f778 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-10-03 +date: 2023-10-04 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 33d713cdad1fc..416305d3304c1 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 9054924d9632a..82cb2abc519aa 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 29e040e53524b..b77b9ec5b5bf9 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 6e7c96316b005..d418bd45971be 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 ae45369820833..4d8aed97b127a 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 baafd675f507f..22aca6a0bab37 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 557bd3b7ca668..8964716d4d7d1 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 daa78d3be8e0f..513e082be4958 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-10-03 +date: 2023-10-04 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 b3f53ac0ab28a..fec6873ab6b71 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 f93c38cbe0230..ef4148d762d89 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-10-03 +date: 2023-10-04 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 165dd9bcdc442..27bf92d460a94 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-10-03 +date: 2023-10-04 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 959ef1078922a..ac32abd746c73 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 26f188039bbb8..4f9ade14cffc4 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 cfe686508e1a1..2a590a816ee79 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 167fa2468fd79..9985d442babd6 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 8e3a44972fa2e..52c4d79d9fc03 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4291,22 +4291,6 @@ "plugin": "monitoring", "path": "x-pack/plugins/monitoring/server/plugin.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/routes/resolver.ts" @@ -6077,6 +6061,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/update_flapping_settings.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_untrack/bulk_untrack_alert_route.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.ts" @@ -6701,26 +6689,6 @@ "plugin": "monitoring", "path": "x-pack/plugins/monitoring/server/plugin.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/routes/resolver.ts" @@ -6785,6 +6753,10 @@ "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/policy.ts" }, + { + "plugin": "stackConnectors", + "path": "x-pack/plugins/stack_connectors/server/routes/valid_slack_api_channels.ts" + }, { "plugin": "synthetics", "path": "x-pack/plugins/synthetics/server/server.ts" @@ -8597,22 +8569,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts" - }, { "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/router.ts" @@ -9119,14 +9075,6 @@ "plugin": "logstash", "path": "x-pack/plugins/logstash/server/routes/pipeline/delete.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts" - }, { "plugin": "reporting", "path": "x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts" @@ -13473,6 +13421,22 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/privileges/read_privileges_route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timeline/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/get_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/resolve_timeline/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/telemetry/telemetry_detection_rules_preview_route.ts" @@ -14557,6 +14521,18 @@ "plugin": "maps", "path": "x-pack/plugins/maps/server/data_indexing/indexing_routes.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/create_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/import_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/prepackaged_timelines/install_prepackaged_timelines/index.ts" + }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts" @@ -14665,6 +14641,14 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/open_close_signals_route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/indices/delete_indices_route.ts" @@ -14953,6 +14937,22 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts" + }, { "plugin": "@kbn/core-http-router-server-internal", "path": "packages/core/http/core-http-router-server-internal/src/versioned_router/core_versioned_router.ts" @@ -15161,6 +15161,14 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/delete_index_route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/stored_scripts/delete_script_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 076338f11afd5..c90bf8799f663 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-10-03 +date: 2023-10-04 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 4c4ce150a6795..532b7a6bf1ca7 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 e2f170268cfbf..fe959d8f5d1a1 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1faca0d853081..12444c9c0b8a4 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 97d4eab6e5dbe..1bcd6ea14bd11 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 7e6a3de30ca06..1b168c74b8b58 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-10-03 +date: 2023-10-04 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 94b3cf0e6622d..db79b11229bb4 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 9ee5bcfc76eee..b28d89e823714 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1774b61303f95..bda20eb073852 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 acdeda1426d19..152ec865a023c 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 20ddafa360f4b..0e648f41445e7 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 e4f24b2b7c50e..92043c6e048f4 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 0242cf4f4fc8a..d80f89e60458f 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 7cd438589fe03..5f6874f0f947e 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-10-03 +date: 2023-10-04 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 b47762565fe3c..e09c0816da08c 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 4db400d544492..56982d0b02411 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 33fac30696ff6..7b210b2e1c977 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 d9488ef55f67f..8faee45bb3cb1 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-10-03 +date: 2023-10-04 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 48616b4dc6510..c9066c2d388bc 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 e78cc651df943..f8741125c30fa 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 46770c82d70f0..eaf4235e55930 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 f0e50c25f7347..377853939d053 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 4020b2469882a..a1ed8bca0727b 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-10-03 +date: 2023-10-04 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 4c48b63718627..c9791e4c7292f 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 6edfc4e9f4e62..ca5fdeb6a2128 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 96c7a3990e8ad..1bbbf0ffa6665 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 f3b9c391b5b70..c2cc20277c448 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-10-03 +date: 2023-10-04 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 e485a6b278fe5..18aa7bd340615 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 c833e926dc07c..c8ca73f4c2e60 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 087447e8b4359..260f7af02d28d 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 077398845e7bc..20dc5d68a4a93 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 333470c41996c..7af7dbcf72952 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 f281de72e52ed..73345e735c135 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 3a32bc9f99e19..270b1c8f60f01 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 e1f6608047168..9acd2c768be29 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 daedca04e9132..bc66a8dd4177e 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 bf737e6c1f3e6..83ba09196d96f 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 5dc2822ca01a1..db4d1acf2e5cd 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-10-03 +date: 2023-10-04 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 1245472dde6c7..a04c45abece2b 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 ef919b8fe7f12..7593a5b6f3d98 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-10-03 +date: 2023-10-04 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 a49baeb8d3b82..a2740a34940a3 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 668ff48d43927..f1f2d95bf2531 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 34fbe5e8427b4..50343f33cf49e 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 14335ac162d38..a339dd100da34 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 49ad26c6a7cac..58a9170317312 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 b17207b85e37a..151f4b0660106 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 c7da95039f63d..b102b1093b222 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-10-03 +date: 2023-10-04 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 2ddc4e84fcc5f..32dd08ca19744 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1335d3594c62d..21ec40e2563c0 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 9be7cf2024b54..23df10d67f7e4 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 17581970cdc7e..7c91d9670245b 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 bce8b40d34ae3..9880adee6e781 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 8dde01099a5e6..8d5ce601b5d22 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 0234adc4c6d77..c21a4af02a9f4 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-10-03 +date: 2023-10-04 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 749604b0d5be8..bf157cd79ce30 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 3999f398bdabf..6ba2e53ec11c5 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 3bd0cf2dd68b7..8d8fb5a9f1b8a 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 0d419ea99c8e7..3ab30ff55eeed 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 0efcb66582ce2..3efc97ac9b050 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-10-03 +date: 2023-10-04 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 42d213880d320..3cfcb0706e2ad 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 b8fd27082ae5f..0408a171e7978 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 cb46b1b346679..7f179227ab375 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-10-03 +date: 2023-10-04 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 2d2a842c2f488..e9b61ff7b99f7 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-10-03 +date: 2023-10-04 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 e838dc7403a57..e1faad06d6148 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 095595bebab25..3ed39cb6c294c 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-10-03 +date: 2023-10-04 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 3ccca355ddc9f..3e8b3cb6b2ed0 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 506ae9016934c..504cb4a1ed871 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 0f0c80ec261d9..310b482ee0d34 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-10-03 +date: 2023-10-04 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 bf49208bfacdf..3380018fdfba3 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 8b5cecde6606a..1a71653a78e28 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-10-03 +date: 2023-10-04 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 74c98b048ebb3..3006ade153153 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2023-10-03 +date: 2023-10-04 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 4b102159d054f..c23537c785d7b 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-10-03 +date: 2023-10-04 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 cab73f2367ff3..df3d8c0bda577 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 e7ca95d3234d0..54aa802f18b17 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 1ec41ccf5e166..6b4bb2377720f 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 b4ae27e566664..d1c43f217cfa0 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 93ad57f6a34fa..0c8a899aba681 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 21135b30cb7a1..ca3f405e911a2 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 1da88bab3c6f1..6297dd680a265 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-10-03 +date: 2023-10-04 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 676f07cebb4b2..b6994aacb6b79 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-10-03 +date: 2023-10-04 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 a7175c4cb5602..f5eead18510aa 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 699d93cd96864..2d483f1918899 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 9f01c12af0f23..f73dbb3ec7f2c 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-10-03 +date: 2023-10-04 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 127a790404c22..310ed94c63830 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 6181fee2aeee0..3536f096d9dd5 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 80ba7f8fc7c72..fd17d4fed17d7 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-10-03 +date: 2023-10-04 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 ebf6ab1485f7d..58c629c941615 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-10-03 +date: 2023-10-04 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 7a7af889154c8..df98672012180 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 62c7d8b695a71..ad88ceb2104eb 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-10-03 +date: 2023-10-04 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 4343bbbb85f06..5d2a239ab71de 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 4944921bb3baf..a69548f8adc4f 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-10-03 +date: 2023-10-04 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 4cf916b85864f..f9cbc955ef98f 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-10-03 +date: 2023-10-04 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 0fe975d11b716..eddf3cc179871 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-10-03 +date: 2023-10-04 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 4f2a8db32d0ec..15f52e0102c70 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-10-03 +date: 2023-10-04 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 b65b7016361bc..bcf03f43a1360 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-10-03 +date: 2023-10-04 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 cc8829c98715b..4a7619a98d584 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-10-03 +date: 2023-10-04 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 ade38f11c01e3..45d2dd65edec5 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-10-03 +date: 2023-10-04 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 cf4187790083a..e87e7d58c6db1 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index a3cc4b6c1e7d4..3281642e94f6a 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index d6650630b2368..27da2bb89123d 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-10-03 +date: 2023-10-04 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 ba7929ffcec6b..65c410e3da692 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-10-03 +date: 2023-10-04 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 706416b9d5f3e..c57f48430a741 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-10-03 +date: 2023-10-04 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 91534499712c4..3599cf73e846b 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-10-03 +date: 2023-10-04 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 8062d2d817d72..5ff8ccb2e9884 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-10-03 +date: 2023-10-04 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 85bad7bfecb78..5366921bffaaa 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-10-03 +date: 2023-10-04 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 ae6f6f9a2dc24..aa88314638326 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-10-03 +date: 2023-10-04 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 f0b050982d23e..d4c5cec74fdcc 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-10-03 +date: 2023-10-04 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 a3c1a49fc6584..2937bcffe4e21 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 b3dfb5dbb725d..a225f6c0a0a08 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 2d0cb600191df..b52457797ba8f 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -300,7 +300,7 @@ "label": "enterpriseSearch", "description": [], "signature": [ - "{ readonly aiSearchDoc: string; readonly aiSearchHelp: string; readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsCORS: string; readonly behavioralAnalyticsEvents: string; readonly buildConnector: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsAzureBlobStorage: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; readonly connectorsDropbox: string; readonly connectorsGithub: string; readonly connectorsGoogleCloudStorage: string; readonly connectorsGoogleDrive: string; readonly connectorsGmail: string; readonly connectorsJira: string; readonly connectorsMicrosoftSQL: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsNative: string; readonly connectorsNetworkDrive: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; readonly connectorsPostgreSQL: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; readonly connectorsSlack: string; readonly connectorsWorkplaceSearch: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly elser: string; readonly engines: string; readonly indexApi: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; readonly knnSearchCombine: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly mlDocumentEnrichment: string; readonly mlDocumentEnrichmentUpdateMappings: string; readonly searchApplicationsTemplates: string; readonly searchApplicationsSearchApi: string; readonly searchApplications: string; readonly searchApplicationsSearch: string; readonly searchLabs: string; readonly searchLabsRepo: string; readonly searchTemplates: string; readonly start: string; readonly supportedNlpModels: string; readonly syncRules: string; readonly trainedModels: string; readonly textEmbedding: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" + "{ readonly aiSearchDoc: string; readonly aiSearchHelp: string; readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsCORS: string; readonly behavioralAnalyticsEvents: string; readonly buildConnector: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsAzureBlobStorage: string; readonly connectorsBox: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; readonly connectorsDropbox: string; readonly connectorsGithub: string; readonly connectorsGoogleCloudStorage: string; readonly connectorsGoogleDrive: string; readonly connectorsGmail: string; readonly connectorsJira: string; readonly connectorsMicrosoftSQL: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsNative: string; readonly connectorsNetworkDrive: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; readonly connectorsOutlook: string; readonly connectorsPostgreSQL: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; readonly connectorsTeams: string; readonly connectorsSlack: string; readonly connectorsWorkplaceSearch: string; readonly connectorsZoom: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly elser: string; readonly engines: string; readonly indexApi: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; readonly knnSearchCombine: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly mlDocumentEnrichment: string; readonly mlDocumentEnrichmentUpdateMappings: string; readonly searchApplicationsTemplates: string; readonly searchApplicationsSearchApi: string; readonly searchApplications: string; readonly searchApplicationsSearch: string; readonly searchLabs: string; readonly searchLabsRepo: string; readonly searchTemplates: string; readonly start: string; readonly supportedNlpModels: string; readonly syncRules: string; readonly trainedModels: string; readonly textEmbedding: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 5d404f88e48d0..0bc1a8c54d042 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-10-03 +date: 2023-10-04 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 a08b1e57f5ebc..695014c4e8cfa 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 4c1c7e0fea79b..58159568bf8f2 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-10-03 +date: 2023-10-04 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 7c35cfcde2f0f..7166a84534dcc 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-10-03 +date: 2023-10-04 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 6c395da2a4047..5444ac7240385 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-10-03 +date: 2023-10-04 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 66acc6b9984b6..77f3fa578d6cd 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index b507435efa60c..ba744cf57e0c1 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -159,7 +159,7 @@ "label": "AssistantProvider", "description": [], "signature": [ - "({ actionTypeRegistry, assistantAvailability, assistantLangChain, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, baseAllowReplacement, defaultAllow, defaultAllowReplacement, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, getInitialConversations, nameSpace, setConversations, setDefaultAllow, setDefaultAllowReplacement, title, }: React.PropsWithChildren<", + "({ actionTypeRegistry, assistantAvailability, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, baseAllowReplacement, defaultAllow, defaultAllowReplacement, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, getInitialConversations, modelEvaluatorEnabled, nameSpace, setConversations, setDefaultAllow, setDefaultAllowReplacement, title, }: React.PropsWithChildren<", "AssistantProviderProps", ">) => JSX.Element" ], @@ -172,7 +172,7 @@ "id": "def-public.AssistantProvider.$1", "type": "CompoundType", "tags": [], - "label": "{\n actionTypeRegistry,\n assistantAvailability,\n assistantLangChain,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n baseAllow,\n baseAllowReplacement,\n defaultAllow,\n defaultAllowReplacement,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n getInitialConversations,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n setConversations,\n setDefaultAllow,\n setDefaultAllowReplacement,\n title = DEFAULT_ASSISTANT_TITLE,\n}", + "label": "{\n actionTypeRegistry,\n assistantAvailability,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n baseAllow,\n baseAllowReplacement,\n defaultAllow,\n defaultAllowReplacement,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n getInitialConversations,\n modelEvaluatorEnabled = false,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n setConversations,\n setDefaultAllow,\n setDefaultAllowReplacement,\n title = DEFAULT_ASSISTANT_TITLE,\n}", "description": [], "signature": [ "React.PropsWithChildren<", diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 3b4649864e546..cf859f629faa8 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index f420346d1194d..7cbadfcc9827a 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-10-03 +date: 2023-10-04 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 a3c94a69df712..adecd141c7414 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-10-03 +date: 2023-10-04 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 b21ec30ffc0fe..4ba938b753052 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index a536cf0af443c..ccdcb3dba0e46 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 3a1d2f10adab9..030ac91b423f5 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-10-03 +date: 2023-10-04 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 8cabff8dc1c73..7b476cd7fd11f 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-10-03 +date: 2023-10-04 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 c1d29d145ee99..a7a12d3447cf0 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-10-03 +date: 2023-10-04 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 626142c5b17dd..0bd569188da06 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-10-03 +date: 2023-10-04 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 cf7f8e0985075..158edc5b86c65 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-10-03 +date: 2023-10-04 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 ac2b4ff9c7e74..b6fbf7f7bb289 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index af600c96ac78f..6796b16f5237a 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-10-03 +date: 2023-10-04 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 e3b9484caa277..07f237321de52 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-10-03 +date: 2023-10-04 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 089531f75f812..34e0d43faa94d 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-10-03 +date: 2023-10-04 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 a25b1279970f0..1738895575923 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-10-03 +date: 2023-10-04 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 0403b9cf2ac1c..719969da565e8 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index 749460918dbbd..810b40dc2640c 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 01719e6531bb7..406e4541e1d7f 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-10-03 +date: 2023-10-04 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 2d6b7062337d7..86dea148b967f 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-10-03 +date: 2023-10-04 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 5a152305dcbfe..9bf79be513a86 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 79d7a6295c7b2..f470d8f8a6cf4 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-10-03 +date: 2023-10-04 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 d9ed94233d1d9..3ad45637e66c3 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-10-03 +date: 2023-10-04 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 43baa1ce06b61..57b4cf8b5aa43 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-10-03 +date: 2023-10-04 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 5100ccca5282a..8ac2fe4cb76fe 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-10-03 +date: 2023-10-04 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 9062043a06f0b..ac93215a66425 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-10-03 +date: 2023-10-04 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 f1aff6b0facef..f47825f2f54ac 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-10-03 +date: 2023-10-04 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 a480a69f040f9..4cf3b9ce1c213 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-10-03 +date: 2023-10-04 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 7082d53202703..85bb64c864a43 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-10-03 +date: 2023-10-04 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 bd68631626e35..e869624164d7e 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 a8f2027c07818..87c2fa1d1a2b9 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-10-03 +date: 2023-10-04 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 2d55f6d276bdb..dad7dd81c0f74 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-10-03 +date: 2023-10-04 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 12ed507b63a13..e4877891dfddc 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-10-03 +date: 2023-10-04 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 b6f4e9c9f1a26..4d50897248da0 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-10-03 +date: 2023-10-04 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 8561357152e05..aabfd0fa99189 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-10-03 +date: 2023-10-04 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 7d4fb78cdc850..f50cb2a2a4889 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 8412701c35f74..48595d9349706 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-10-03 +date: 2023-10-04 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 d1062032bb4d6..30a6da003d0a0 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 3a256ce0c29d3..f6d747ec95282 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-10-03 +date: 2023-10-04 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 89b853fe0af97..a4415118cbca0 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-10-03 +date: 2023-10-04 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 888a83fb89550..6c3a050991bd1 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2023-10-03 +date: 2023-10-04 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 e7bad6fd29dbb..4c3ca9eeef417 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2023-10-03 +date: 2023-10-04 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 32127c9feae6c..9bc2b8fa786ce 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-10-03 +date: 2023-10-04 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 1870817da32ee..b28b93d6f6862 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-10-03 +date: 2023-10-04 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 9071519c38b88..4bc51cc169539 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2023-10-03 +date: 2023-10-04 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 669c45fbcba16..d78504247f227 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-10-03 +date: 2023-10-04 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 f36bc4ee8b27e..f53797c3b7172 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-10-03 +date: 2023-10-04 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 b387ea7670494..18c2b07f72d85 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-10-03 +date: 2023-10-04 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 038e2943e53b6..18aeadde73881 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-10-03 +date: 2023-10-04 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 d249ff374eb03..caac16a9f5e32 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-10-03 +date: 2023-10-04 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 06b5897de9539..ac6eca560bd67 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index d4e06312a42be..2712c4dbed297 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-10-03 +date: 2023-10-04 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 9f887e3a0cfdc..ca9e24e992fcb 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 655af99dedd55..976bbcbaa80ef 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 1ce67b8e47269..d7c9b0ae80fe5 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 53940bec9d3d3..1e14fd5e52cb7 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-10-03 +date: 2023-10-04 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 e42320480bbf9..3990a8bfc55b1 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2023-10-03 +date: 2023-10-04 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 0fa059dd284f7..ad874267b8817 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 501aed6cd3255..6f5672379a2f3 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-10-03 +date: 2023-10-04 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 63dccde700d37..e8c6a7b200e85 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-10-03 +date: 2023-10-04 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 4b262fb16efaa..d94b4b0980a3c 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 b5affa9093116..e6186a1931297 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 90064813b8844..64452c2521165 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-10-03 +date: 2023-10-04 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 561e859e5a614..2e702ff1859d4 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-10-03 +date: 2023-10-04 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 d258162165866..c6435521f79f6 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-10-03 +date: 2023-10-04 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 e1ec650d8068f..febe7eb79e2ff 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-10-03 +date: 2023-10-04 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 ec452f3027b2b..a86280bd83138 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-10-03 +date: 2023-10-04 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 144dfdd3db8f4..7603d7cc69c0a 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-10-03 +date: 2023-10-04 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 d6b2ed842f48e..d53550e2ea97e 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 10934e87fbb20..e423084c6a2b6 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 b6eccd75091b2..037ac91309614 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 ccb3674b36e4a..63d2ec3c20d1f 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 92c8b52b9a3f6..2f03f56501dbd 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 09add5e81cccd..ee0882e668509 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index d074c0826737e..d2bb275d5a25d 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -66,6 +66,17 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ModelDefinition.modelName", + "type": "string", + "tags": [], + "label": "modelName", + "description": [], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/ml-trained-models-utils", "id": "def-common.ModelDefinition.version", @@ -157,6 +168,20 @@ "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ModelDefinition.hidden", + "type": "CompoundType", + "tags": [], + "label": "hidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -206,6 +231,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ELASTIC_MODEL_TAG", + "type": "string", + "tags": [], + "label": "ELASTIC_MODEL_TAG", + "description": [], + "signature": [ + "\"elastic\"" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ELASTIC_MODEL_TYPE", + "type": "string", + "tags": [], + "label": "ELASTIC_MODEL_TYPE", + "description": [], + "signature": [ + "\"elastic\"" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ml-trained-models-utils", "id": "def-common.ElasticModelId", @@ -221,6 +276,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ELSER_ID_V1", + "type": "string", + "tags": [], + "label": "ELSER_ID_V1", + "description": [], + "signature": [ + "\".elser_model_1\"" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ml-trained-models-utils", "id": "def-common.ElserVersion", @@ -244,6 +314,7 @@ "label": "ModelDefinitionResponse", "description": [], "signature": [ + "Omit<", { "pluginId": "@kbn/ml-trained-models-utils", "scope": "common", @@ -251,7 +322,22 @@ "section": "def-common.ModelDefinition", "text": "ModelDefinition" }, - " & { name: string; }" + ", \"modelName\"> & { name: string; }" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.ModelState", + "type": "Type", + "tags": [], + "label": "ModelState", + "description": [], + "signature": [ + "\"started\" | \"starting\" | \"stopping\" | \"downloading\" | \"downloaded\" | \"notDownloaded\" | null" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, @@ -328,6 +414,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ml-trained-models-utils", + "id": "def-common.MODEL_STATE", + "type": "Object", + "tags": [], + "label": "MODEL_STATE", + "description": [], + "signature": [ + "{ readonly DOWNLOADING: \"downloading\"; readonly DOWNLOADED: \"downloaded\"; readonly NOT_DOWNLOADED: \"notDownloaded\"; readonly STARTED: \"started\"; readonly STARTING: \"starting\"; readonly STOPPING: \"stopping\"; }" + ], + "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ml-trained-models-utils", "id": "def-common.SUPPORTED_PYTORCH_TASKS", diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index fab5372e806af..be9908f3b9b81 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 22 | 0 | 22 | 0 | +| 29 | 0 | 29 | 0 | ## Common diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index c879aa3616388..699a896170f7d 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-10-03 +date: 2023-10-04 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 2cee976459887..c2834c5cf7ab0 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-10-03 +date: 2023-10-04 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 7dda7b8d33282..d3a35c96ba723 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-10-03 +date: 2023-10-04 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 7891286969ed7..500fa9945ff45 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index b8b883163d12c..fb9cc14ead142 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-10-03 +date: 2023-10-04 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 8a9ae5b71fcbb..c85beac6f863b 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-10-03 +date: 2023-10-04 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 955f2ce1149e8..c54a30a800005 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-10-03 +date: 2023-10-04 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 f900aa344211d..647de77bca211 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index e743a61c927f9..087668ee0d628 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-10-03 +date: 2023-10-04 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 549538c38c405..27577f749ca74 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-10-03 +date: 2023-10-04 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 2eccebf1108ac..fa87b382f9531 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-10-03 +date: 2023-10-04 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 39ab3f94d4c1b..f80f83b70d6c4 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 48ed94b6a509a..bd82bd11c69cc 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-10-03 +date: 2023-10-04 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 802d6604cee42..cf85c1c8857aa 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-10-03 +date: 2023-10-04 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 5da87773af040..1509c1a981ff1 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-10-03 +date: 2023-10-04 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 2c15f75f60b14..facd8a5434cea 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-10-03 +date: 2023-10-04 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 dfa7d4a495bcc..ad7592dd3ad90 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-10-03 +date: 2023-10-04 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 9ea3cb839886f..6c7a7187c7418 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-10-03 +date: 2023-10-04 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 c2a3d3edad44d..07a624239db5d 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-10-03 +date: 2023-10-04 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 16c366ac9fa8c..427c4673b94bb 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-10-03 +date: 2023-10-04 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 4e985f5a0479f..dbb92f84671f7 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-10-03 +date: 2023-10-04 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 28f8a0bb93d00..9eecd8792a6e4 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-10-03 +date: 2023-10-04 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 febbdced9d65e..ec84b6f1b1280 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-10-03 +date: 2023-10-04 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 34d82649e3dd6..9cd05df3aac22 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-10-03 +date: 2023-10-04 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 7a82c4c23dd7b..6643d1d45fb39 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index dd167b2d5dc79..e1bf02ac29cc2 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2023-10-03 +date: 2023-10-04 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 c1be0b037df4f..0224356418b99 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-10-03 +date: 2023-10-04 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 2ed9074add349..861159a104eea 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-10-03 +date: 2023-10-04 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 89686f52c3c30..4a41353e4caf6 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 752ca9e966cad..bd257bba9018a 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-10-03 +date: 2023-10-04 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 8129b7cff1bf8..66cb8a44a0f57 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-10-03 +date: 2023-10-04 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 c4c22b4fab4e1..dee27e260aaa7 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -10015,10 +10015,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github", "type": "Object", "tags": [], - "label": "jira", + "label": "github", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10026,7 +10026,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration", "type": "Object", "tags": [], "label": "configuration", @@ -10037,7 +10037,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source", "type": "Object", "tags": [], "label": "data_source", @@ -10048,7 +10048,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -10062,7 +10062,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -10076,7 +10076,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.display", "type": "string", "tags": [], "label": "display", @@ -10097,7 +10097,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.label", "type": "string", "tags": [], "label": "label", @@ -10108,7 +10108,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.options", "type": "Array", "tags": [], "label": "options", @@ -10122,7 +10122,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.order", "type": "number", "tags": [], "label": "order", @@ -10133,7 +10133,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.required", "type": "boolean", "tags": [], "label": "required", @@ -10147,7 +10147,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -10161,7 +10161,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.tooltip", "type": "Uncategorized", "tags": [], "label": "tooltip", @@ -10175,7 +10175,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.type", "type": "string", "tags": [], "label": "type", @@ -10196,7 +10196,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -10210,7 +10210,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.validations", "type": "Array", "tags": [], "label": "validations", @@ -10224,7 +10224,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.data_source.value", "type": "string", "tags": [], "label": "value", @@ -10237,10 +10237,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host", "type": "Object", "tags": [], - "label": "username", + "label": "host", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10248,7 +10248,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -10262,7 +10262,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -10276,7 +10276,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.display", "type": "string", "tags": [], "label": "display", @@ -10297,7 +10297,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.label", "type": "string", "tags": [], "label": "label", @@ -10308,7 +10308,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.options", "type": "Array", "tags": [], "label": "options", @@ -10322,7 +10322,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.order", "type": "number", "tags": [], "label": "order", @@ -10333,7 +10333,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.required", "type": "boolean", "tags": [], "label": "required", @@ -10347,7 +10347,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -10361,7 +10361,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.tooltip", "type": "Uncategorized", "tags": [], "label": "tooltip", @@ -10375,7 +10375,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.type", "type": "string", "tags": [], "label": "type", @@ -10396,7 +10396,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -10410,7 +10410,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.validations", "type": "Array", "tags": [], "label": "validations", @@ -10424,7 +10424,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.host.value", "type": "string", "tags": [], "label": "value", @@ -10437,10 +10437,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token", "type": "Object", "tags": [], - "label": "password", + "label": "token", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10448,7 +10448,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -10462,13 +10462,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "{ field: string; value: string; }[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10476,7 +10476,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.display", "type": "string", "tags": [], "label": "display", @@ -10497,7 +10497,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.label", "type": "string", "tags": [], "label": "label", @@ -10508,7 +10508,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.options", "type": "Array", "tags": [], "label": "options", @@ -10522,7 +10522,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.order", "type": "number", "tags": [], "label": "order", @@ -10533,7 +10533,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.required", "type": "boolean", "tags": [], "label": "required", @@ -10547,7 +10547,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -10561,7 +10561,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.tooltip", "type": "Uncategorized", "tags": [], "label": "tooltip", @@ -10575,7 +10575,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.type", "type": "string", "tags": [], "label": "type", @@ -10596,7 +10596,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -10610,7 +10610,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.validations", "type": "Array", "tags": [], "label": "validations", @@ -10624,7 +10624,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.token.value", "type": "string", "tags": [], "label": "value", @@ -10637,10 +10637,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories", "type": "Object", "tags": [], - "label": "account_email", + "label": "repositories", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10648,7 +10648,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -10662,13 +10662,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "{ field: string; value: string; }[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10676,7 +10676,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.display", "type": "string", "tags": [], "label": "display", @@ -10689,7 +10689,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TEXTAREA" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10697,7 +10697,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.label", "type": "string", "tags": [], "label": "label", @@ -10708,7 +10708,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.options", "type": "Array", "tags": [], "label": "options", @@ -10722,7 +10722,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.order", "type": "number", "tags": [], "label": "order", @@ -10733,18 +10733,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.placeholder", - "type": "string", - "tags": [], - "label": "placeholder", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.required", "type": "boolean", "tags": [], "label": "required", @@ -10758,7 +10747,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -10772,21 +10761,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.tooltip", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.tooltip", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.type", "type": "string", "tags": [], "label": "type", @@ -10799,7 +10785,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".LIST" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10807,7 +10793,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -10821,7 +10807,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.validations", "type": "Array", "tags": [], "label": "validations", @@ -10835,7 +10821,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.repositories.value", "type": "string", "tags": [], "label": "value", @@ -10848,10 +10834,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled", "type": "Object", "tags": [], - "label": "api_token", + "label": "ssl_enabled", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10859,7 +10845,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -10873,13 +10859,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "{ field: string; value: string; }[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10887,7 +10873,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.display", "type": "string", "tags": [], "label": "display", @@ -10900,7 +10886,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TOGGLE" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10908,7 +10894,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.label", "type": "string", "tags": [], "label": "label", @@ -10919,7 +10905,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.options", "type": "Array", "tags": [], "label": "options", @@ -10933,7 +10919,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.order", "type": "number", "tags": [], "label": "order", @@ -10944,7 +10930,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.required", "type": "boolean", "tags": [], "label": "required", @@ -10958,13 +10944,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -10972,7 +10958,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.tooltip", "type": "Uncategorized", "tags": [], "label": "tooltip", @@ -10986,7 +10972,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.type", "type": "string", "tags": [], "label": "type", @@ -10999,7 +10985,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".BOOLEAN" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11007,7 +10993,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -11021,7 +11007,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.validations", "type": "Array", "tags": [], "label": "validations", @@ -11035,11 +11021,14 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_enabled.value", + "type": "boolean", "tags": [], "label": "value", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -11048,10 +11037,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca", "type": "Object", "tags": [], - "label": "jira_url", + "label": "ssl_ca", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11059,7 +11048,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -11073,13 +11062,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "never[]" + "{ field: string; value: true; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11087,7 +11076,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.display", "type": "string", "tags": [], "label": "display", @@ -11108,7 +11097,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.label", "type": "string", "tags": [], "label": "label", @@ -11119,7 +11108,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.options", "type": "Array", "tags": [], "label": "options", @@ -11133,7 +11122,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.order", "type": "number", "tags": [], "label": "order", @@ -11144,18 +11133,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.placeholder", - "type": "string", - "tags": [], - "label": "placeholder", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.required", "type": "boolean", "tags": [], "label": "required", @@ -11169,7 +11147,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -11183,7 +11161,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.tooltip", "type": "Uncategorized", "tags": [], "label": "tooltip", @@ -11197,7 +11175,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.type", "type": "string", "tags": [], "label": "type", @@ -11218,7 +11196,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -11232,7 +11210,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.validations", "type": "Array", "tags": [], "label": "validations", @@ -11246,7 +11224,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.ssl_ca.value", "type": "string", "tags": [], "label": "value", @@ -11259,10 +11237,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count", "type": "Object", "tags": [], - "label": "projects", + "label": "retry_count", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11270,7 +11248,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -11284,7 +11262,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -11298,7 +11276,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.display", "type": "string", "tags": [], "label": "display", @@ -11311,7 +11289,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTAREA" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11319,7 +11297,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.label", "type": "string", "tags": [], "label": "label", @@ -11330,7 +11308,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.options", "type": "Array", "tags": [], "label": "options", @@ -11344,7 +11322,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.order", "type": "number", "tags": [], "label": "order", @@ -11355,13 +11333,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11369,7 +11347,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -11383,18 +11361,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.type", "type": "string", "tags": [], "label": "type", @@ -11407,7 +11388,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".LIST" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11415,13 +11396,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11429,7 +11410,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.validations", "type": "Array", "tags": [], "label": "validations", @@ -11443,23 +11424,34 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.value", + "type": "number", "tags": [], "label": "value", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.retry_count.display_value", + "type": "number", + "tags": [], + "label": "display_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false } ] }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service", "type": "Object", "tags": [], - "label": "ssl_enabled", + "label": "use_text_extraction_service", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11467,7 +11459,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -11481,7 +11473,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -11495,7 +11487,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.display", "type": "string", "tags": [], "label": "display", @@ -11516,7 +11508,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.label", "type": "string", "tags": [], "label": "label", @@ -11527,7 +11519,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.options", "type": "Array", "tags": [], "label": "options", @@ -11541,7 +11533,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.order", "type": "number", "tags": [], "label": "order", @@ -11552,7 +11544,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.required", "type": "boolean", "tags": [], "label": "required", @@ -11566,7 +11558,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -11580,21 +11572,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.tooltip", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.tooltip", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.type", "type": "string", "tags": [], "label": "type", @@ -11615,7 +11604,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -11629,7 +11618,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.validations", "type": "Array", "tags": [], "label": "validations", @@ -11643,7 +11632,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.configuration.use_text_extraction_service.value", "type": "boolean", "tags": [], "label": "value", @@ -11656,62 +11645,122 @@ "trackAdoption": false } ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca", - "type": "Object", - "tags": [], - "label": "ssl_ca", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.default_value", - "type": "Uncategorized", - "tags": [], - "label": "default_value", - "description": [], - "signature": [ - "null" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.depends_on", - "type": "Array", - "tags": [], - "label": "depends_on", - "description": [], - "signature": [ - "{ field: string; value: true; }[]" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.display", - "type": "string", - "tags": [], - "label": "display", - "description": [], - "signature": [ - { - "pluginId": "@kbn/search-connectors", + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.github.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive", + "type": "Object", + "tags": [], + "label": "google_drive", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials", + "type": "Object", + "tags": [], + "label": "service_account_credentials", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", "scope": "common", "docId": "kibKbnSearchConnectorsPluginApi", "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TEXTAREA" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11719,7 +11768,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.label", "type": "string", "tags": [], "label": "label", @@ -11730,7 +11779,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.options", "type": "Array", "tags": [], "label": "options", @@ -11744,7 +11793,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.order", "type": "number", "tags": [], "label": "order", @@ -11755,7 +11804,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.required", "type": "boolean", "tags": [], "label": "required", @@ -11769,13 +11818,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11783,21 +11832,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.tooltip", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.tooltip", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.type", "type": "string", "tags": [], "label": "type", @@ -11818,7 +11864,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -11832,7 +11878,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.validations", "type": "Array", "tags": [], "label": "validations", @@ -11846,7 +11892,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.service_account_credentials.value", "type": "string", "tags": [], "label": "value", @@ -11859,10 +11905,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security", "type": "Object", "tags": [], - "label": "retry_count", + "label": "use_document_level_security", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11870,18 +11916,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -11895,7 +11944,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.display", "type": "string", "tags": [], "label": "display", @@ -11908,7 +11957,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TOGGLE" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11916,7 +11965,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.label", "type": "string", "tags": [], "label": "label", @@ -11927,7 +11976,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.options", "type": "Array", "tags": [], "label": "options", @@ -11941,7 +11990,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.order", "type": "number", "tags": [], "label": "order", @@ -11952,13 +12001,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -11966,7 +12015,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -11980,21 +12029,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.tooltip", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.tooltip", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.type", "type": "string", "tags": [], "label": "type", @@ -12007,7 +12053,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".BOOLEAN" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12015,13 +12061,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12029,7 +12075,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.validations", "type": "Array", "tags": [], "label": "validations", @@ -12043,11 +12089,14 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_document_level_security.value", + "type": "boolean", "tags": [], "label": "value", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -12056,10 +12105,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email", "type": "Object", "tags": [], - "label": "concurrent_downloads", + "label": "google_workspace_admin_email", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12067,24 +12116,27 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "never[]" + "{ field: string; value: true; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12092,7 +12144,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.display", "type": "string", "tags": [], "label": "display", @@ -12105,7 +12157,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12113,7 +12165,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.label", "type": "string", "tags": [], "label": "label", @@ -12124,7 +12176,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.options", "type": "Array", "tags": [], "label": "options", @@ -12138,7 +12190,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.order", "type": "number", "tags": [], "label": "order", @@ -12149,13 +12201,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12163,7 +12215,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -12177,21 +12229,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.tooltip", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.tooltip", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.type", "type": "string", "tags": [], "label": "type", @@ -12204,7 +12253,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12212,13 +12261,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12226,13 +12275,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.validations", "type": "Array", "tags": [], "label": "validations", "description": [], "signature": [ - "{ type: string; constraint: number; }[]" + "{ type: string; constraint: string; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12240,8 +12289,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.google_workspace_admin_email.value", + "type": "string", "tags": [], "label": "value", "description": [], @@ -12253,10 +12302,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency", "type": "Object", "tags": [], - "label": "use_text_extraction_service", + "label": "max_concurrency", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12264,21 +12313,18 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.default_value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], - "signature": [ - "false" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -12292,7 +12338,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.display", "type": "string", "tags": [], "label": "display", @@ -12305,7 +12351,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TOGGLE" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12313,7 +12359,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.label", "type": "string", "tags": [], "label": "label", @@ -12324,7 +12370,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.options", "type": "Array", "tags": [], "label": "options", @@ -12338,7 +12384,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.order", "type": "number", "tags": [], "label": "order", @@ -12349,13 +12395,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12363,7 +12409,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -12377,7 +12423,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -12388,7 +12434,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.type", "type": "string", "tags": [], "label": "type", @@ -12401,7 +12447,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".BOOLEAN" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12409,7 +12455,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -12423,13 +12469,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.validations", "type": "Array", "tags": [], "label": "validations", "description": [], "signature": [ - "never[]" + "{ type: string; constraint: number; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12437,39 +12483,23 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.max_concurrency.value", + "type": "string", "tags": [], "label": "value", "description": [], - "signature": [ - "false" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false } ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features", - "type": "Object", - "tags": [], - "label": "features", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service", "type": "Object", "tags": [], - "label": "[FeatureName.SYNC_RULES]", + "label": "use_text_extraction_service", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12477,18 +12507,4088 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.advanced", - "type": "Object", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.default_value", + "type": "Uncategorized", "tags": [], - "label": "advanced", + "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.configuration.use_text_extraction_service.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.features.FeatureName.DOCUMENT_LEVEL_SECURITY", + "type": "Object", + "tags": [], + "label": "[FeatureName.DOCUMENT_LEVEL_SECURITY]", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.features.FeatureName.DOCUMENT_LEVEL_SECURITY.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.google_drive.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira", + "type": "Object", + "tags": [], + "label": "jira", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source", + "type": "Object", + "tags": [], + "label": "data_source", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".DROPDOWN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ label: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.data_source.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username", + "type": "Object", + "tags": [], + "label": "username", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "{ field: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.username.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password", + "type": "Object", + "tags": [], + "label": "password", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "{ field: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.password.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email", + "type": "Object", + "tags": [], + "label": "account_email", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "{ field: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.placeholder", + "type": "string", + "tags": [], + "label": "placeholder", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token", + "type": "Object", + "tags": [], + "label": "api_token", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "{ field: string; value: string; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.api_token.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url", + "type": "Object", + "tags": [], + "label": "jira_url", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.placeholder", + "type": "string", + "tags": [], + "label": "placeholder", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.jira_url.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects", + "type": "Object", + "tags": [], + "label": "projects", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTAREA" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".LIST" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.projects.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled", + "type": "Object", + "tags": [], + "label": "ssl_enabled", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_enabled.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca", + "type": "Object", + "tags": [], + "label": "ssl_ca", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "{ field: string; value: true; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.ssl_ca.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count", + "type": "Object", + "tags": [], + "label": "retry_count", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.default_value", + "type": "number", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".NUMERIC" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".INTEGER" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.retry_count.value", + "type": "number", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads", + "type": "Object", + "tags": [], + "label": "concurrent_downloads", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.default_value", + "type": "number", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".NUMERIC" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.tooltip", + "type": "Uncategorized", + "tags": [], + "label": "tooltip", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".INTEGER" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "{ type: string; constraint: number; }[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.concurrent_downloads.value", + "type": "number", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service", + "type": "Object", + "tags": [], + "label": "use_text_extraction_service", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.default_value", + "type": "boolean", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.use_text_extraction_service.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES", + "type": "Object", + "tags": [], + "label": "[FeatureName.SYNC_RULES]", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.advanced", + "type": "Object", + "tags": [], + "label": "advanced", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.advanced.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.basic", + "type": "Object", + "tags": [], + "label": "basic", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.basic.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb", + "type": "Object", + "tags": [], + "label": "mongodb", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host", + "type": "Object", + "tags": [], + "label": "host", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user", + "type": "Object", + "tags": [], + "label": "user", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password", + "type": "Object", + "tags": [], + "label": "password", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database", + "type": "Object", + "tags": [], + "label": "database", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection", + "type": "Object", + "tags": [], + "label": "collection", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection", + "type": "Object", + "tags": [], + "label": "direct_connection", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.default_value", + "type": "boolean", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.FILTERING_ADVANCED_CONFIG", + "type": "boolean", + "tags": [], + "label": "[FeatureName.FILTERING_ADVANCED_CONFIG]", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.FILTERING_RULES", + "type": "boolean", + "tags": [], + "label": "[FeatureName.FILTERING_RULES]", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES", + "type": "Object", + "tags": [], + "label": "[FeatureName.SYNC_RULES]", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.advanced", + "type": "Object", + "tags": [], + "label": "advanced", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.advanced.enabled", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.advanced.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.basic", + "type": "Object", + "tags": [], + "label": "basic", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.basic.enabled", "type": "boolean", "tags": [], "label": "enabled", @@ -12501,90 +16601,257 @@ "trackAdoption": false } ] + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql", + "type": "Object", + "tags": [], + "label": "mssql", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host", + "type": "Object", + "tags": [], + "label": "host", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.default_value", + "type": "string", + "tags": [], + "label": "default_value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TEXTBOX" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.basic", - "type": "Object", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.sensitive", + "type": "boolean", "tags": [], - "label": "basic", + "label": "sensitive", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, - "trackAdoption": false, - "children": [ + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.features.FeatureName.SYNC_RULES.basic.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".STRING" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false } ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.serviceType", - "type": "string", - "tags": [], - "label": "serviceType", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb", - "type": "Object", - "tags": [], - "label": "mongodb", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration", - "type": "Object", - "tags": [], - "label": "configuration", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port", "type": "Object", "tags": [], - "label": "host", + "label": "port", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12592,18 +16859,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -12617,7 +16887,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.display", "type": "string", "tags": [], "label": "display", @@ -12630,7 +16900,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12638,7 +16908,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.label", "type": "string", "tags": [], "label": "label", @@ -12649,7 +16919,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.options", "type": "Array", "tags": [], "label": "options", @@ -12663,7 +16933,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.order", "type": "number", "tags": [], "label": "order", @@ -12674,7 +16944,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.required", "type": "boolean", "tags": [], "label": "required", @@ -12688,7 +16958,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -12702,7 +16972,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -12713,7 +16983,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.type", "type": "string", "tags": [], "label": "type", @@ -12726,7 +16996,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12734,7 +17004,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -12748,7 +17018,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.validations", "type": "Array", "tags": [], "label": "validations", @@ -12762,8 +17032,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.host.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.value", + "type": "number", "tags": [], "label": "value", "description": [], @@ -12775,10 +17045,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username", "type": "Object", "tags": [], - "label": "user", + "label": "username", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12786,7 +17056,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.default_value", "type": "string", "tags": [], "label": "default_value", @@ -12797,7 +17067,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -12811,7 +17081,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.display", "type": "string", "tags": [], "label": "display", @@ -12832,7 +17102,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.label", "type": "string", "tags": [], "label": "label", @@ -12843,7 +17113,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.options", "type": "Array", "tags": [], "label": "options", @@ -12857,7 +17127,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.order", "type": "number", "tags": [], "label": "order", @@ -12868,13 +17138,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -12882,7 +17152,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -12896,7 +17166,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -12907,7 +17177,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.type", "type": "string", "tags": [], "label": "type", @@ -12928,7 +17198,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -12942,7 +17212,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.validations", "type": "Array", "tags": [], "label": "validations", @@ -12956,7 +17226,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.user.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.value", "type": "string", "tags": [], "label": "value", @@ -12969,7 +17239,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password", "type": "Object", "tags": [], "label": "password", @@ -12980,7 +17250,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.default_value", "type": "string", "tags": [], "label": "default_value", @@ -12991,7 +17261,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -13005,7 +17275,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.display", "type": "string", "tags": [], "label": "display", @@ -13026,7 +17296,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.label", "type": "string", "tags": [], "label": "label", @@ -13037,7 +17307,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.options", "type": "Array", "tags": [], "label": "options", @@ -13051,7 +17321,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.order", "type": "number", "tags": [], "label": "order", @@ -13062,13 +17332,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13076,7 +17346,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -13090,7 +17360,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -13101,7 +17371,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.type", "type": "string", "tags": [], "label": "type", @@ -13122,7 +17392,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -13136,7 +17406,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.validations", "type": "Array", "tags": [], "label": "validations", @@ -13150,7 +17420,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.password.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.value", "type": "string", "tags": [], "label": "value", @@ -13163,7 +17433,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database", "type": "Object", "tags": [], "label": "database", @@ -13174,7 +17444,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.default_value", "type": "string", "tags": [], "label": "default_value", @@ -13185,7 +17455,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -13199,7 +17469,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.display", "type": "string", "tags": [], "label": "display", @@ -13220,7 +17490,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.label", "type": "string", "tags": [], "label": "label", @@ -13231,7 +17501,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.options", "type": "Array", "tags": [], "label": "options", @@ -13245,7 +17515,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.order", "type": "number", "tags": [], "label": "order", @@ -13256,7 +17526,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.required", "type": "boolean", "tags": [], "label": "required", @@ -13270,7 +17540,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -13284,7 +17554,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -13295,7 +17565,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.type", "type": "string", "tags": [], "label": "type", @@ -13316,7 +17586,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -13330,7 +17600,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.validations", "type": "Array", "tags": [], "label": "validations", @@ -13344,7 +17614,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.database.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.value", "type": "string", "tags": [], "label": "value", @@ -13357,10 +17627,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables", "type": "Object", "tags": [], - "label": "collection", + "label": "tables", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13368,7 +17638,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.default_value", "type": "string", "tags": [], "label": "default_value", @@ -13379,7 +17649,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -13393,7 +17663,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.display", "type": "string", "tags": [], "label": "display", @@ -13406,7 +17676,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TEXTAREA" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13414,7 +17684,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.label", "type": "string", "tags": [], "label": "label", @@ -13425,7 +17695,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.options", "type": "Array", "tags": [], "label": "options", @@ -13439,7 +17709,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.order", "type": "number", "tags": [], "label": "order", @@ -13450,7 +17720,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.required", "type": "boolean", "tags": [], "label": "required", @@ -13464,7 +17734,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -13478,7 +17748,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -13489,7 +17759,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.type", "type": "string", "tags": [], "label": "type", @@ -13502,7 +17772,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".LIST" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13510,7 +17780,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -13524,7 +17794,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.validations", "type": "Array", "tags": [], "label": "validations", @@ -13538,7 +17808,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.collection.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.value", "type": "string", "tags": [], "label": "value", @@ -13551,10 +17821,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled", "type": "Object", "tags": [], - "label": "direct_connection", + "label": "ssl_enabled", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13562,7 +17832,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.default_value", "type": "boolean", "tags": [], "label": "default_value", @@ -13576,7 +17846,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -13590,7 +17860,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.display", "type": "string", "tags": [], "label": "display", @@ -13611,7 +17881,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.label", "type": "string", "tags": [], "label": "label", @@ -13622,7 +17892,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.options", "type": "Array", "tags": [], "label": "options", @@ -13636,7 +17906,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.order", "type": "number", "tags": [], "label": "order", @@ -13647,7 +17917,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.required", "type": "boolean", "tags": [], "label": "required", @@ -13661,7 +17931,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -13675,7 +17945,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -13686,7 +17956,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.type", "type": "string", "tags": [], "label": "type", @@ -13707,7 +17977,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -13721,7 +17991,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.validations", "type": "Array", "tags": [], "label": "validations", @@ -13735,182 +18005,26 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.configuration.direct_connection.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.value", "type": "boolean", "tags": [], "label": "value", - "description": [], - "signature": [ - "false" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features", - "type": "Object", - "tags": [], - "label": "features", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.FILTERING_ADVANCED_CONFIG", - "type": "boolean", - "tags": [], - "label": "[FeatureName.FILTERING_ADVANCED_CONFIG]", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.FILTERING_RULES", - "type": "boolean", - "tags": [], - "label": "[FeatureName.FILTERING_RULES]", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES", - "type": "Object", - "tags": [], - "label": "[FeatureName.SYNC_RULES]", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.advanced", - "type": "Object", - "tags": [], - "label": "advanced", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.advanced.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.basic", - "type": "Object", - "tags": [], - "label": "basic", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.features.FeatureName.SYNC_RULES.basic.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mongodb.serviceType", - "type": "string", - "tags": [], - "label": "serviceType", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql", - "type": "Object", - "tags": [], - "label": "mssql", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration", - "type": "Object", - "tags": [], - "label": "configuration", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca", "type": "Object", "tags": [], - "label": "host", + "label": "ssl_ca", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13918,7 +18032,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.default_value", "type": "string", "tags": [], "label": "default_value", @@ -13929,13 +18043,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "never[]" + "{ field: string; value: true; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -13943,7 +18057,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.display", "type": "string", "tags": [], "label": "display", @@ -13964,7 +18078,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.label", "type": "string", "tags": [], "label": "label", @@ -13975,7 +18089,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.options", "type": "Array", "tags": [], "label": "options", @@ -13989,7 +18103,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.order", "type": "number", "tags": [], "label": "order", @@ -14000,7 +18114,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.required", "type": "boolean", "tags": [], "label": "required", @@ -14014,7 +18128,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -14028,7 +18142,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -14039,7 +18153,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.type", "type": "string", "tags": [], "label": "type", @@ -14060,7 +18174,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -14074,7 +18188,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.validations", "type": "Array", "tags": [], "label": "validations", @@ -14088,7 +18202,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.host.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.value", "type": "string", "tags": [], "label": "value", @@ -14101,10 +18215,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema", "type": "Object", "tags": [], - "label": "port", + "label": "schema", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14112,21 +18226,18 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.default_value", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.default_value", + "type": "string", "tags": [], "label": "default_value", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -14140,7 +18251,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.display", "type": "string", "tags": [], "label": "display", @@ -14153,7 +18264,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14161,7 +18272,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.label", "type": "string", "tags": [], "label": "label", @@ -14172,7 +18283,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.options", "type": "Array", "tags": [], "label": "options", @@ -14186,7 +18297,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.order", "type": "number", "tags": [], "label": "order", @@ -14197,7 +18308,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.required", "type": "boolean", "tags": [], "label": "required", @@ -14211,7 +18322,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -14225,7 +18336,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -14236,7 +18347,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.type", "type": "string", "tags": [], "label": "type", @@ -14249,7 +18360,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14257,7 +18368,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -14271,7 +18382,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.validations", "type": "Array", "tags": [], "label": "validations", @@ -14285,8 +18396,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.port.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.value", + "type": "string", "tags": [], "label": "value", "description": [], @@ -14298,10 +18409,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size", "type": "Object", "tags": [], - "label": "username", + "label": "fetch_size", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14309,8 +18420,8 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], @@ -14320,7 +18431,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -14334,7 +18445,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.display", "type": "string", "tags": [], "label": "display", @@ -14347,7 +18458,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14355,7 +18466,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.label", "type": "string", "tags": [], "label": "label", @@ -14366,7 +18477,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.options", "type": "Array", "tags": [], "label": "options", @@ -14380,7 +18491,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.order", "type": "number", "tags": [], "label": "order", @@ -14391,13 +18502,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14405,7 +18516,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -14419,7 +18530,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -14430,7 +18541,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.type", "type": "string", "tags": [], "label": "type", @@ -14443,7 +18554,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14451,13 +18562,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14465,7 +18576,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.validations", "type": "Array", "tags": [], "label": "validations", @@ -14479,8 +18590,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.username.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.value", + "type": "number", "tags": [], "label": "value", "description": [], @@ -14492,10 +18603,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count", "type": "Object", "tags": [], - "label": "password", + "label": "retry_count", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14503,8 +18614,8 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], @@ -14514,7 +18625,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -14528,7 +18639,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.display", "type": "string", "tags": [], "label": "display", @@ -14541,7 +18652,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14549,7 +18660,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.label", "type": "string", "tags": [], "label": "label", @@ -14560,7 +18671,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.options", "type": "Array", "tags": [], "label": "options", @@ -14574,7 +18685,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.order", "type": "number", "tags": [], "label": "order", @@ -14585,13 +18696,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14599,13 +18710,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14613,7 +18724,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -14624,7 +18735,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.type", "type": "string", "tags": [], "label": "type", @@ -14637,7 +18748,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14645,13 +18756,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14659,7 +18770,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.validations", "type": "Array", "tags": [], "label": "validations", @@ -14673,8 +18784,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.password.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.value", + "type": "number", "tags": [], "label": "value", "description": [], @@ -14686,10 +18797,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host", "type": "Object", "tags": [], - "label": "database", + "label": "validate_host", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14697,18 +18808,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.default_value", + "type": "boolean", "tags": [], "label": "default_value", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -14722,7 +18836,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.display", "type": "string", "tags": [], "label": "display", @@ -14735,7 +18849,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TOGGLE" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14743,7 +18857,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.label", "type": "string", "tags": [], "label": "label", @@ -14754,7 +18868,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.options", "type": "Array", "tags": [], "label": "options", @@ -14768,7 +18882,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.order", "type": "number", "tags": [], "label": "order", @@ -14779,7 +18893,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.required", "type": "boolean", "tags": [], "label": "required", @@ -14793,7 +18907,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -14807,7 +18921,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -14818,7 +18932,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.type", "type": "string", "tags": [], "label": "type", @@ -14831,7 +18945,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".BOOLEAN" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14839,7 +18953,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -14853,7 +18967,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.validations", "type": "Array", "tags": [], "label": "validations", @@ -14863,27 +18977,158 @@ ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES", + "type": "Object", + "tags": [], + "label": "[FeatureName.SYNC_RULES]", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.advanced", + "type": "Object", + "tags": [], + "label": "advanced", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.advanced.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.database.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.basic", + "type": "Object", "tags": [], - "label": "value", + "label": "basic", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.basic.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ] - }, + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql", + "type": "Object", + "tags": [], + "label": "mysql", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host", "type": "Object", "tags": [], - "label": "tables", + "label": "host", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14891,7 +19136,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.default_value", "type": "string", "tags": [], "label": "default_value", @@ -14902,7 +19147,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -14916,7 +19161,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.display", "type": "string", "tags": [], "label": "display", @@ -14929,7 +19174,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTAREA" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -14937,7 +19182,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.label", "type": "string", "tags": [], "label": "label", @@ -14948,7 +19193,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.options", "type": "Array", "tags": [], "label": "options", @@ -14962,7 +19207,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.order", "type": "number", "tags": [], "label": "order", @@ -14973,7 +19218,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.required", "type": "boolean", "tags": [], "label": "required", @@ -14987,7 +19232,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -15001,7 +19246,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15012,7 +19257,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.type", "type": "string", "tags": [], "label": "type", @@ -15025,7 +19270,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".LIST" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15033,7 +19278,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -15047,7 +19292,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.validations", "type": "Array", "tags": [], "label": "validations", @@ -15061,7 +19306,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.tables.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.value", "type": "string", "tags": [], "label": "value", @@ -15074,10 +19319,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port", "type": "Object", "tags": [], - "label": "ssl_enabled", + "label": "port", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15085,13 +19330,13 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.default_value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], "signature": [ - "false" + "null" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15099,7 +19344,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -15113,7 +19358,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.display", "type": "string", "tags": [], "label": "display", @@ -15126,7 +19371,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TOGGLE" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15134,7 +19379,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.label", "type": "string", "tags": [], "label": "label", @@ -15145,7 +19390,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.options", "type": "Array", "tags": [], "label": "options", @@ -15159,7 +19404,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.order", "type": "number", "tags": [], "label": "order", @@ -15170,7 +19415,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.required", "type": "boolean", "tags": [], "label": "required", @@ -15184,7 +19429,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -15198,7 +19443,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15209,7 +19454,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.type", "type": "string", "tags": [], "label": "type", @@ -15222,7 +19467,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".BOOLEAN" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15230,7 +19475,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -15244,7 +19489,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.validations", "type": "Array", "tags": [], "label": "validations", @@ -15258,14 +19503,11 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_enabled.value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.value", + "type": "string", "tags": [], "label": "value", "description": [], - "signature": [ - "false" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -15274,10 +19516,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user", "type": "Object", "tags": [], - "label": "ssl_ca", + "label": "user", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15285,7 +19527,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.default_value", "type": "string", "tags": [], "label": "default_value", @@ -15296,13 +19538,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "{ field: string; value: true; }[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15310,7 +19552,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.display", "type": "string", "tags": [], "label": "display", @@ -15331,7 +19573,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.label", "type": "string", "tags": [], "label": "label", @@ -15342,7 +19584,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.options", "type": "Array", "tags": [], "label": "options", @@ -15356,7 +19598,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.order", "type": "number", "tags": [], "label": "order", @@ -15367,13 +19609,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15381,7 +19623,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -15395,7 +19637,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15406,7 +19648,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.type", "type": "string", "tags": [], "label": "type", @@ -15427,7 +19669,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -15441,7 +19683,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.validations", "type": "Array", "tags": [], "label": "validations", @@ -15455,7 +19697,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.ssl_ca.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.value", "type": "string", "tags": [], "label": "value", @@ -15468,10 +19710,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password", "type": "Object", "tags": [], - "label": "schema", + "label": "password", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15479,7 +19721,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.default_value", "type": "string", "tags": [], "label": "default_value", @@ -15490,7 +19732,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -15504,7 +19746,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.display", "type": "string", "tags": [], "label": "display", @@ -15525,7 +19767,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.label", "type": "string", "tags": [], "label": "label", @@ -15536,7 +19778,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.options", "type": "Array", "tags": [], "label": "options", @@ -15550,7 +19792,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.order", "type": "number", "tags": [], "label": "order", @@ -15561,13 +19803,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15575,13 +19817,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15589,7 +19831,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15600,7 +19842,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.type", "type": "string", "tags": [], "label": "type", @@ -15621,7 +19863,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -15635,7 +19877,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.validations", "type": "Array", "tags": [], "label": "validations", @@ -15649,7 +19891,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.schema.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.value", "type": "string", "tags": [], "label": "value", @@ -15662,10 +19904,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database", "type": "Object", "tags": [], - "label": "fetch_size", + "label": "database", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15673,8 +19915,8 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.default_value", + "type": "string", "tags": [], "label": "default_value", "description": [], @@ -15684,7 +19926,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -15698,7 +19940,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.display", "type": "string", "tags": [], "label": "display", @@ -15711,7 +19953,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15719,7 +19961,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.label", "type": "string", "tags": [], "label": "label", @@ -15730,7 +19972,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.options", "type": "Array", "tags": [], "label": "options", @@ -15744,7 +19986,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.order", "type": "number", "tags": [], "label": "order", @@ -15755,13 +19997,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15769,7 +20011,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -15783,7 +20025,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15794,7 +20036,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.type", "type": "string", "tags": [], "label": "type", @@ -15807,7 +20049,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15815,13 +20057,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15829,7 +20071,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.validations", "type": "Array", "tags": [], "label": "validations", @@ -15843,8 +20085,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.fetch_size.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.value", + "type": "string", "tags": [], "label": "value", "description": [], @@ -15856,10 +20098,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables", "type": "Object", "tags": [], - "label": "retry_count", + "label": "tables", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15867,8 +20109,8 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.default_value", + "type": "string", "tags": [], "label": "default_value", "description": [], @@ -15878,7 +20120,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -15892,7 +20134,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.display", "type": "string", "tags": [], "label": "display", @@ -15905,7 +20147,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTAREA" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15913,7 +20155,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.label", "type": "string", "tags": [], "label": "label", @@ -15924,7 +20166,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.options", "type": "Array", "tags": [], "label": "options", @@ -15938,7 +20180,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.order", "type": "number", "tags": [], "label": "order", @@ -15949,13 +20191,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -15963,7 +20205,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -15977,7 +20219,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -15988,7 +20230,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.type", "type": "string", "tags": [], "label": "type", @@ -16001,7 +20243,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".LIST" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16009,13 +20251,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16023,7 +20265,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.validations", "type": "Array", "tags": [], "label": "validations", @@ -16037,8 +20279,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.retry_count.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.value", + "type": "string", "tags": [], "label": "value", "description": [], @@ -16050,10 +20292,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled", "type": "Object", "tags": [], - "label": "validate_host", + "label": "ssl_enabled", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16061,7 +20303,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.default_value", "type": "boolean", "tags": [], "label": "default_value", @@ -16075,7 +20317,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -16089,7 +20331,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.display", "type": "string", "tags": [], "label": "display", @@ -16110,7 +20352,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.label", "type": "string", "tags": [], "label": "label", @@ -16121,7 +20363,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.options", "type": "Array", "tags": [], "label": "options", @@ -16135,7 +20377,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.order", "type": "number", "tags": [], "label": "order", @@ -16146,7 +20388,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.required", "type": "boolean", "tags": [], "label": "required", @@ -16160,7 +20402,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -16174,7 +20416,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -16185,7 +20427,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.type", "type": "string", "tags": [], "label": "type", @@ -16206,7 +20448,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -16220,7 +20462,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.validations", "type": "Array", "tags": [], "label": "validations", @@ -16234,7 +20476,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.configuration.validate_host.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.value", "type": "boolean", "tags": [], "label": "value", @@ -16247,141 +20489,13 @@ "trackAdoption": false } ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features", - "type": "Object", - "tags": [], - "label": "features", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES", - "type": "Object", - "tags": [], - "label": "[FeatureName.SYNC_RULES]", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.advanced", - "type": "Object", - "tags": [], - "label": "advanced", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.advanced.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "false" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.basic", - "type": "Object", - "tags": [], - "label": "basic", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.features.FeatureName.SYNC_RULES.basic.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mssql.serviceType", - "type": "string", - "tags": [], - "label": "serviceType", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql", - "type": "Object", - "tags": [], - "label": "mysql", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration", - "type": "Object", - "tags": [], - "label": "configuration", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca", "type": "Object", "tags": [], - "label": "host", + "label": "ssl_ca", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16389,7 +20503,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.default_value", "type": "string", "tags": [], "label": "default_value", @@ -16400,13 +20514,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "never[]" + "{ field: string; value: true; }[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16414,7 +20528,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.display", "type": "string", "tags": [], "label": "display", @@ -16435,7 +20549,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.label", "type": "string", "tags": [], "label": "label", @@ -16446,7 +20560,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.options", "type": "Array", "tags": [], "label": "options", @@ -16460,7 +20574,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.order", "type": "number", "tags": [], "label": "order", @@ -16471,7 +20585,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.required", "type": "boolean", "tags": [], "label": "required", @@ -16485,7 +20599,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -16499,7 +20613,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -16510,7 +20624,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.type", "type": "string", "tags": [], "label": "type", @@ -16531,7 +20645,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -16545,7 +20659,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.validations", "type": "Array", "tags": [], "label": "validations", @@ -16559,7 +20673,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.host.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.value", "type": "string", "tags": [], "label": "value", @@ -16572,10 +20686,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size", "type": "Object", "tags": [], - "label": "port", + "label": "fetch_size", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16583,21 +20697,18 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.default_value", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -16611,7 +20722,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.display", "type": "string", "tags": [], "label": "display", @@ -16632,7 +20743,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.label", "type": "string", "tags": [], "label": "label", @@ -16643,7 +20754,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.options", "type": "Array", "tags": [], "label": "options", @@ -16657,7 +20768,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.order", "type": "number", "tags": [], "label": "order", @@ -16668,13 +20779,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16682,7 +20793,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -16696,7 +20807,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -16707,7 +20818,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.type", "type": "string", "tags": [], "label": "type", @@ -16728,13 +20839,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16742,7 +20853,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.validations", "type": "Array", "tags": [], "label": "validations", @@ -16756,8 +20867,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.port.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.value", + "type": "number", "tags": [], "label": "value", "description": [], @@ -16769,10 +20880,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count", "type": "Object", "tags": [], - "label": "user", + "label": "retry_count", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16780,8 +20891,8 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], @@ -16791,7 +20902,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -16805,7 +20916,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.display", "type": "string", "tags": [], "label": "display", @@ -16818,7 +20929,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16826,7 +20937,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.label", "type": "string", "tags": [], "label": "label", @@ -16837,7 +20948,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.options", "type": "Array", "tags": [], "label": "options", @@ -16851,7 +20962,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.order", "type": "number", "tags": [], "label": "order", @@ -16862,7 +20973,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.required", "type": "boolean", "tags": [], "label": "required", @@ -16876,7 +20987,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -16890,7 +21001,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -16901,7 +21012,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.type", "type": "string", "tags": [], "label": "type", @@ -16914,7 +21025,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16922,13 +21033,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16936,7 +21047,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.validations", "type": "Array", "tags": [], "label": "validations", @@ -16950,8 +21061,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.user.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.value", + "type": "number", "tags": [], "label": "value", "description": [], @@ -16960,13 +21071,26 @@ "trackAdoption": false } ] - }, + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES", "type": "Object", "tags": [], - "label": "password", + "label": "[FeatureName.SYNC_RULES]", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -16974,18 +21098,136 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.advanced", + "type": "Object", + "tags": [], + "label": "advanced", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.advanced.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.basic", + "type": "Object", + "tags": [], + "label": "basic", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.basic.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive", + "type": "Object", + "tags": [], + "label": "network_drive", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username", + "type": "Object", + "tags": [], + "label": "username", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -16999,7 +21241,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.display", "type": "string", "tags": [], "label": "display", @@ -17020,7 +21262,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.label", "type": "string", "tags": [], "label": "label", @@ -17031,7 +21273,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.options", "type": "Array", "tags": [], "label": "options", @@ -17045,7 +21287,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.order", "type": "number", "tags": [], "label": "order", @@ -17056,13 +21298,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17070,13 +21312,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17084,7 +21326,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -17095,7 +21337,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.type", "type": "string", "tags": [], "label": "type", @@ -17116,7 +21358,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -17130,7 +21372,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.validations", "type": "Array", "tags": [], "label": "validations", @@ -17144,7 +21386,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.password.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.value", "type": "string", "tags": [], "label": "value", @@ -17157,10 +21399,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password", "type": "Object", "tags": [], - "label": "database", + "label": "password", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17168,18 +21410,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -17193,7 +21438,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.display", "type": "string", "tags": [], "label": "display", @@ -17214,7 +21459,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.label", "type": "string", "tags": [], "label": "label", @@ -17225,7 +21470,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.options", "type": "Array", "tags": [], "label": "options", @@ -17239,7 +21484,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.order", "type": "number", "tags": [], "label": "order", @@ -17250,7 +21495,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.required", "type": "boolean", "tags": [], "label": "required", @@ -17264,13 +21509,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17278,7 +21523,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -17289,7 +21534,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.type", "type": "string", "tags": [], "label": "type", @@ -17310,7 +21555,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -17324,7 +21569,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.validations", "type": "Array", "tags": [], "label": "validations", @@ -17338,7 +21583,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.database.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.value", "type": "string", "tags": [], "label": "value", @@ -17351,10 +21596,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip", "type": "Object", "tags": [], - "label": "tables", + "label": "server_ip", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17362,18 +21607,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -17387,7 +21635,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.display", "type": "string", "tags": [], "label": "display", @@ -17400,7 +21648,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTAREA" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17408,7 +21656,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.label", "type": "string", "tags": [], "label": "label", @@ -17419,7 +21667,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.options", "type": "Array", "tags": [], "label": "options", @@ -17433,7 +21681,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.order", "type": "number", "tags": [], "label": "order", @@ -17444,7 +21692,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.placeholder", + "type": "string", + "tags": [], + "label": "placeholder", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.required", "type": "boolean", "tags": [], "label": "required", @@ -17458,7 +21717,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -17472,7 +21731,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -17483,7 +21742,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.type", "type": "string", "tags": [], "label": "type", @@ -17496,7 +21755,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".LIST" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17504,7 +21763,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -17518,7 +21777,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.validations", "type": "Array", "tags": [], "label": "validations", @@ -17532,7 +21791,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.tables.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.value", "type": "string", "tags": [], "label": "value", @@ -17545,10 +21804,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port", "type": "Object", "tags": [], - "label": "ssl_enabled", + "label": "server_port", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17556,13 +21815,13 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.default_value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], "signature": [ - "false" + "null" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17570,7 +21829,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -17584,7 +21843,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.display", "type": "string", "tags": [], "label": "display", @@ -17597,7 +21856,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TOGGLE" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17605,7 +21864,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.label", "type": "string", "tags": [], "label": "label", @@ -17616,7 +21875,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.options", "type": "Array", "tags": [], "label": "options", @@ -17630,7 +21889,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.order", "type": "number", "tags": [], "label": "order", @@ -17641,7 +21900,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.required", "type": "boolean", "tags": [], "label": "required", @@ -17655,7 +21914,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -17669,7 +21928,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -17680,7 +21939,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.type", "type": "string", "tags": [], "label": "type", @@ -17693,7 +21952,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".BOOLEAN" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17701,7 +21960,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -17715,7 +21974,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.validations", "type": "Array", "tags": [], "label": "validations", @@ -17729,14 +21988,11 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_enabled.value", - "type": "boolean", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.value", + "type": "number", "tags": [], "label": "value", "description": [], - "signature": [ - "false" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -17745,10 +22001,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path", "type": "Object", "tags": [], - "label": "ssl_ca", + "label": "drive_path", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17756,24 +22012,27 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.default_value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.depends_on", "type": "Array", "tags": [], "label": "depends_on", "description": [], "signature": [ - "{ field: string; value: true; }[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17781,7 +22040,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.display", "type": "string", "tags": [], "label": "display", @@ -17802,7 +22061,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.label", "type": "string", "tags": [], "label": "label", @@ -17813,7 +22072,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.options", "type": "Array", "tags": [], "label": "options", @@ -17827,7 +22086,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.order", "type": "number", "tags": [], "label": "order", @@ -17838,7 +22097,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.placeholder", + "type": "string", + "tags": [], + "label": "placeholder", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.required", "type": "boolean", "tags": [], "label": "required", @@ -17852,7 +22122,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -17866,7 +22136,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -17877,7 +22147,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.type", "type": "string", "tags": [], "label": "type", @@ -17898,7 +22168,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -17912,7 +22182,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.validations", "type": "Array", "tags": [], "label": "validations", @@ -17926,7 +22196,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.ssl_ca.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.value", "type": "string", "tags": [], "label": "value", @@ -17936,13 +22206,141 @@ "trackAdoption": false } ] - }, + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features", + "type": "Object", + "tags": [], + "label": "features", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES", + "type": "Object", + "tags": [], + "label": "[FeatureName.SYNC_RULES]", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.advanced", + "type": "Object", + "tags": [], + "label": "advanced", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.advanced.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.basic", + "type": "Object", + "tags": [], + "label": "basic", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.basic.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ] + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.serviceType", + "type": "string", + "tags": [], + "label": "serviceType", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive", + "type": "Object", + "tags": [], + "label": "onedrive", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration", + "type": "Object", + "tags": [], + "label": "configuration", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id", "type": "Object", "tags": [], - "label": "fetch_size", + "label": "client_id", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17950,18 +22348,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -17975,7 +22376,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.display", "type": "string", "tags": [], "label": "display", @@ -17988,7 +22389,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -17996,7 +22397,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.label", "type": "string", "tags": [], "label": "label", @@ -18007,7 +22408,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.options", "type": "Array", "tags": [], "label": "options", @@ -18021,7 +22422,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.order", "type": "number", "tags": [], "label": "order", @@ -18032,13 +22433,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18046,7 +22447,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -18060,18 +22461,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.type", "type": "string", "tags": [], "label": "type", @@ -18084,7 +22488,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18092,13 +22496,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18106,7 +22510,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.validations", "type": "Array", "tags": [], "label": "validations", @@ -18120,8 +22524,8 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.fetch_size.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_id.value", + "type": "string", "tags": [], "label": "value", "description": [], @@ -18133,10 +22537,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret", "type": "Object", "tags": [], - "label": "retry_count", + "label": "client_secret", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18144,18 +22548,21 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.default_value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.default_value", + "type": "Uncategorized", "tags": [], "label": "default_value", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -18169,7 +22576,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.display", "type": "string", "tags": [], "label": "display", @@ -18182,7 +22589,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TEXTBOX" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18190,7 +22597,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.label", "type": "string", "tags": [], "label": "label", @@ -18201,7 +22608,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.options", "type": "Array", "tags": [], "label": "options", @@ -18215,7 +22622,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.order", "type": "number", "tags": [], "label": "order", @@ -18226,13 +22633,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18240,13 +22647,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "false" + "true" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18254,18 +22661,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.type", "type": "string", "tags": [], "label": "type", @@ -18278,7 +22688,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".STRING" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18286,13 +22696,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "string[]" + "never[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18300,7 +22710,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.validations", "type": "Array", "tags": [], "label": "validations", @@ -18312,153 +22722,25 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.configuration.retry_count.value", - "type": "number", - "tags": [], - "label": "value", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features", - "type": "Object", - "tags": [], - "label": "features", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES", - "type": "Object", - "tags": [], - "label": "[FeatureName.SYNC_RULES]", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.advanced", - "type": "Object", - "tags": [], - "label": "advanced", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.advanced.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.basic", - "type": "Object", - "tags": [], - "label": "basic", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.features.FeatureName.SYNC_RULES.basic.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ] - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.mysql.serviceType", - "type": "string", - "tags": [], - "label": "serviceType", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive", - "type": "Object", - "tags": [], - "label": "network_drive", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration", - "type": "Object", - "tags": [], - "label": "configuration", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.client_secret.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id", "type": "Object", "tags": [], - "label": "username", + "label": "tenant_id", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18466,7 +22748,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -18480,7 +22762,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -18494,7 +22776,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.display", "type": "string", "tags": [], "label": "display", @@ -18515,7 +22797,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.label", "type": "string", "tags": [], "label": "label", @@ -18526,7 +22808,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.options", "type": "Array", "tags": [], "label": "options", @@ -18540,7 +22822,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.order", "type": "number", "tags": [], "label": "order", @@ -18551,7 +22833,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.required", "type": "boolean", "tags": [], "label": "required", @@ -18565,7 +22847,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -18579,18 +22861,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.type", "type": "string", "tags": [], "label": "type", @@ -18611,7 +22896,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -18625,7 +22910,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.validations", "type": "Array", "tags": [], "label": "validations", @@ -18639,7 +22924,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.username.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.tenant_id.value", "type": "string", "tags": [], "label": "value", @@ -18652,10 +22937,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count", "type": "Object", "tags": [], - "label": "password", + "label": "retry_count", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18663,21 +22948,18 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.default_value", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -18691,7 +22973,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.display", "type": "string", "tags": [], "label": "display", @@ -18704,7 +22986,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18712,7 +22994,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.label", "type": "string", "tags": [], "label": "label", @@ -18723,7 +23005,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.options", "type": "Array", "tags": [], "label": "options", @@ -18737,7 +23019,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.order", "type": "number", "tags": [], "label": "order", @@ -18748,13 +23030,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18762,13 +23044,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.sensitive", "type": "boolean", "tags": [], "label": "sensitive", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18776,18 +23058,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.type", "type": "string", "tags": [], "label": "type", @@ -18800,7 +23085,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18808,13 +23093,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18822,7 +23107,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.validations", "type": "Array", "tags": [], "label": "validations", @@ -18836,7 +23121,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.password.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.retry_count.value", "type": "string", "tags": [], "label": "value", @@ -18849,10 +23134,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads", "type": "Object", "tags": [], - "label": "server_ip", + "label": "concurrent_downloads", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18860,21 +23145,18 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.default_value", - "type": "Uncategorized", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.default_value", + "type": "number", "tags": [], "label": "default_value", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -18888,7 +23170,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.display", "type": "string", "tags": [], "label": "display", @@ -18901,7 +23183,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".NUMERIC" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18909,7 +23191,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.label", "type": "string", "tags": [], "label": "label", @@ -18920,7 +23202,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.options", "type": "Array", "tags": [], "label": "options", @@ -18934,7 +23216,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.order", "type": "number", "tags": [], "label": "order", @@ -18945,24 +23227,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.placeholder", - "type": "string", - "tags": [], - "label": "placeholder", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.required", "type": "boolean", "tags": [], "label": "required", "description": [], "signature": [ - "true" + "false" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -18970,7 +23241,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -18984,18 +23255,21 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.tooltip", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.tooltip", + "type": "Uncategorized", "tags": [], "label": "tooltip", "description": [], + "signature": [ + "null" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.type", "type": "string", "tags": [], "label": "type", @@ -19008,7 +23282,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".INTEGER" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19016,13 +23290,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19030,7 +23304,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.validations", "type": "Array", "tags": [], "label": "validations", @@ -19044,7 +23318,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_ip.value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.concurrent_downloads.value", "type": "string", "tags": [], "label": "value", @@ -19057,10 +23331,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security", "type": "Object", "tags": [], - "label": "server_port", + "label": "use_document_level_security", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19068,7 +23342,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -19082,7 +23356,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -19096,7 +23370,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.display", "type": "string", "tags": [], "label": "display", @@ -19109,7 +23383,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".NUMERIC" + ".TOGGLE" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19117,7 +23391,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.label", "type": "string", "tags": [], "label": "label", @@ -19128,7 +23402,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.options", "type": "Array", "tags": [], "label": "options", @@ -19142,7 +23416,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.order", "type": "number", "tags": [], "label": "order", @@ -19153,7 +23427,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.required", "type": "boolean", "tags": [], "label": "required", @@ -19167,7 +23441,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -19181,7 +23455,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -19192,7 +23466,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.type", "type": "string", "tags": [], "label": "type", @@ -19205,7 +23479,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".INTEGER" + ".BOOLEAN" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19213,7 +23487,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", @@ -19227,7 +23501,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.validations", "type": "Array", "tags": [], "label": "validations", @@ -19241,11 +23515,14 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.server_port.value", - "type": "number", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_document_level_security.value", + "type": "boolean", "tags": [], "label": "value", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -19254,10 +23531,10 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service", "type": "Object", "tags": [], - "label": "drive_path", + "label": "use_text_extraction_service", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19265,7 +23542,7 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.default_value", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.default_value", "type": "Uncategorized", "tags": [], "label": "default_value", @@ -19279,7 +23556,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.depends_on", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.depends_on", "type": "Array", "tags": [], "label": "depends_on", @@ -19293,7 +23570,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.display", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.display", "type": "string", "tags": [], "label": "display", @@ -19306,7 +23583,7 @@ "section": "def-common.DisplayType", "text": "DisplayType" }, - ".TEXTBOX" + ".TOGGLE" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19314,7 +23591,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.label", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.label", "type": "string", "tags": [], "label": "label", @@ -19325,7 +23602,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.options", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.options", "type": "Array", "tags": [], "label": "options", @@ -19339,7 +23616,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.order", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.order", "type": "number", "tags": [], "label": "order", @@ -19350,18 +23627,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.placeholder", - "type": "string", - "tags": [], - "label": "placeholder", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.required", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.required", "type": "boolean", "tags": [], "label": "required", @@ -19375,7 +23641,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.sensitive", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.sensitive", "type": "boolean", "tags": [], "label": "sensitive", @@ -19389,7 +23655,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.tooltip", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.tooltip", "type": "string", "tags": [], "label": "tooltip", @@ -19400,7 +23666,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.type", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.type", "type": "string", "tags": [], "label": "type", @@ -19413,7 +23679,7 @@ "section": "def-common.FieldType", "text": "FieldType" }, - ".STRING" + ".BOOLEAN" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19421,13 +23687,13 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.ui_restrictions", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.ui_restrictions", "type": "Array", "tags": [], "label": "ui_restrictions", "description": [], "signature": [ - "never[]" + "string[]" ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19435,7 +23701,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.validations", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.validations", "type": "Array", "tags": [], "label": "validations", @@ -19449,11 +23715,14 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.configuration.drive_path.value", - "type": "string", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.configuration.use_text_extraction_service.value", + "type": "boolean", "tags": [], "label": "value", "description": [], + "signature": [ + "false" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false @@ -19464,7 +23733,18 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.features", "type": "Object", "tags": [], "label": "features", @@ -19475,10 +23755,10 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.features.FeatureName.DOCUMENT_LEVEL_SECURITY", "type": "Object", "tags": [], - "label": "[FeatureName.SYNC_RULES]", + "label": "[FeatureName.DOCUMENT_LEVEL_SECURITY]", "description": [], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, @@ -19486,57 +23766,17 @@ "children": [ { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.advanced", - "type": "Object", - "tags": [], - "label": "advanced", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.advanced.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "false" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.basic", - "type": "Object", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.features.FeatureName.DOCUMENT_LEVEL_SECURITY.enabled", + "type": "boolean", "tags": [], - "label": "basic", + "label": "enabled", "description": [], + "signature": [ + "true" + ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.features.FeatureName.SYNC_RULES.basic.enabled", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "true" - ], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false } ] } @@ -19544,18 +23784,7 @@ }, { "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-search-connectors/types/native_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-connectors", - "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.network_drive.serviceType", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.onedrive.serviceType", "type": "string", "tags": [], "label": "serviceType", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 6c62278c9c7be..373c49016f105 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1748 | 0 | 1748 | 0 | +| 2048 | 0 | 2048 | 0 | ## Common diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index e16e99d875e4f..49de241dc8472 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 114e188c27a7f..717b6108076fe 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-10-03 +date: 2023-10-04 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 ce42806fcf517..73884fa7880ab 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-10-03 +date: 2023-10-04 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 64f4c71406af2..116f26dd90f46 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-10-03 +date: 2023-10-04 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 2c28c62b00899..9c29a3620e564 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-10-03 +date: 2023-10-04 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 ffd307eae76a4..60dc2e146ee97 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-10-03 +date: 2023-10-04 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 f9308180da118..84b75373410ee 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-10-03 +date: 2023-10-04 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 f9483b7f24f01..ab6bc7fad047a 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-10-03 +date: 2023-10-04 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 6a26b56399b03..b240450803243 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 65001c83a8db3..aba7a850cdc69 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-10-03 +date: 2023-10-04 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 c9012627107b1..c4674eea19506 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-10-03 +date: 2023-10-04 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 50fdf7e8a3976..c9ba5071281b1 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 336043290c0fc..34661d22ed9c5 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-10-03 +date: 2023-10-04 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 47ffa14c49e35..41075154bac87 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-10-03 +date: 2023-10-04 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 e547d00ec7480..76ff7b35cdf24 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-10-03 +date: 2023-10-04 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 035ef49e2a7ee..d873aa8b59dee 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 0de273d3daef1..77c29e6a7ef8e 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-10-03 +date: 2023-10-04 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 ee19d7112cdfe..b726e7d9bcc4e 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-10-03 +date: 2023-10-04 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 594701c1a08e3..2de4b1c3d0e1a 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-10-03 +date: 2023-10-04 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 9b311e08295c7..b4fcc1f3ab65a 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 d1d8dfa04b04e..81e4be7d4d983 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-10-03 +date: 2023-10-04 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 0b6ce7671bad6..cfec7eea37bba 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-10-03 +date: 2023-10-04 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 4615f3a9990fd..295f8697601c6 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-10-03 +date: 2023-10-04 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 9475d192dcb9e..7316db3890f86 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-10-03 +date: 2023-10-04 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 adc987af94778..58a18cdb0fd67 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-10-03 +date: 2023-10-04 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 6d21e972f4589..c73e1bd6c4fcd 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-10-03 +date: 2023-10-04 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 b49489e953159..514dd3f915e8c 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-10-03 +date: 2023-10-04 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 2222126654ce8..01446a23c72d5 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-10-03 +date: 2023-10-04 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 6e37b2e5cbb76..df2d3b07e5d7b 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-10-03 +date: 2023-10-04 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 820180bf6d7e3..bfb556f280f92 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-10-03 +date: 2023-10-04 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 6b6b5a56c8f87..6ffc0c6183594 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-10-03 +date: 2023-10-04 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.devdocs.json b/api_docs/kbn_shared_svg.devdocs.json index 9a8e4e6d62ef9..588b106773268 100644 --- a/api_docs/kbn_shared_svg.devdocs.json +++ b/api_docs/kbn_shared_svg.devdocs.json @@ -22,6 +22,30 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/shared-svg", + "id": "def-common.content", + "type": "string", + "tags": [], + "label": "content", + "description": [], + "path": "packages/kbn-ambient-ui-types/index.d.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/shared-svg", + "id": "def-common.content", + "type": "string", + "tags": [], + "label": "content", + "description": [], + "path": "packages/kbn-ambient-ui-types/index.d.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/shared-svg", "id": "def-common.content", diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 52639d3e138cd..7d7b3d1e927d1 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) for ques | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 4 | 0 | 4 | 0 | ## Common diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index eaa5526e373ae..e3278f6713a62 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 7a23855fd9d1f..8c66cb2c66b09 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index b68e6714f55a3..5d5715345b9d1 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index f6d01c7f6e2bb..98366524af159 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 5b92d8dd99e1f..4532a64fa853d 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-10-03 +date: 2023-10-04 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 044b8c56c2894..51e51e1b5fcee 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-10-03 +date: 2023-10-04 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 136cc7c391fd0..3909f7cb5b76f 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 f129158020277..fbb57cc717da1 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 127298fd530de..5a72a36f1e513 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-10-03 +date: 2023-10-04 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 832d3dfc11a16..d657ae8b8c151 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-10-03 +date: 2023-10-04 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 ae30e5a216852..8b9b3d8c9479a 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 954d867800f3e..b83874e227ab1 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 b452d55803356..497dc43acf8d2 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-10-03 +date: 2023-10-04 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 efafc729119cd..a937fb3a1f2bd 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-10-03 +date: 2023-10-04 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 89e92d69b5680..2e4eb12f81ca9 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-10-03 +date: 2023-10-04 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 48bbcca295296..7cf0d2d51552a 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-10-03 +date: 2023-10-04 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 9d6246af0a978..60820afea31f1 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-10-03 +date: 2023-10-04 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 9f76869f2fcd9..5a9680546679a 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 b3a29ae0a1781..5cc6157894249 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-10-03 +date: 2023-10-04 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 fc1b91ee92b33..a68389a97579d 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 c1315061795ae..41124c5d1364c 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-10-03 +date: 2023-10-04 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 09483b90d1bb3..9b1594fa5b6d5 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 02a8d3e58c4f8..614cb0dcb1788 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-10-03 +date: 2023-10-04 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 f858f551e9c59..0ae50d2dca0cd 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 a2446518931ab..de2ccbffecc32 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-10-03 +date: 2023-10-04 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 5d48d6e7eee4b..4bdf7d15cad4e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 912de01db7195..aab0920194812 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-10-03 +date: 2023-10-04 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 2f92a2e8da3fc..2a3ff12472f28 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-10-03 +date: 2023-10-04 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 3fa1a61bd5d97..f3a46f161bbcf 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 2017f185e47aa..ad9e850bdc497 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 db19e1a9ae551..06bde717c846b 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-10-03 +date: 2023-10-04 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 4d84df2f8a319..4f0895eedd529 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-10-03 +date: 2023-10-04 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 3d5b2aa249fac..ead2f6e7e3ffd 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 b89d0a6c3fcfe..af81c4c53858f 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-10-03 +date: 2023-10-04 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 40c1bc7cf11f1..9dfb6a29e1580 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-10-03 +date: 2023-10-04 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 1c743f1e9ff11..e9892249c21ca 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-10-03 +date: 2023-10-04 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 3cd2e89c36671..0d93c547dd514 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-10-03 +date: 2023-10-04 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 0479c67007fa1..6005a60064f71 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-10-03 +date: 2023-10-04 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 a0ed89e28a51b..af997d48080e1 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-10-03 +date: 2023-10-04 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 2843e6600d2cf..6b60f64117f37 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-10-03 +date: 2023-10-04 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 6abfe3786364c..352c042ce2a03 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-10-03 +date: 2023-10-04 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 7700c96d82680..ba2faa59f4ee2 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-10-03 +date: 2023-10-04 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 6a7818956c7f1..24614e641fa4d 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-10-03 +date: 2023-10-04 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 aaa3c770fb305..10da0ca89d067 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index e42141887b78d..a215f21dde154 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index ce1ab2f74e1c4..4d864b8037c81 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-10-03 +date: 2023-10-04 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 79fc16b4822ef..a57c3ed3ebc0a 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-10-03 +date: 2023-10-04 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 1fe097e875cf6..8e830cf45b2a6 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-10-03 +date: 2023-10-04 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 c47eebab418f8..0fd0a340e4197 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-10-03 +date: 2023-10-04 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 6df3d6aedd7ce..4eae2e898df5d 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-10-03 +date: 2023-10-04 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 22aac187f11d0..c448d74c001bb 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index ab326d92e95f0..a98aee6a2762d 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-10-03 +date: 2023-10-04 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 c8f7903d41872..6abef4b3cb265 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-10-03 +date: 2023-10-04 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 4fef07727c5e8..1cf8ad38e2749 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-10-03 +date: 2023-10-04 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 a5bf8efb162ab..87218bf34c107 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-10-03 +date: 2023-10-04 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 d1669b1ffdf98..d81de2c5fca9a 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-10-03 +date: 2023-10-04 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 1ae1af45e8654..2ee6ad369ae8b 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-10-03 +date: 2023-10-04 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 1e7b690589466..b8120562c5c50 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-10-03 +date: 2023-10-04 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 b07006c4c112f..a2087344b05b3 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index c8d8a87b504e1..3ae29ff6cec18 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-10-03 +date: 2023-10-04 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 0a003c3e653de..cc32e0d5a7fe3 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-10-03 +date: 2023-10-04 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 7a3b3342d677e..7d0e762554919 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-10-03 +date: 2023-10-04 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 3a91ff72f10b2..5279f67f8e4af 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-10-03 +date: 2023-10-04 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 1e8ae3745f5fd..145b5304caf14 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-10-03 +date: 2023-10-04 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 7e9192f8ec04a..0206955946b47 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-10-03 +date: 2023-10-04 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 05df87b4d19b1..35b86e5615659 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index e07d40e2f7242..b550dbb55e6d3 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 316dd522da92c..b316eb12dad4d 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index ab01552616ac8..356e258f0b7e2 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-10-03 +date: 2023-10-04 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 681a72f46329f..85b74a775e951 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-10-03 +date: 2023-10-04 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 ece1e784ff073..ef82a6fde36af 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-10-03 +date: 2023-10-04 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 cf60ba36ac3f3..e2532acc7f909 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-10-03 +date: 2023-10-04 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 4f8ce11c263fd..535cb06bd546f 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-10-03 +date: 2023-10-04 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 a4d8dca3c79d5..9d7769ae9a297 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-10-03 +date: 2023-10-04 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 23838547aedea..f4931f56c2be0 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.devdocs.json b/api_docs/licensing.devdocs.json index d041c80cac66d..2d2924491b936 100644 --- a/api_docs/licensing.devdocs.json +++ b/api_docs/licensing.devdocs.json @@ -2186,6 +2186,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/plugin.ts" }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/server/plugin.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/plugin.ts" diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index fc932bf94ddf0..6ace00fe51a0f 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-10-03 +date: 2023-10-04 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 377ece699f997..252c39322ca6a 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2023-10-03 +date: 2023-10-04 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 3c85b961b0a04..36861d7fc6323 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 403d104fb8d1b..9ac971ea3b4a0 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 26f32368538f3..566777c5b4797 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-10-03 +date: 2023-10-04 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 24ae2df740750..26b43a942c8d1 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-10-03 +date: 2023-10-04 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 3f62a492f7546..3b1862a9f985b 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-10-03 +date: 2023-10-04 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 9e3705d5e9885..0bc75c29258ff 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-10-03 +date: 2023-10-04 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 3e6499cf0e56e..d4b6dfef85c01 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 8dfd6b380c2a4..a3f795bac57af 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1902,6 +1902,22 @@ "MlPutTrainedModelRequest", "): Promise<", "MlTrainedModelConfig", + ">; getELSER(params?: ", + { + "pluginId": "@kbn/ml-trained-models-utils", + "scope": "common", + "docId": "kibKbnMlTrainedModelsUtilsPluginApi", + "section": "def-common.GetElserOptions", + "text": "GetElserOptions" + }, + " | undefined): Promise<", + { + "pluginId": "@kbn/ml-trained-models-utils", + "scope": "common", + "docId": "kibKbnMlTrainedModelsUtilsPluginApi", + "section": "def-common.ModelDefinitionResponse", + "text": "ModelDefinitionResponse" + }, ">; }" ], "path": "x-pack/plugins/ml/server/shared.ts", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index cdb50a405db18..30cddb7edb9bc 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 007a9c8aa8160..fbec9a529dc70 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-10-03 +date: 2023-10-04 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 14b290a344ce7..fae56d87b06cb 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-10-03 +date: 2023-10-04 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 173ea869e4f25..5680809c10e42 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-10-03 +date: 2023-10-04 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 12b2ccd23a4cd..3e6d4a836f0d4 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-10-03 +date: 2023-10-04 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 8449b89d07fea..1c5b21cb4714e 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-10-03 +date: 2023-10-04 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 88f03d9695b09..5ce826a89a292 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-10-03 +date: 2023-10-04 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 9497303b79ed6..1d3696f26300b 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-10-03 +date: 2023-10-04 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 d09f0f28e4a84..c36dfffa7e4f1 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 2f64d0f377d64..b3b5d7dc00d55 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index a11f5f715c431..ac51c37ec4bed 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-10-03 +date: 2023-10-04 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 cfb672376fedb..495743d4247b0 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-10-03 +date: 2023-10-04 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 adce418422e7a..7e19211aec394 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-10-03 +date: 2023-10-04 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 a232cc8428512..d9d8766ba9cca 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-10-03 +date: 2023-10-04 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 ed9e95eada5f8..5385249ce7b86 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 75443 | 223 | 64253 | 1574 | +| 75755 | 223 | 64565 | 1575 | ## Plugin Directory @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 17 | 1 | 15 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 67 | 1 | 4 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 776 | 1 | 745 | 50 | -| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | +| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 29 | 0 | 29 | 120 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 9 | 0 | 9 | 0 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | @@ -50,7 +50,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 14 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 149 | 0 | 126 | 6 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 309 | 0 | 302 | 16 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 311 | 0 | 304 | 16 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@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 | @@ -185,7 +185,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 240 | 1 | 196 | 17 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 578 | 1 | 552 | 52 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 579 | 1 | 553 | 52 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 145 | 0 | 103 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 10 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 13 | 0 | 10 | 3 | @@ -512,7 +512,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 5 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 8 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 2 | 0 | 1 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 22 | 0 | 22 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 29 | 0 | 29 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 31 | 1 | 24 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 78 | 0 | 76 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 55 | 1 | 50 | 0 | @@ -544,7 +544,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 114 | 0 | 111 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 68 | 0 | 68 | 0 | -| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 1748 | 0 | 1748 | 0 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2048 | 0 | 2048 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 15 | 0 | 8 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 14 | 0 | 14 | 6 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 50 | 0 | 47 | 0 | @@ -576,7 +576,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/enterprise-search-frontend @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/enterprise-search-frontend ) | - | 1 | 0 | 1 | 0 | | | [@elastic/security-solution @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/security-solution ) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 0 | 0 | -| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 2 | 0 | 2 | 0 | +| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 4 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 2 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 40 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 4 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index b9071fb7255ac..c94afd6726d23 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-10-03 +date: 2023-10-04 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 910a7822191e5..3a4e594dfff37 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-10-03 +date: 2023-10-04 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 4932f1ab8723f..00457f1b7f5ad 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-10-03 +date: 2023-10-04 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 bc7a7368d5631..93900ce0671df 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-10-03 +date: 2023-10-04 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 4e77594da9d20..e5a5c3745fedf 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-10-03 +date: 2023-10-04 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 fa08fbec58bdd..d57bdbfe3d304 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-10-03 +date: 2023-10-04 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 e127e3bf39756..17be3ce7347ab 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-10-03 +date: 2023-10-04 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 2e8412a73e61b..f80203dc65a03 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-10-03 +date: 2023-10-04 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 d3ee7b06b4b07..057ef309a1908 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-10-03 +date: 2023-10-04 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 5d95b14324e04..e2ef88610bad4 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-10-03 +date: 2023-10-04 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 2dac7732e65cb..beff3d03e6432 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-10-03 +date: 2023-10-04 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 db876d9a04b55..9bb0ee48c65c7 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-10-03 +date: 2023-10-04 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 839a1a4e86564..9be994c1a1b97 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-10-03 +date: 2023-10-04 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 a71621cebb0cf..035cafcea23c1 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-10-03 +date: 2023-10-04 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 67d56993cf219..fd1e6da25c084 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-10-03 +date: 2023-10-04 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 9c61450fa90e3..2f1dad24ba22d 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-10-03 +date: 2023-10-04 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 922fe2cc11f10..8a8530a7e0bc4 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-10-03 +date: 2023-10-04 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 699591e999472..6750369625a69 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-10-03 +date: 2023-10-04 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 7b6a5433829f6..61333fa922ef8 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-10-03 +date: 2023-10-04 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 d31f881a4ee4d..f2a4007dfabc1 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-10-03 +date: 2023-10-04 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 7e1b9812c790c..5f9ac7fdfc053 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-10-03 +date: 2023-10-04 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 e3d240b492aed..545a9b04455ea 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-10-03 +date: 2023-10-04 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 b99b55db755e2..3a1d3130b69a1 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-10-03 +date: 2023-10-04 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 0b5870d7b156c..1fde97f8160a1 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-10-03 +date: 2023-10-04 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 5da9475f7ea01..1655bfd9995c6 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-10-03 +date: 2023-10-04 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 3cbd0ff796db1..65d3d009b0817 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-10-03 +date: 2023-10-04 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 82aa52119bfaa..6ae122edde8f7 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-10-03 +date: 2023-10-04 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 f9eef746786cd..df49f554a3e4c 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-10-03 +date: 2023-10-04 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 ccca429893484..77a5f87ceff41 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index abdde3e96fa97..620d48af005c2 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -1773,7 +1773,7 @@ "signature": [ "Pick<", "TaskScheduling", - ", \"schedule\" | \"runSoon\" | \"ephemeralRunNow\" | \"ensureScheduled\" | \"bulkUpdateSchedules\" | \"bulkEnable\" | \"bulkDisable\" | \"bulkSchedule\"> & Pick<", + ", \"schedule\" | \"runSoon\" | \"ephemeralRunNow\" | \"ensureScheduled\" | \"bulkUpdateSchedules\" | \"bulkEnable\" | \"bulkDisable\" | \"bulkSchedule\" | \"bulkUpdateState\"> & Pick<", "TaskStore", ", \"get\" | \"aggregate\" | \"fetch\" | \"remove\" | \"bulkRemove\"> & { removeIfExists: (id: string) => Promise; } & { supportsEphemeralTasks: () => boolean; getRegisteredTypes: () => string[]; }" ], diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 6fadb362315e7..487a988e98d83 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-10-03 +date: 2023-10-04 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 e1e7d23a2be32..10f1f2535bc91 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-10-03 +date: 2023-10-04 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 48d6b9f15f203..293abfc53166a 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-10-03 +date: 2023-10-04 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 690d9291319cc..8a56f882f506a 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-10-03 +date: 2023-10-04 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 3ef4221459dcb..3c18c09632a4d 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-10-03 +date: 2023-10-04 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 b33ae7482afdd..b151e77653cc6 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-10-03 +date: 2023-10-04 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 3f69beef3f339..ac963e4b5591f 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-10-03 +date: 2023-10-04 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 c4fccb6b21c2a..b080995580376 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-10-03 +date: 2023-10-04 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 dde7bc56d4cef..61eac471b522f 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index a71ebed1405af..6b205e65bf630 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1789,6 +1789,25 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.useBulkUntrackAlerts", + "type": "Function", + "tags": [], + "label": "useBulkUntrackAlerts", + "description": [], + "signature": [ + "() => ", + "UseMutationResult", + "" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.useConnectorContext", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 51fe48e759541..48e4f9d89c804 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 578 | 1 | 552 | 52 | +| 579 | 1 | 553 | 52 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 26ec6ab9333f9..6a0bbf988918f 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-10-03 +date: 2023-10-04 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 fa9574593b9f9..af87c5d67d7a2 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-10-03 +date: 2023-10-04 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 08be104a6529d..fb2d331b7115f 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-10-03 +date: 2023-10-04 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 e692bb225f19b..06f5ae34177b2 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-10-03 +date: 2023-10-04 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 303621cf610ba..925959a291e16 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-10-03 +date: 2023-10-04 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 42b518b4a9158..e1252144f7396 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-10-03 +date: 2023-10-04 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 35ad388965ebc..7d8a95edf987d 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-10-03 +date: 2023-10-04 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 65c769e8b886e..3eb337c05ae3d 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-10-03 +date: 2023-10-04 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 1d8770c644b54..7b6f2f888e0c0 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-10-03 +date: 2023-10-04 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 8d9e88f57a46a..365162b61ee7d 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-10-03 +date: 2023-10-04 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 18c9d67519260..02be92a35c2d5 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-10-03 +date: 2023-10-04 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 acfa0c5465ac7..aaa1b41d5bd0c 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-10-03 +date: 2023-10-04 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 3e38f2d28024d..bfe7402987c65 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-10-03 +date: 2023-10-04 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 443393fd61d2a..63ce12aab067d 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-10-03 +date: 2023-10-04 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 73879eff9a996..9f2e4cd8f8961 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-10-03 +date: 2023-10-04 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 cc1823d335af6..2eefb08259743 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-10-03 +date: 2023-10-04 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 e1b22fe8aa5f6..dfc9b6cd8ad57 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-10-03 +date: 2023-10-04 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 087b76cd4f51b..2c2a070030345 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-10-03 +date: 2023-10-04 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 f8d6e3cde89f0..cdf3234db07ab 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-10-03 +date: 2023-10-04 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 2be47afee8f58..a314818334cbb 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 7cb2809508078..28f223df4f772 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-10-03 +date: 2023-10-04 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 471ae6a858a72ad5d56779016ebfb9c9abe94eaa Mon Sep 17 00:00:00 2001 From: Katerina Date: Wed, 4 Oct 2023 08:20:12 +0200 Subject: [PATCH 041/170] [APM] Add telemetry from custom dashboards (#167866) ## Summary closes: https://github.com/elastic/kibana/issues/167865 Adds telemetry for the total number of custom dashboards linked with services and the kuery used ## How to test Navigate to `internal/apm/debug-telemetry` on any of the deployed environments You will find the custom_dashboards field like this image ### Update indexer - https://github.com/elastic/telemetry/pull/2702 --- .../__snapshots__/apm_telemetry.test.ts.snap | 30 +++++++++++ .../collect_data_telemetry/tasks.test.ts | 52 +++++++++++++++++++ .../collect_data_telemetry/tasks.ts | 30 +++++++++++ .../apm/server/lib/apm_telemetry/schema.ts | 30 +++++++++++ .../apm/server/lib/apm_telemetry/types.ts | 5 ++ .../schema/xpack_plugins.json | 33 ++++++++++++ 6 files changed, 180 insertions(+) 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 dac7b7a8d034b..f8e220ca97946 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 @@ -2577,6 +2577,22 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the } } }, + "custom_dashboards": { + "properties": { + "kuery_fields": { + "type": "keyword", + "_meta": { + "description": "An array of up to 500 unique fields used to create the custom dashboards across all spaces. Example [service.language.name, service.name] " + } + }, + "total": { + "type": "long", + "_meta": { + "description": "Total number of custom dashboards retrived from the saved object across all spaces" + } + } + } + }, "per_service": { "properties": { "service_id": { @@ -2967,6 +2983,20 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the } } }, + "custom_dashboards": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long", + "_meta": { + "description": "Execution time in milliseconds for the \\"custom_dashboards\\" task" + } + } + } + } + } + }, "per_service": { "properties": { "took": { diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts index 0cbd35a8f3bd6..48dd36e0dacda 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts @@ -801,6 +801,58 @@ describe('data telemetry collection tasks', () => { }); }); + describe('custom dashboards', () => { + const task = tasks.find((t) => t.name === 'custom_dashboards'); + const savedObjectsClient = savedObjectsClientMock.create(); + + it('returns custom dashboards stats from all spaces', async () => { + savedObjectsClient.find.mockResolvedValueOnce({ + page: 1, + per_page: 500, + total: 2, + saved_objects: [ + { + type: 'apm-custom-dashboards', + id: '0b6157f0-44bd-11ed-bdb7-bffab551cd4d', + namespaces: ['default'], + attributes: { + dashboardSavedObjectId: 'foo-id', + serviceEnvironmentFilterEnabled: true, + serviceNameFilterEnabled: true, + kuery: 'service.name: frontend and service.environment: prod', + }, + references: [], + score: 1, + }, + { + type: 'apm-custom-dashboards', + id: '0b6157f0-44bd-11ed-bdb7-bffab551cd4d', + namespaces: ['space-1'], + attributes: { + dashboardSavedObjectId: 'bar-id', + serviceEnvironmentFilterEnabled: true, + serviceNameFilterEnabled: true, + kuery: 'service.name: frontend', + }, + references: [], + score: 0, + }, + ], + }); + + expect( + await task?.executor({ + savedObjectsClient, + } as any) + ).toEqual({ + custom_dashboards: { + kuery_fields: ['service.name', 'service.environment'], + total: 2, + }, + }); + }); + }); + describe('top_traces', () => { const task = tasks.find((t) => t.name === 'top_traces'); diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index b980c79e261cd..1ae9b5752a1c8 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -71,6 +71,10 @@ import { import { APM_AGENT_CONFIGURATION_INDEX } from '../../../routes/settings/apm_indices/apm_system_index_constants'; import { IndicesStatsResponse, TelemetryClient } from '../telemetry_client'; import { RollupInterval } from '../../../../common/rollup'; +import { + APM_CUSTOM_DASHBOARDS_SAVED_OBJECT_TYPE, + SavedApmCustomDashboard, +} from '../../../../common/custom_dashboards'; type ISavedObjectsClient = Pick; const TIME_RANGES = ['1d', 'all'] as const; @@ -1491,6 +1495,32 @@ export const tasks: TelemetryTask[] = [ }; }, }, + { + name: 'custom_dashboards', + executor: async ({ savedObjectsClient }) => { + const response = await savedObjectsClient.find({ + type: APM_CUSTOM_DASHBOARDS_SAVED_OBJECT_TYPE, + page: 1, + perPage: 500, + sortField: 'updated_at', + sortOrder: 'desc', + namespaces: ['*'], + }); + + const kueryNodes = response.saved_objects.map( + ({ attributes: { kuery } }) => fromKueryExpression(kuery ?? '') + ); + + const kueryFields = getKueryFields(kueryNodes); + + return { + custom_dashboards: { + kuery_fields: uniq(kueryFields), + total: response.total ?? 0, + }, + }; + }, + }, { name: 'per_service', executor: async ({ indices, telemetryClient }) => { 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 7c5ca6c78c7b3..59f8c1f7097e7 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts @@ -1083,6 +1083,25 @@ export const apmSchema: MakeSchemaFrom = { }, }, }, + custom_dashboards: { + kuery_fields: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: + 'An array of up to 500 unique fields used to create the custom dashboards across all spaces. Example [service.language.name, service.name] ', + }, + }, + }, + total: { + type: 'long', + _meta: { + description: + 'Total number of custom dashboards retrived from the saved object across all spaces', + }, + }, + }, per_service: { type: 'array', items: { ...apmPerServiceSchema } }, top_traces: { max: { @@ -1263,6 +1282,17 @@ export const apmSchema: MakeSchemaFrom = { }, }, }, + custom_dashboards: { + took: { + ms: { + type: 'long', + _meta: { + description: + 'Execution time in milliseconds for the "custom_dashboards" task', + }, + }, + }, + }, per_service: { took: { ms: { diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts index b4beb768ae334..11e181f552b47 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts @@ -213,6 +213,10 @@ export interface APMUsage { kuery_fields: string[]; total: number; }; + custom_dashboards: { + kuery_fields: string[]; + total: number; + }; per_service: APMPerService[]; top_traces: { max: number; @@ -234,6 +238,7 @@ export interface APMUsage { | 'cardinality' | 'environments' | 'service_groups' + | 'custom_dashboards' | 'per_service' | 'top_traces', { took: { ms: number } } 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 db7cac9e55cd3..be6ceb1dab3b7 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -5672,6 +5672,25 @@ } } }, + "custom_dashboards": { + "properties": { + "kuery_fields": { + "type": "array", + "items": { + "type": "keyword", + "_meta": { + "description": "An array of up to 500 unique fields used to create the custom dashboards across all spaces. Example [service.language.name, service.name] " + } + } + }, + "total": { + "type": "long", + "_meta": { + "description": "Total number of custom dashboards retrived from the saved object across all spaces" + } + } + } + }, "per_service": { "type": "array", "items": { @@ -6077,6 +6096,20 @@ } } }, + "custom_dashboards": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long", + "_meta": { + "description": "Execution time in milliseconds for the \"custom_dashboards\" task" + } + } + } + } + } + }, "per_service": { "properties": { "took": { From 96a1ef45815fe5482dff2d2ed97131b685091bb9 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Wed, 4 Oct 2023 02:34:00 -0400 Subject: [PATCH 042/170] [Security Solution][Timeline] - ESQL in timeline (#166764) ## Summary This PR leverages the work done [here](https://github.com/elastic/kibana/pull/165596) to introduce ES|QL into timeline. The goal of this PR is to provide security users easy access to ESQL from within the security solution. It will be released in `technical preview` for the 8.11 release. image ### Checklist Delete any items that are not applicable to this PR. - [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: Jatin Kathuria Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Jatin Kathuria --- config/serverless.security.yml | 1 - .../top_nav/discover_topnav.test.tsx | 23 +++++ .../components/top_nav/discover_topnav.tsx | 21 +++-- .../search_bar_customization.ts | 1 + .../cypress/e2e/all/alerts_cases.cy.ts | 4 +- .../e2e/all/alerts_multiple_agents.cy.ts | 15 ++-- .../osquery/cypress/screens/live_query.ts | 2 + .../common/experimental_features.ts | 2 +- .../use_discover_in_timeline_actions.tsx | 10 +-- .../use_discover_in_timeline_actions.test.tsx | 30 +++++-- .../use_discover_in_timeline_actions.tsx | 28 ++++-- .../use_search_bar_customizations.tsx | 3 + .../use_set_discover_customizations.ts | 1 - .../timeline/discover_tab_content/index.tsx | 22 ++--- .../timeline/tabs_content/index.tsx | 47 +++++++--- .../timeline/tabs_content/translations.ts | 13 ++- .../timelines/discover/cell_actions.cy.ts | 32 +------ .../timelines/discover/discover_state.cy.ts | 48 ++++------ .../discover_timeline_state_integration.cy.ts | 49 +++------- .../timelines/discover/search_filter.cy.ts | 89 +++++-------------- .../cypress/screens/discover.ts | 8 +- .../cypress/tasks/alerts.ts | 2 +- .../cypress/tasks/discover.ts | 35 +++++++- .../cypress/tasks/timeline.ts | 6 +- 24 files changed, 247 insertions(+), 245 deletions(-) diff --git a/config/serverless.security.yml b/config/serverless.security.yml index f8ed3d37345e5..057739b8dc50e 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -35,7 +35,6 @@ xpack.fleet.internal.registry.spec.max: '3.0' # Serverless security specific options xpack.securitySolution.enableExperimental: - - discoverInTimeline - esqlRulesDisabled xpack.ml.ad.enabled: true diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx index 5b00f1ee6e75e..50e8b9e16a418 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx @@ -46,6 +46,11 @@ const mockSearchBarCustomizationWithCustomSearchBar: SearchBarCustomization = { CustomSearchBar: MockCustomSearchBar, }; +const mockSearchBarCustomizationWithHiddenDataViewPicker: SearchBarCustomization = { + id: 'search_bar', + hideDataViewPicker: true, +}; + let mockUseCustomizations = false; jest.mock('../../../../customizations', () => ({ @@ -256,5 +261,23 @@ describe('Discover topnav component', () => { ).find(mockSearchBarCustomization.CustomDataViewPicker!); expect(dataViewPickerOverride.length).toBe(1); }); + + it('should not render the dataView picker when hideDataViewPicker is true', () => { + (useDiscoverCustomization as jest.Mock).mockImplementation((id: DiscoverCustomizationId) => { + if (id === 'search_bar') { + return mockSearchBarCustomizationWithHiddenDataViewPicker; + } + }); + + const props = getProps(); + const component = mountWithIntl( + + + + ); + + const topNav = component.find(mockDiscoverService.navigation.ui.AggregateQueryTopNavMenu); + expect(topNav.prop('dataViewPickerComponentProps')).toBeUndefined(); + }); }); }); diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 650d5141536e9..7b53587d08eb4 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -114,6 +114,7 @@ export const DiscoverTopNav = ({ }, [dataViewEditor, stateContainer]); const topNavCustomization = useDiscoverCustomization('top_nav'); + const topNavMenu = useMemo( () => getTopNavLinks({ @@ -171,6 +172,17 @@ export const DiscoverTopNav = ({ if (isESQLModeEnabled) { supportedTextBasedLanguages.push('ESQL'); } + + const searchBarCustomization = useDiscoverCustomization('search_bar'); + + const SearchBar = useMemo( + () => searchBarCustomization?.CustomSearchBar ?? AggregateQueryTopNavMenu, + [searchBarCustomization?.CustomSearchBar, AggregateQueryTopNavMenu] + ); + + const shouldHideDefaultDataviewPicker = + !!searchBarCustomization?.CustomDataViewPicker || !!searchBarCustomization?.hideDataViewPicker; + const dataViewPickerProps: DataViewPickerProps = { trigger: { label: dataView?.getName() || '', @@ -201,13 +213,6 @@ export const DiscoverTopNav = ({ [services, stateContainer] ); - const searchBarCustomization = useDiscoverCustomization('search_bar'); - - const SearchBar = useMemo( - () => searchBarCustomization?.CustomSearchBar ?? AggregateQueryTopNavMenu, - [searchBarCustomization?.CustomSearchBar, AggregateQueryTopNavMenu] - ); - return ( >; + hideDataViewPicker?: boolean; } diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts index b3053fc11bc9f..5b9a43b6015ff 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { LIVE_QUERY_EDITOR } from '../../screens/live_query'; +import { OSQUERY_FLYOUT_BODY_EDITOR } from '../../screens/live_query'; import { cleanupCase, cleanupPack, @@ -79,7 +79,7 @@ describe( cy.getBySel('osquery-action-item').click(); cy.contains(/^\d+ agen(t|ts) selected/); cy.contains('Run a set of queries in a pack').click(); - cy.get(LIVE_QUERY_EDITOR).should('not.exist'); + cy.get(OSQUERY_FLYOUT_BODY_EDITOR).should('not.exist'); cy.getBySel('select-live-pack').click().type(`${packName}{downArrow}{enter}`); submitQuery(); cy.get('[aria-label="Add to Case"]').first().click(); diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts index d9be2632bdca2..84f685c87b770 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts @@ -14,6 +14,7 @@ import { takeOsqueryActionWithParams, } from '../../tasks/live_query'; import { ServerlessRoleName } from '../../support/roles'; +import { OSQUERY_FLYOUT_BODY_EDITOR } from '../../screens/live_query'; describe( 'Alert Event Details - dynamic params', @@ -43,12 +44,14 @@ describe( it('should substitute parameters in investigation guide', () => { cy.getBySel('expand-event').first().click(); cy.getBySel('securitySolutionFlyoutInvestigationGuideButton').click(); - cy.contains('Get processes').click(); - cy.getBySel('flyout-body-osquery').within(() => { - cy.contains("SELECT * FROM os_version where name='Ubuntu';"); - cy.contains('host.os.platform'); - cy.contains('platform'); - }); + // Flakes at times if the button is only clicked once + cy.contains('Get processes').should('be.visible').dblclick({ force: true }); + // Cypress can properly reads the fields when the codeEditor is interacted with first + // This is probably due to the tokenization of the fields when it's inactive + cy.get(OSQUERY_FLYOUT_BODY_EDITOR).click(); + cy.getBySel('flyout-body-osquery').contains("SELECT * FROM os_version where name='Ubuntu';"); + cy.getBySel('flyout-body-osquery').contains('host.os.platform'); + cy.getBySel('flyout-body-osquery').contains('platform'); }); // response-actions-notification doesn't exist in expandable flyout diff --git a/x-pack/plugins/osquery/cypress/screens/live_query.ts b/x-pack/plugins/osquery/cypress/screens/live_query.ts index b44764331fb3a..05b672474a8d8 100644 --- a/x-pack/plugins/osquery/cypress/screens/live_query.ts +++ b/x-pack/plugins/osquery/cypress/screens/live_query.ts @@ -8,6 +8,8 @@ export const AGENT_FIELD = '[data-test-subj="comboBoxInput"]'; export const ALL_AGENTS_OPTION = '[title="All agents"]'; export const LIVE_QUERY_EDITOR = '.kibanaCodeEditor'; +export const OSQUERY_FLYOUT_BODY_EDITOR = + '[data-test-subj="flyout-body-osquery"] .kibanaCodeEditor'; export const SUBMIT_BUTTON = '#submit-button'; export const RESULTS_TABLE = 'osqueryResultsTable'; diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index b92da8f442a07..a30b5cfe17ae6 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -108,7 +108,7 @@ export const allowedExperimentalValues = Object.freeze({ * Enables Discover embedded within timeline * * */ - discoverInTimeline: false, + discoverInTimeline: true, /** * disables ES|QL rules diff --git a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/__mocks__/use_discover_in_timeline_actions.tsx b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/__mocks__/use_discover_in_timeline_actions.tsx index cd192a528e36f..64f284a8e2137 100644 --- a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/__mocks__/use_discover_in_timeline_actions.tsx +++ b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/__mocks__/use_discover_in_timeline_actions.tsx @@ -7,22 +7,22 @@ export const useDiscoverInTimelineActions = () => { return { - resetDiscoverAppState: jest.fn(), + resetDiscoverAppState: jest.fn().mockResolvedValue(true), restoreDiscoverAppStateFromSavedSearch: jest.fn(), updateSavedSearch: jest.fn(), getAppStateFromSavedSearch: jest.fn(), - defaultDiscoverAppState: { + getDefaultDiscoverAppState: () => ({ query: { query: '', - language: 'kuery', + language: 'esql', }, sort: [['@timestamp', 'desc']], columns: [], index: 'security-solution-default', interval: 'auto', filters: [], - hideChart: true, + hideChart: false, grid: {}, - }, + }), }; }; diff --git a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx index 79e138347c79c..8463097d98d07 100644 --- a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx @@ -25,8 +25,12 @@ import { createStore } from '../../store'; import { TimelineId } from '../../../../common/types'; import type { ComponentType, FC, PropsWithChildren } from 'react'; import React from 'react'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import TestRenderer from 'react-test-renderer'; -const mockDiscoverStateContainerRef = { +const { act } = TestRenderer; + +let mockDiscoverStateContainerRef = { current: discoverPluginMock.getDiscoverStateMock({}), }; @@ -64,6 +68,9 @@ const getTestProviderWithCustomState = (state: State = mockState) => { }; const renderTestHook = (customWrapper: ComponentType = getTestProviderWithCustomState()) => { + mockDiscoverStateContainerRef = { + current: discoverPluginMock.getDiscoverStateMock({}), + }; return renderHook(() => useDiscoverInTimelineActions(mockDiscoverStateContainerRef), { wrapper: customWrapper, }); @@ -120,6 +127,13 @@ export const savedSearchMock = { const startServicesMock = createStartServicesMock(); +startServicesMock.dataViews.get = jest.fn( + async () => + ({ + getIndexPattern: jest.fn(), + } as unknown as DataView) +); + describe('useDiscoverInTimelineActions', () => { beforeEach(() => { (useKibana as jest.Mock).mockImplementation(() => ({ @@ -188,15 +202,15 @@ describe('useDiscoverInTimelineActions', () => { describe('resetDiscoverAppState', () => { it('should reset Discover AppState to a default state', async () => { const { result, waitFor } = renderTestHook(); - result.current.resetDiscoverAppState(); + await result.current.resetDiscoverAppState(); await waitFor(() => { const appState = mockDiscoverStateContainerRef.current.appState.getState(); - expect(appState).toMatchObject(result.current.defaultDiscoverAppState); + expect(appState).toMatchObject(result.current.getDefaultDiscoverAppState()); }); }); it('should reset Discover time to a default state', async () => { const { result, waitFor } = renderTestHook(); - result.current.resetDiscoverAppState(); + await result.current.resetDiscoverAppState(); await waitFor(() => { const globalState = mockDiscoverStateContainerRef.current.globalState.get(); expect(globalState).toMatchObject({ time: { from: 'now-15m', to: 'now' } }); @@ -206,7 +220,9 @@ describe('useDiscoverInTimelineActions', () => { describe('updateSavedSearch', () => { it('should add defaults to the savedSearch before updating saved search', async () => { const { result } = renderTestHook(); - await result.current.updateSavedSearch(savedSearchMock, TimelineId.active); + await act(async () => { + await result.current.updateSavedSearch(savedSearchMock, TimelineId.active); + }); expect(startServicesMock.savedSearch.save).toHaveBeenNthCalledWith( 1, @@ -242,7 +258,9 @@ describe('useDiscoverInTimelineActions', () => { const LocalTestProvider = getTestProviderWithCustomState(localMockState); const { result } = renderTestHook(LocalTestProvider); - await result.current.updateSavedSearch(savedSearchMock, TimelineId.active); + await act(async () => { + await result.current.updateSavedSearch(savedSearchMock, TimelineId.active); + }); expect(startServicesMock.savedSearch.save).toHaveBeenNthCalledWith( 1, diff --git a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.tsx b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.tsx index 8361612231a24..d6acd1ce7ffc9 100644 --- a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.tsx +++ b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.tsx @@ -40,7 +40,11 @@ export const useDiscoverInTimelineActions = ( const { addError } = useAppToasts(); const { - services: { customDataService: discoverDataService, savedSearch: savedSearchService }, + services: { + customDataService: discoverDataService, + savedSearch: savedSearchService, + dataViews: dataViewService, + }, } = useKibana(); const dispatch = useDispatch(); @@ -69,18 +73,23 @@ export const useDiscoverInTimelineActions = ( }, }); - const defaultDiscoverAppState: DiscoverAppState = useMemo(() => { + const getDefaultDiscoverAppState: () => Promise = useCallback(async () => { + const localDataViewId = dataViewId ?? 'security-solution-default'; + + const dataView = await dataViewService.get(localDataViewId); + return { - query: discoverDataService.query.queryString.getDefaultQuery(), + query: { + esql: dataView ? `from ${dataView.getIndexPattern()} | limit 10` : '', + }, sort: [['@timestamp', 'desc']], columns: [], - index: dataViewId ?? 'security-solution-default', interval: 'auto', filters: [], hideChart: true, grid: {}, }; - }, [discoverDataService, dataViewId]); + }, [dataViewService, dataViewId]); /* * generates Appstate from a given saved Search object @@ -123,13 +132,14 @@ export const useDiscoverInTimelineActions = ( * resets discover state to a default value * * */ - const resetDiscoverAppState = useCallback(() => { + const resetDiscoverAppState = useCallback(async () => { + const defaultDiscoverAppState = await getDefaultDiscoverAppState(); discoverStateContainer.current?.appState.set(defaultDiscoverAppState); discoverStateContainer.current?.globalState.set({ ...discoverStateContainer.current?.globalState.get(), time: defaultDiscoverTimeRange, }); - }, [defaultDiscoverAppState, discoverStateContainer]); + }, [getDefaultDiscoverAppState, discoverStateContainer]); const persistSavedSearch = useCallback( async (savedSearch: SavedSearch, savedSearchOption: SaveSavedSearchOptions) => { @@ -220,14 +230,14 @@ export const useDiscoverInTimelineActions = ( restoreDiscoverAppStateFromSavedSearch, updateSavedSearch, getAppStateFromSavedSearch, - defaultDiscoverAppState, + getDefaultDiscoverAppState, }), [ resetDiscoverAppState, restoreDiscoverAppStateFromSavedSearch, updateSavedSearch, getAppStateFromSavedSearch, - defaultDiscoverAppState, + getDefaultDiscoverAppState, ] ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx index 66ef304dc7b7f..c748357bb24b8 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx @@ -6,15 +6,18 @@ */ import type { CustomizationCallback } from '@kbn/discover-plugin/public'; +import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { useGetStatefulQueryBar } from '../use_get_stateful_query_bar'; export const useSearchBarCustomizations = () => { const { CustomStatefulTopNavKqlQueryBar } = useGetStatefulQueryBar(); + const isDiscoverInTimelineEnabled = useIsExperimentalFeatureEnabled('discoverInTimeline'); const setSearchBarCustomizations: CustomizationCallback = ({ customizations }) => { customizations.set({ id: 'search_bar', CustomSearchBar: CustomStatefulTopNavKqlQueryBar, + hideDataViewPicker: isDiscoverInTimelineEnabled, }); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts index 3ae7f5c86ad00..2adf30691294e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts @@ -11,7 +11,6 @@ import { useSearchBarCustomizations } from './use_search_bar_customizations'; export const useSetDiscoverCustomizationCallbacks = (): CustomizationCallback[] => { const searchBarCustomizationCallback = useSearchBarCustomizations(); - const histogramCustomizationCallback = useHistogramCustomization(); return [searchBarCustomizationCallback, histogramCustomizationCallback]; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx index abce4c9efa9a4..97737a8ebfc3b 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx @@ -72,6 +72,7 @@ export const DiscoverTabContent: FC = ({ timelineId }) updateSavedSearch, restoreDiscoverAppStateFromSavedSearch, resetDiscoverAppState, + getDefaultDiscoverAppState, } = useDiscoverInTimelineContext(); const { @@ -126,9 +127,10 @@ export const DiscoverTabContent: FC = ({ timelineId }) if (!savedSearchById) { // nothing to restore if savedSearchById is null if (status === 'draft') { - resetDiscoverAppState(); + resetDiscoverAppState().then(() => { + setSavedSearchLoaded(true); + }); } - setSavedSearchLoaded(true); return; } restoreDiscoverAppStateFromSavedSearch(savedSearchById); @@ -227,15 +229,13 @@ export const DiscoverTabContent: FC = ({ timelineId }) savedSearchAppState = getAppStateFromSavedSearch(localSavedSearch); } - const finalAppState = savedSearchAppState?.appState ?? discoverAppState; + const defaultDiscoverAppState = await getDefaultDiscoverAppState(); - if (finalAppState) { - stateContainer.appState.set(finalAppState); - await stateContainer.appState.replaceUrlState(finalAppState); - } else { - // set initial dataView Id - if (dataView) stateContainer.actions.setDataView(dataView); - } + const finalAppState = + savedSearchAppState?.appState ?? discoverAppState ?? defaultDiscoverAppState; + + stateContainer.appState.set(finalAppState); + await stateContainer.appState.replaceUrlState(finalAppState); const unsubscribeState = stateContainer.appState.state$.subscribe({ next: setDiscoverAppState, @@ -272,12 +272,12 @@ export const DiscoverTabContent: FC = ({ timelineId }) setDiscoverSavedSearchState, setDiscoverInternalState, setDiscoverAppState, - dataView, setDiscoverStateContainer, getAppStateFromSavedSearch, discoverDataService.query.timefilter.timefilter, savedSearchId, savedSearchService, + getDefaultDiscoverAppState, ] ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx index b7b4e92afcb6f..0f6a3fad1eb66 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiBadge, EuiSkeletonText, EuiTabs, EuiTab } from '@elastic/eui'; +import { EuiBadge, EuiSkeletonText, EuiTabs, EuiTab, EuiBetaBadge } from '@elastic/eui'; import { css } from '@emotion/react'; import { Assistant } from '@kbn/elastic-assistant'; import { isEmpty } from 'lodash/fp'; @@ -14,6 +14,7 @@ import React, { lazy, memo, Suspense, useCallback, useEffect, useMemo, useState import { useDispatch } from 'react-redux'; import styled from 'styled-components'; +import { FormattedMessage } from '@kbn/i18n-react'; import { useAssistantTelemetry } from '../../../../assistant/use_assistant_telemetry'; import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useConversationStore } from '../../../../assistant/use_conversation_store'; @@ -44,6 +45,7 @@ import * as i18n from './translations'; import { useLicense } from '../../../../common/hooks/use_license'; import { TIMELINE_CONVERSATION_TITLE } from '../../../../assistant/content/conversations/translations'; import { initializeTimelineSettings } from '../../../store/timeline/actions'; +import { DISCOVER_ESQL_IN_TIMELINE_TECHNICAL_PREVIEW } from './translations'; const HideShowContainer = styled.div.attrs<{ $isVisible: boolean; isOverflowYScroll: boolean }>( ({ $isVisible = false, isOverflowYScroll = false }) => ({ @@ -248,8 +250,18 @@ const CountBadge = styled(EuiBadge)` margin-left: ${({ theme }) => theme.eui.euiSizeS}; `; +const StyledEuiBetaBadge = styled(EuiBetaBadge)` + vertical-align: middle; + margin-left: ${({ theme }) => theme.eui.euiSizeS}; + + &:hover { + cursor: pointer; + } +`; + const StyledEuiTab = styled(EuiTab)` .euiTab__content { + align-items: center; display: flex; flex-direction: row; white-space: pre; @@ -388,6 +400,28 @@ const TabsContentComponent: React.FC = ({ {i18n.QUERY_TAB} {showTimeline && } + {isDiscoverInTimelineEnabled && ( + + {i18n.DISCOVER_ESQL_IN_TIMELINE_TAB} + + } + /> + + )} {timelineType === TimelineType.default && ( = ({ {i18n.SECURITY_ASSISTANT} )} - {isDiscoverInTimelineEnabled && ( - - {i18n.DISCOVER_IN_TIMELINE_TAB} - - )} )} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/translations.ts index e900af321c030..91bdd08d34af3 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/translations.ts @@ -46,10 +46,17 @@ export const SECURITY_ASSISTANT = i18n.translate( } ); -export const DISCOVER_IN_TIMELINE_TAB = i18n.translate( - 'xpack.securitySolution.timeline.tabs.discoverInTimeline', +export const DISCOVER_ESQL_IN_TIMELINE_TAB = i18n.translate( + 'xpack.securitySolution.timeline.tabs.discoverEsqlInTimeline', { - defaultMessage: 'Discover', + defaultMessage: 'ES|QL', + } +); + +export const DISCOVER_ESQL_IN_TIMELINE_TECHNICAL_PREVIEW = i18n.translate( + 'xpack.securitySolution.timeline.tabs.discoverEsqlInTimeline.technicalPreviewLabel', + { + defaultMessage: 'Technical Preview', } ); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts index 6ff904f13ebce..5c7e0f85dbc47 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts @@ -9,7 +9,6 @@ import { grantClipboardReadPerm } from '../../../../tasks/common/clipboard'; import { DISCOVER_CELL_ACTIONS, DISCOVER_CONTAINER, - DISCOVER_FILTER_BADGES, GET_DISCOVER_DATA_GRID_CELL, } from '../../../../screens/discover'; import { waitForDiscoverGridToLoad } from '../../../../tasks/discover'; @@ -28,7 +27,7 @@ describe.skip( `Discover Datagrid Cell Actions`, { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, - tags: ['@serverless', '@brokenInServerless'], + tags: ['@ess'], }, () => { beforeEach(() => { @@ -39,35 +38,6 @@ describe.skip( updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); waitForDiscoverGridToLoad(); }); - it('Filter for', () => { - cy.get(GET_DISCOVER_DATA_GRID_CELL(TIMESTAMP_COLUMN_NAME, 0)).then((sub) => { - const selectedTimestamp = sub.text(); - cy.get(GET_DISCOVER_DATA_GRID_CELL(TIMESTAMP_COLUMN_NAME, 0)).realHover(); - cy.get(DISCOVER_CELL_ACTIONS.FILTER_FOR).should('be.visible').trigger('click'); - - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_FILTER_BADGES) - .first() - .should( - 'have.text', - `${TIMESTAMP_COLUMN_NAME}: ${selectedTimestamp} to ${selectedTimestamp}` - ); - }); - }); - it('Filter out', { tags: ['@brokenInServerless'] }, () => { - cy.get(GET_DISCOVER_DATA_GRID_CELL(TIMESTAMP_COLUMN_NAME, 0)).then((sub) => { - const selectedTimestamp = sub.text(); - cy.get(GET_DISCOVER_DATA_GRID_CELL(TIMESTAMP_COLUMN_NAME, 0)).realHover(); - cy.get(DISCOVER_CELL_ACTIONS.FILTER_OUT).should('be.visible').trigger('click'); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_FILTER_BADGES) - .first() - .should( - 'have.text', - `NOT ${TIMESTAMP_COLUMN_NAME}: ${selectedTimestamp} to ${selectedTimestamp}` - ); - }); - }); // @TODO: copy is incredibly flaky although it is written same strategy as above tests // Need to see what is the reaosn for that. Trusting that above tests prove that `Copy` // will also work correctly. diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts index ad73a9b33524f..7d438791c3f1b 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts @@ -5,19 +5,15 @@ * 2.0. */ -import { fillAddFilterForm } from '../../../../tasks/search_bar'; import { - addDiscoverKqlQuery, + addDiscoverEsqlQuery, addFieldToTable, - openAddDiscoverFilterPopover, submitDiscoverSearchBar, - switchDataViewTo, + verifyDiscoverEsqlQuery, } from '../../../../tasks/discover'; import { navigateFromHeaderTo } from '../../../../tasks/security_header'; import { DISCOVER_CONTAINER, - DISCOVER_QUERY_INPUT, - DISCOVER_FILTER_BADGES, DISCOVER_DATA_VIEW_SWITCHER, GET_DISCOVER_DATA_GRID_CELL_HEADER, } from '../../../../screens/discover'; @@ -34,14 +30,14 @@ import { ALERTS, CSP_FINDINGS } from '../../../../screens/security_header'; const INITIAL_START_DATE = 'Jan 18, 2021 @ 20:33:29.186'; const INITIAL_END_DATE = 'Jan 19, 2024 @ 20:33:29.186'; +const DEFAULT_ESQL_QUERY = + 'from .alerts-security.alerts-default,apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-* | limit 10'; -// FLAKY: https://github.com/elastic/kibana/issues/165663 -// FLAKY: https://github.com/elastic/kibana/issues/165747 describe( 'Discover State', { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, - tags: ['@ess', '@serverless', '@brokenInServerless'], + tags: ['@ess'], }, () => { beforeEach(() => { @@ -51,36 +47,22 @@ describe( gotToDiscoverTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); }); - it('should remember kql query when navigating away and back to discover ', () => { - const kqlQuery = '_id:*'; - addDiscoverKqlQuery(kqlQuery); - submitDiscoverSearchBar(); - navigateFromHeaderTo(CSP_FINDINGS); - navigateFromHeaderTo(ALERTS); - openActiveTimeline(); - gotToDiscoverTab(); - cy.get(DISCOVER_QUERY_INPUT).should('have.text', kqlQuery); + it('should not allow the dataview to be changed', () => { + cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('not.exist'); }); - it('should remember filters when navigating away and back to discover ', () => { - openAddDiscoverFilterPopover(); - fillAddFilterForm({ - key: 'agent.type', - value: 'winlogbeat', - }); - navigateFromHeaderTo(CSP_FINDINGS); - navigateFromHeaderTo(ALERTS); - openActiveTimeline(); - gotToDiscoverTab(); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); + it('should have the default esql query on load', () => { + verifyDiscoverEsqlQuery(DEFAULT_ESQL_QUERY); }); - it.skip('should remember dataView when navigating away and back to discover ', () => { - const dataviewName = '.kibana-event-log'; - switchDataViewTo(dataviewName); + it('should remember esql query when navigating away and back to discover ', () => { + const esqlQuery = 'from auditbeat-* | limit 5'; + addDiscoverEsqlQuery(esqlQuery); + submitDiscoverSearchBar(); navigateFromHeaderTo(CSP_FINDINGS); navigateFromHeaderTo(ALERTS); openActiveTimeline(); gotToDiscoverTab(); - cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('contain.text', dataviewName); + + verifyDiscoverEsqlQuery(esqlQuery); }); it('should remember columns when navigating away and back to discover ', () => { addFieldToTable('host.name'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts index 9f8612551c51c..6e1289f9f8450 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts @@ -13,13 +13,10 @@ import { navigateFromKibanaCollapsibleTo, openKibanaNavigation, } from '../../../../tasks/kibana_navigation'; -import { fillAddFilterForm } from '../../../../tasks/search_bar'; import { - addDiscoverKqlQuery, + addDiscoverEsqlQuery, addFieldToTable, - openAddDiscoverFilterPopover, - switchDataViewTo, - switchDataViewToESQL, + verifyDiscoverEsqlQuery, } from '../../../../tasks/discover'; import { GET_LOCAL_DATE_PICKER_START_DATE_POPOVER_BUTTON, @@ -29,8 +26,6 @@ import { ALERTS_URL } from '../../../../urls/navigation'; import { DISCOVER_CONTAINER, DISCOVER_DATA_VIEW_SWITCHER, - DISCOVER_FILTER_BADGES, - DISCOVER_QUERY_INPUT, GET_DISCOVER_DATA_GRID_CELL_HEADER, } from '../../../../screens/discover'; import { updateDateRangeInLocalDatePickers } from '../../../../tasks/date_picker'; @@ -63,6 +58,7 @@ const TIMELINE_PATCH_REQ = 'TIMELINE_PATCH_REQ'; const TIMELINE_RESPONSE_SAVED_OBJECT_ID_PATH = 'response.body.data.persistTimeline.timeline.savedObjectId'; +const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; describe( 'Discover Timeline State Integration', @@ -126,19 +122,11 @@ describe( ); }); it('should save/restore discover dataview/timerange/filter/query/columns when saving/resoring timeline', () => { - const dataviewName = '.kibana-event-log'; const timelineSuffix = Date.now(); const timelineName = `DataView timeline-${timelineSuffix}`; - const kqlQuery = '_id:*'; const column1 = 'event.category'; const column2 = 'ecs.version'; - switchDataViewTo(dataviewName); - addDiscoverKqlQuery(kqlQuery); - openAddDiscoverFilterPopover(); - fillAddFilterForm({ - key: 'ecs.version', - value: '1.8.0', - }); + addDiscoverEsqlQuery(esqlQuery); addFieldToTable(column1); addFieldToTable(column2); @@ -155,10 +143,7 @@ describe( openTimelineById(timelineId); cy.get(LOADING_INDICATOR).should('not.exist'); gotToDiscoverTab(); - cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('contain.text', dataviewName); - cy.get(DISCOVER_QUERY_INPUT).should('have.text', kqlQuery); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_FILTER_BADGES).should('contain.text', 'ecs.version: 1.8.0'); + verifyDiscoverEsqlQuery(esqlQuery); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column1)).should('exist'); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column2)).should('exist'); cy.get(GET_LOCAL_DATE_PICKER_START_DATE_POPOVER_BUTTON(DISCOVER_CONTAINER)).should( @@ -168,19 +153,11 @@ describe( }); }); it('should save/restore discover dataview/timerange/filter/query/columns when timeline is opened via url', () => { - const dataviewName = '.kibana-event-log'; const timelineSuffix = Date.now(); const timelineName = `DataView timeline-${timelineSuffix}`; - const kqlQuery = '_id:*'; const column1 = 'event.category'; const column2 = 'ecs.version'; - switchDataViewTo(dataviewName); - addDiscoverKqlQuery(kqlQuery); - openAddDiscoverFilterPopover(); - fillAddFilterForm({ - key: 'ecs.version', - value: '1.8.0', - }); + addDiscoverEsqlQuery(esqlQuery); addFieldToTable(column1); addFieldToTable(column2); @@ -192,10 +169,7 @@ describe( cy.wait(`@${TIMELINE_REQ_WITH_SAVED_SEARCH}`); // reload the page with the exact url cy.reload(); - cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('contain.text', dataviewName); - cy.get(DISCOVER_QUERY_INPUT).should('have.text', kqlQuery); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_FILTER_BADGES).should('contain.text', 'ecs.version: 1.8.0'); + verifyDiscoverEsqlQuery(esqlQuery); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column1)).should('exist'); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column2)).should('exist'); cy.get(GET_LOCAL_DATE_PICKER_START_DATE_POPOVER_BUTTON(DISCOVER_CONTAINER)).should( @@ -207,7 +181,6 @@ describe( it('should save/restore discover ES|QL when saving timeline', () => { const timelineSuffix = Date.now(); const timelineName = `ES|QL timeline-${timelineSuffix}`; - switchDataViewToESQL(); addNameToTimeline(timelineName); cy.wait(`@${TIMELINE_PATCH_REQ}`) .its(TIMELINE_RESPONSE_SAVED_OBJECT_ID_PATH) @@ -220,7 +193,7 @@ describe( openTimelineById(timelineId); cy.get(LOADING_INDICATOR).should('not.exist'); gotToDiscoverTab(); - cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('contain.text', 'ES|QL'); + cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('not.exist'); }); }); }); @@ -235,8 +208,7 @@ describe( it('should save discover saved search with `Security Solution` tag', () => { const timelineSuffix = Date.now(); const timelineName = `SavedObject timeline-${timelineSuffix}`; - const kqlQuery = '_id: *'; - addDiscoverKqlQuery(kqlQuery); + addDiscoverEsqlQuery(esqlQuery); addNameToTimeline(timelineName); cy.wait(`@${TIMELINE_REQ_WITH_SAVED_SEARCH}`); openKibanaNavigation(); @@ -257,8 +229,7 @@ describe( it('should rename the saved search on timeline rename', () => { const timelineSuffix = Date.now(); const timelineName = `Rename timeline-${timelineSuffix}`; - const kqlQuery = '_id: *'; - addDiscoverKqlQuery(kqlQuery); + addDiscoverEsqlQuery(esqlQuery); addNameToTimeline(timelineName); cy.wait(`@${TIMELINE_PATCH_REQ}`) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts index c48fa80baad46..42375aeee5e2e 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts @@ -6,7 +6,6 @@ */ import { GET_LOCAL_DATE_PICKER_START_DATE_POPOVER_BUTTON } from '../../../../screens/date_picker'; -import { fillAddFilterForm, fillAddFilterFormAsQueryDSL } from '../../../../tasks/search_bar'; import { setStartDate, updateDateRangeInLocalDatePickers, @@ -14,20 +13,15 @@ import { } from '../../../../tasks/date_picker'; import { DISCOVER_CONTAINER, - DISCOVER_NO_RESULTS, DISCOVER_RESULT_HITS, - DISCOVER_FILTER_BADGES, - DISCOVER_QUERY_INPUT, GET_DISCOVER_DATA_GRID_CELL_HEADER, - DISCOVER_DATA_VIEW_SWITCHER, + DISCOVER_ESQL_INPUT_TEXT_CONTAINER, } from '../../../../screens/discover'; import { - addDiscoverKqlQuery, - switchDataViewTo, + addDiscoverEsqlQuery, submitDiscoverSearchBar, - openAddDiscoverFilterPopover, addFieldToTable, - createAdHocDataView, + convertNBSPToSP, } from '../../../../tasks/discover'; import { createNewTimeline, gotToDiscoverTab } from '../../../../tasks/timeline'; import { login } from '../../../../tasks/login'; @@ -37,13 +31,14 @@ import { ALERTS_URL } from '../../../../urls/navigation'; const INITIAL_START_DATE = 'Jan 18, 2021 @ 20:33:29.186'; const INITIAL_END_DATE = 'Jan 19, 2024 @ 20:33:29.186'; const NEW_START_DATE = 'Jan 18, 2023 @ 20:33:29.186'; +const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; // Failing: See https://github.com/elastic/kibana/issues/167186 -describe.skip( +describe( 'Basic discover search and filter operations', { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, - tags: ['@ess', '@serverless'], + tags: ['@ess'], }, () => { beforeEach(() => { @@ -53,76 +48,34 @@ describe.skip( gotToDiscoverTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); }); - it('should change data when dataView is changed', () => { - switchDataViewTo('.kibana-event-log'); - cy.get(DISCOVER_RESULT_HITS).should('have.text', '1'); - }); - it('should show data according to kql query', () => { - const kqlQuery = '_id:"invalid"'; - addDiscoverKqlQuery(kqlQuery); + it('should show data according to esql query', () => { + addDiscoverEsqlQuery(`${esqlQuery} | limit 1`); submitDiscoverSearchBar(); - cy.get(DISCOVER_NO_RESULTS).should('be.visible'); - }); - it('should show correct data according to filter applied', () => { - openAddDiscoverFilterPopover(); - fillAddFilterForm({ - key: 'agent.type', - value: 'winlogbeat', - }); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_RESULT_HITS).should('have.text', '1'); - }); - it('should show correct data according to query DSL', () => { - const query = { - bool: { - filter: [ - { - term: { - 'agent.type': 'winlogbeat', - }, - }, - ], - }, - }; - openAddDiscoverFilterPopover(); - fillAddFilterFormAsQueryDSL(JSON.stringify(query)); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.get(DISCOVER_RESULT_HITS).should('have.text', '1'); + cy.get(DISCOVER_RESULT_HITS).should('have.text', 1); }); - - it('should be able to create ad-hoc dataview without saving', () => { - const adHocDVName = 'adHocDataView'; - const indexPattern = 'audit'; - createAdHocDataView(adHocDVName, indexPattern); - cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('contain.text', adHocDVName); - }); - it('should be able to add fields to the table', () => { addFieldToTable('host.name'); - cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER('host.name')).should('be.visible'); addFieldToTable('user.name'); + cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER('host.name')).should('be.visible'); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER('user.name')).should('be.visible'); }); context('navigation', () => { - it('should remove the filter when back is pressed after adding a filter', () => { - openAddDiscoverFilterPopover(); - fillAddFilterForm({ - key: 'agent.type', - value: 'winlogbeat', - }); - cy.get(DISCOVER_FILTER_BADGES).should('have.length', 1); - cy.go('back'); - cy.get(DISCOVER_FILTER_BADGES).should('not.exist'); - }); it('should removed the query when back is pressed after adding a query', () => { - const kqlQuery = '_id:"invalid"'; - addDiscoverKqlQuery(kqlQuery); + addDiscoverEsqlQuery(esqlQuery); submitDiscoverSearchBar(); - cy.get(DISCOVER_QUERY_INPUT).should('have.text', kqlQuery); + cy.get(DISCOVER_ESQL_INPUT_TEXT_CONTAINER).then((subj) => { + const currentQuery = subj.text(); + const sanitizedQuery = convertNBSPToSP(currentQuery); + expect(sanitizedQuery).to.eq(esqlQuery); + }); cy.go('back'); - cy.get(DISCOVER_QUERY_INPUT).should('not.have.text', kqlQuery); + cy.get(DISCOVER_ESQL_INPUT_TEXT_CONTAINER).then((subj) => { + const currentQuery = subj.text(); + const sanitizedQuery = convertNBSPToSP(currentQuery); + expect(sanitizedQuery).to.not.eq(esqlQuery); + }); }); it(`should changed the timerange to ${INITIAL_START_DATE} when back is pressed after modifying timerange from ${INITIAL_START_DATE} to ${NEW_START_DATE} `, () => { diff --git a/x-pack/test/security_solution_cypress/cypress/screens/discover.ts b/x-pack/test/security_solution_cypress/cypress/screens/discover.ts index a728c1f4c82bd..bc3d418b73bb8 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/discover.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/discover.ts @@ -26,10 +26,14 @@ export const DISCOVER_DATA_VIEW_EDITOR_FLYOUT = { SAVE_DATA_VIEW_BTN: getDataTestSubjectSelector('saveIndexPatternButton'), }; -export const DISCOVER_QUERY_INPUT = `${DISCOVER_CONTAINER} ${getDataTestSubjectSelector( - 'unifiedQueryInput' +export const DISCOVER_ESQL_INPUT = `${DISCOVER_CONTAINER} ${getDataTestSubjectSelector( + 'kibanaCodeEditor' )}`; +export const DISCOVER_ESQL_INPUT_TEXT_CONTAINER = `${DISCOVER_ESQL_INPUT} .view-lines`; + +export const DISCOVER_ESQL_EDITABLE_INPUT = `${DISCOVER_ESQL_INPUT} textarea:first`; + export const DISCOVER_ADD_FILTER = `${DISCOVER_CONTAINER} ${getDataTestSubjectSelector( 'addFilter' )}`; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts index fee36ce79faff..1bbdc9eac1539 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts @@ -162,7 +162,7 @@ export const setEnrichmentDates = (from?: string, to?: string) => { cy.get(ENRICHMENT_QUERY_END_INPUT).type(`{selectall}${to}{enter}`); } }); - cy.get(UPDATE_ENRICHMENT_RANGE_BUTTON).click(); + cy.get(UPDATE_ENRICHMENT_RANGE_BUTTON).click({ force: true }); }; export const refreshAlertPageFilter = () => { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts b/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts index 90623f239c326..e5d835bbe8c53 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts @@ -10,11 +10,12 @@ import { DISCOVER_CONTAINER, DISCOVER_DATA_GRID_UPDATING, DISCOVER_DATA_VIEW_SWITCHER, - DISCOVER_QUERY_INPUT, + DISCOVER_ESQL_INPUT, GET_DISCOVER_COLUMN_TOGGLE_BTN, DISCOVER_FIELD_SEARCH, DISCOVER_DATA_VIEW_EDITOR_FLYOUT, DISCOVER_FIELD_LIST_LOADING, + DISCOVER_ESQL_EDITABLE_INPUT, } from '../screens/discover'; import { GET_LOCAL_SEARCH_BAR_SUBMIT_BUTTON } from '../screens/search_bar'; @@ -43,8 +44,35 @@ export const waitForDiscoverGridToLoad = () => { cy.get(DISCOVER_FIELD_LIST_LOADING).should('not.exist'); }; -export const addDiscoverKqlQuery = (kqlQuery: string) => { - cy.get(DISCOVER_QUERY_INPUT).type(`${kqlQuery}{enter}`); +export const selectCurrentDiscoverEsqlQuery = (discoverEsqlInput = DISCOVER_ESQL_INPUT) => { + cy.get(discoverEsqlInput).click(); + cy.get(discoverEsqlInput).focused(); + cy.get(discoverEsqlInput).type(Cypress.platform === 'darwin' ? '{cmd+a}' : '{ctrl+a}'); +}; + +export const addDiscoverEsqlQuery = (esqlQuery: string) => { + // ESQL input uses the monaco editor which doesn't allow for traditional input updates + selectCurrentDiscoverEsqlQuery(DISCOVER_ESQL_EDITABLE_INPUT); + cy.get(DISCOVER_ESQL_EDITABLE_INPUT).clear(); + cy.get(DISCOVER_ESQL_EDITABLE_INPUT).type(`${esqlQuery}`); + cy.get(DISCOVER_ESQL_EDITABLE_INPUT).blur(); + cy.get(GET_LOCAL_SEARCH_BAR_SUBMIT_BUTTON(DISCOVER_CONTAINER)).realClick(); +}; + +export const convertNBSPToSP = (str: string) => { + return str.replaceAll(String.fromCharCode(160), ' '); +}; + +export const verifyDiscoverEsqlQuery = (esqlQueryToVerify: string) => { + // We select the query first as multi-line queries do not render fully unless all the text is selected + selectCurrentDiscoverEsqlQuery(); + /** + * When selected all visual spaces actually render the middot character, so we replace the spaces with the middot + * If testing without selecting first you can replace with a Non-breaking space character + * https://github.com/cypress-io/cypress/issues/15863#issuecomment-816746693 + */ + const unicodeReplacedQuery = esqlQueryToVerify.replaceAll(' ', '\u00b7'); + cy.get(DISCOVER_ESQL_INPUT).should('include.text', unicodeReplacedQuery); }; export const submitDiscoverSearchBar = () => { @@ -69,6 +97,7 @@ export const clearFieldSearch = () => { export const addFieldToTable = (fieldId: string) => { searchForField(fieldId); + cy.get(GET_DISCOVER_COLUMN_TOGGLE_BTN(fieldId)).first().should('exist'); cy.get(GET_DISCOVER_COLUMN_TOGGLE_BTN(fieldId)).first().trigger('click'); clearFieldSearch(); }; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts index 6c985c6d93cc1..a0e81d1f244f7 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts @@ -102,7 +102,7 @@ export const addDescriptionToTimeline = ( if (!modalAlreadyOpen) { cy.get(TIMELINE_EDIT_MODAL_OPEN_BUTTON).first().click(); } - cy.get(TIMELINE_DESCRIPTION_INPUT).type(description); + cy.get(TIMELINE_DESCRIPTION_INPUT).should('not.be.disabled').type(description); cy.get(TIMELINE_DESCRIPTION_INPUT).invoke('val').should('equal', description); cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); @@ -112,7 +112,7 @@ export const addNameToTimeline = (name: string, modalAlreadyOpen: boolean = fals if (!modalAlreadyOpen) { cy.get(TIMELINE_EDIT_MODAL_OPEN_BUTTON).first().click(); } - cy.get(TIMELINE_TITLE_INPUT).type(`${name}{enter}`); + cy.get(TIMELINE_TITLE_INPUT).should('not.be.disabled').type(`${name}{enter}`); cy.get(TIMELINE_TITLE_INPUT).should('have.attr', 'value', name); cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); @@ -315,7 +315,7 @@ export const createNewTimeline = () => { cy.get(TIMELINE_SETTINGS_ICON).should('be.visible'); // eslint-disable-next-line cypress/no-unnecessary-waiting cy.wait(300); - cy.get(CREATE_NEW_TIMELINE).eq(0).click(); + cy.get(CREATE_NEW_TIMELINE).eq(0).should('be.visible').click(); }; export const openCreateTimelineOptionsPopover = () => { From 8c82dfbf221f938cb6c3897614cbf54954b52971 Mon Sep 17 00:00:00 2001 From: Carlos Delgado <6339205+carlosdelest@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:06:49 +0200 Subject: [PATCH 043/170] [Enterprise Search] Bugfix - Updating search applications removed custom template (#167532) --- .../common/types/search_applications.ts | 3 +- ...pdate_search_application_api_logic.test.ts | 27 ++++++++- .../update_search_application_api_logic.ts | 11 +++- .../search_application_indices_logic.test.ts | 10 +++- .../search_application_indices_logic.ts | 2 + ...h_application_indices_flyout_logic.test.ts | 1 + .../search_applications.test.ts | 59 +++++++++++++++++++ .../enterprise_search/search_applications.ts | 27 ++++++++- 8 files changed, 133 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/enterprise_search/common/types/search_applications.ts b/x-pack/plugins/enterprise_search/common/types/search_applications.ts index 045a8bcdf5f95..1768eeecd9aee 100644 --- a/x-pack/plugins/enterprise_search/common/types/search_applications.ts +++ b/x-pack/plugins/enterprise_search/common/types/search_applications.ts @@ -25,7 +25,8 @@ export interface EnterpriseSearchApplicationDetails { template: { script: { lang: string; - params: unknown; + options: object; + params: object; source: string; }; }; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.test.ts index 8a263e4e1a630..6421bd1f0df18 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.test.ts @@ -18,7 +18,23 @@ describe('UpdateSearchApplicationApiLogic', () => { }); describe('updateSearchApplication', () => { it('calls correct api', async () => { - const searchApplication = { name: 'my-search-application', indices: ['an-index'] }; + const searchApplication = { + name: 'my-search-application', + indices: ['an-index'], + template: { + script: { + source: '"query":{"term":{"{{field_name}}":["{{field_value}}"', + lang: 'mustache', + options: { + content_type: 'application/json;charset=utf-8', + }, + params: { + field_name: 'hello', + field_value: 'world', + }, + }, + }, + }; const response = { result: 'updated' }; const promise = Promise.resolve(response); http.put.mockReturnValue(promise); @@ -27,7 +43,14 @@ describe('UpdateSearchApplicationApiLogic', () => { expect(http.put).toHaveBeenCalledWith( '/internal/enterprise_search/search_applications/my-search-application', { - body: '{"indices":["an-index"],"name":"my-search-application"}', + body: + '{"indices":["an-index"],' + + '"name":"my-search-application",' + + '"template":{' + + '"script":{"source":"\\"query\\":{\\"term\\":{\\"{{field_name}}\\":[\\"{{field_value}}\\"",' + + '"lang":"mustache",' + + '"options":{"content_type":"application/json;charset=utf-8"},' + + '"params":{"field_name":"hello","field_value":"world"}}}}', } ); await expect(result).resolves.toEqual(response); diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.ts index cea5b0b5c9e88..8cd1afca438c6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/api/search_applications/update_search_application_api_logic.ts @@ -12,6 +12,14 @@ import { HttpLogic } from '../../../shared/http'; export interface UpdateSearchApplicationApiParams { indices: string[]; name: string; + template: { + script: { + lang: string; + options: object; + params: object; + source: string; + }; + }; } export type UpdateSearchApplicationApiResponse = EnterpriseSearchApplication; @@ -24,11 +32,12 @@ export type UpdateSearchApplicationApiLogicActions = Actions< export const updateSearchApplication = async ({ name, indices, + template, }: UpdateSearchApplicationApiParams): Promise => { const route = `/internal/enterprise_search/search_applications/${name}`; return await HttpLogic.values.http.put(route, { - body: JSON.stringify({ indices, name }), + body: JSON.stringify({ indices, name, template }), }); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.test.ts index f5676faa47769..a116f76cf8e59 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.test.ts @@ -38,9 +38,13 @@ const mockSearchApplicationData: EnterpriseSearchApplicationDetails = { name: DEFAULT_VALUES.searchApplicationName, template: { script: { + source: '"query":{"term":{"{{field_name}}":["{{field_value}}"', lang: 'mustache', - params: { query_string: '*' }, - source: '', + options: { content_type: 'application/json;charset=utf-8' }, + params: { + field_name: 'hello', + field_value: 'world', + }, }, }, updated_at_millis: 1679501369566, @@ -114,6 +118,7 @@ describe('SearchApplicationViewLogic', () => { ).toHaveBeenCalledWith({ name: DEFAULT_VALUES.searchApplicationName, indices: ['search-002'], + template: mockSearchApplicationData.template, }); }); }); @@ -131,6 +136,7 @@ describe('SearchApplicationViewLogic', () => { ).toHaveBeenCalledWith({ name: DEFAULT_VALUES.searchApplicationName, indices: ['search-001', 'search-002', 'search-003'], + template: mockSearchApplicationData.template, }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.ts b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.ts index bd994eff66b8c..a12895f955cee 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/search_application_indices_logic.ts @@ -64,6 +64,7 @@ export const SearchApplicationIndicesLogic = kea< actions.updateSearchApplicationRequest({ name: values.searchApplicationName, indices: updatedIndices, + template: values.searchApplicationData.template, }); }, searchApplicationUpdated: () => { @@ -77,6 +78,7 @@ export const SearchApplicationIndicesLogic = kea< actions.updateSearchApplicationRequest({ name: values.searchApplicationName, indices: updatedIndices, + template: values.searchApplicationData.template, }); }, }), diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_applications/search_application_indices_flyout_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_applications/search_application_indices_flyout_logic.test.ts index b41a3050bbc0c..2f13794fa7474 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_applications/search_application_indices_flyout_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_applications/search_application_indices_flyout_logic.test.ts @@ -44,6 +44,7 @@ const mockSearchApplicationData: EnterpriseSearchApplicationDetails = { script: { lang: 'mustache', params: { query_string: '*' }, + options: { content_type: 'application/json;charset=utf-8' }, source: '', }, }, diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts index 37c6590e42166..eba77ee779973 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.test.ts @@ -217,6 +217,65 @@ describe('engines routes', () => { }, }); }); + + it('PUT - Upsert API request - create with template', async () => { + mockClient.asCurrentUser.searchApplication.put.mockImplementation(() => ({ + acknowledged: true, + })); + + await mockRouter.callRoute({ + body: { + indices: ['test-indices-1'], + template: { + script: { + source: '"query":{"term":{"{{field_name}}":["{{field_value}}"', + lang: 'mustache', + options: { + content_type: 'application/json;charset=utf-8', + }, + params: { + field_name: 'hello', + field_value: 'world', + }, + }, + }, + }, + params: { + engine_name: 'engine-name', + }, + query: { create: true }, + }); + expect(mockClient.asCurrentUser.searchApplication.put).toHaveBeenCalledWith({ + create: true, + name: 'engine-name', + search_application: { + indices: ['test-indices-1'], + name: 'engine-name', + template: { + script: { + source: '"query":{"term":{"{{field_name}}":["{{field_value}}"', + lang: 'mustache', + options: { + content_type: 'application/json;charset=utf-8', + }, + params: { + field_name: 'hello', + field_value: 'world', + }, + }, + }, + updated_at_millis: expect.any(Number), + }, + }); + const mock = jest.fn(); + const mockResponse = mock({ result: 'created' }); + expect(mockRouter.response.ok).toHaveReturnedWith(mockResponse); + expect(mockRouter.response.ok).toHaveBeenCalledWith({ + body: { + acknowledged: true, + }, + }); + }); it('returns 400, create search application with invalid characters', async () => { (mockClient.asCurrentUser.searchApplication.put as jest.Mock).mockRejectedValueOnce({ meta: { diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts index 2004857b8c35a..1cf2ce06c2f5f 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/search_applications.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { SearchResponse, AcknowledgedResponseBase } from '@elastic/elasticsearch/lib/api/types'; +import { AcknowledgedResponseBase, SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; @@ -103,6 +103,16 @@ export function registerSearchApplicationsRoutes({ log, router }: RouteDependenc body: schema.object({ indices: schema.arrayOf(schema.string()), name: schema.maybe(schema.string()), + template: schema.maybe( + schema.object({ + script: schema.object({ + source: schema.oneOf([schema.string(), schema.object({}, { unknowns: 'allow' })]), + lang: schema.string(), + params: schema.maybe(schema.object({}, { unknowns: 'allow' })), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }), + }) + ), }), params: schema.object({ engine_name: schema.string(), @@ -115,12 +125,27 @@ export function registerSearchApplicationsRoutes({ log, router }: RouteDependenc elasticsearchErrorHandler(log, async (context, request, response) => { const { client } = (await context.core).elasticsearch; try { + const script = request.body.template?.script; const engine = (await client.asCurrentUser.searchApplication.put({ ...request.query, name: request.params.engine_name, search_application: { indices: request.body.indices, name: request.params.engine_name, + template: + script == null + ? undefined + : { + script: { + source: + typeof script.source === 'string' + ? script.source + : JSON.stringify(script.source), + lang: script.lang, + params: script.params, + options: script.options, + }, + }, updated_at_millis: Date.now(), }, })) as EnterpriseSearchApplicationUpsertResponse; From cd50e1d87b8f95d4c787d301d6aa0f0e3f5302a8 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 4 Oct 2023 03:11:40 -0400 Subject: [PATCH 044/170] skip failing test suite (#167945) --- .../tests/alerting/group4/alerts_as_data/alerts_as_data.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts index d600636010233..2aed9770c56b3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts @@ -62,7 +62,8 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F 'kibana.alert.rule.execution.uuid', ]; - describe('alerts as data', () => { + // Failing: See https://github.com/elastic/kibana/issues/167945 + describe.skip('alerts as data', () => { afterEach(() => objectRemover.removeAll()); after(async () => { await es.deleteByQuery({ index: alertsAsDataIndex, query: { match_all: {} } }); From 4cb19184f70ddd41862e80f3bf55cd6e154b6dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 4 Oct 2023 10:32:08 +0200 Subject: [PATCH 045/170] [Serveless tests] Fix /telemetry/config in local runs (#167898) --- src/plugins/telemetry/server/routes/telemetry_config.ts | 3 ++- .../test_suites/observability/telemetry/telemetry_config.ts | 4 ++-- .../test_suites/security/telemetry/telemetry_config.ts | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/telemetry/server/routes/telemetry_config.ts b/src/plugins/telemetry/server/routes/telemetry_config.ts index d62566bdc3563..7c056b0cfd519 100644 --- a/src/plugins/telemetry/server/routes/telemetry_config.ts +++ b/src/plugins/telemetry/server/routes/telemetry_config.ts @@ -85,7 +85,8 @@ export function registerTelemetryConfigRoutes({ optIn: schema.oneOf([schema.boolean(), schema.literal(null)]), sendUsageFrom: schema.oneOf([schema.literal('server'), schema.literal('browser')]), telemetryNotifyUserAboutOptInDefault: schema.boolean(), - labels: labelsSchema, + // Declare the `serverless` label as optional in both offerings while we fix https://github.com/elastic/kibana/issues/167862 + labels: labelsSchema.extends({ serverless: schema.maybe(schema.string()) }), }), }, }, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts index 6ef34b9a0966c..d803cf06b4c52 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts @@ -25,7 +25,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) it('GET should get the default config', async () => { await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, baseConfig); }); @@ -39,7 +39,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, { ...baseConfig, labels: { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts index 5df1da84a8dbf..2be964bc579ba 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts @@ -25,7 +25,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) it('GET should get the default config', async () => { await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, baseConfig); }); @@ -39,7 +39,7 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) await supertest .get('/api/telemetry/v2/config') - .set(svlCommonApi.getInternalRequestHeader()) + .set(svlCommonApi.getCommonRequestHeader()) .expect(200, { ...baseConfig, labels: { From 50b7e09634978a7696ece4a99fd3bb435e5f12a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 4 Oct 2023 10:33:18 +0200 Subject: [PATCH 046/170] Merge `semver@7` dependencies in yarn lock (#167886) --- yarn.lock | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 67674a57416ef..800c37edf20c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27223,14 +27223,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== From 3ea2f2370857d7cb99a716d4f22bc2163b6df01e Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Wed, 4 Oct 2023 01:37:41 -0700 Subject: [PATCH 047/170] [Security Solution] Unskip Serverless Threshold rule creation Cypress test (#167083) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Addresses:** https://github.com/elastic/kibana/issues/161539 ## Summary This PR unskips Threshold rule creation Cypress tests. ## Details To unskip the test with minimal changes it required to refactor navigation via breadcrumbs and update rules table breadcrumb selectors to make navigation back to the rules table work seamlessly between ESS and Serverless. ## Flaky Test runner Serverless [threshold_rule.cy.ts 150 runs](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3213) 🟢 --- .../rule_actions/rule_actions.cy.ts | 3 ++- .../rule_creation/common_flows.cy.ts | 5 +++-- .../rule_creation/custom_query_rule.cy.ts | 4 ++-- .../custom_query_rule_data_view.cy.ts | 3 +++ .../rule_creation/custom_saved_query_rule.cy.ts | 3 ++- .../rule_creation/esql_rule_create.cy.ts | 6 +++--- .../rule_creation/event_correlation_rule.cy.ts | 4 +++- .../rule_creation/indicator_match_rule.cy.ts | 3 ++- .../rule_creation/machine_learning_rule.cy.ts | 3 ++- .../rule_creation/new_terms_rule.cy.ts | 3 ++- .../rule_creation/override.cy.ts | 3 ++- .../rule_creation/threshold_rule.cy.ts | 6 +++--- .../cypress/screens/breadcrumbs.ts | 11 +++++++++++ .../cypress/screens/rule_details.ts | 3 --- .../cypress/tasks/create_new_rule.ts | 17 ++--------------- .../cypress/tasks/prebuilt_rules.ts | 4 ++-- .../cypress/tasks/rule_details.ts | 4 ++-- .../cypress/tasks/rules_management.ts | 7 +++++++ 18 files changed, 53 insertions(+), 39 deletions(-) create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/breadcrumbs.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions.cy.ts index dba23548e5d20..7916458c29ba0 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions.cy.ts @@ -25,7 +25,7 @@ import { } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; - +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; import { CREATE_RULE_URL } from '../../../urls/navigation'; // TODO: https://github.com/elastic/kibana/issues/161539 @@ -60,6 +60,7 @@ describe( fillScheduleRuleAndContinue(rule); fillRuleAction(actions); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); goToRuleDetailsOf(rule.name); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/common_flows.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/common_flows.cy.ts index aa9ef9cd975bd..dffb50ab6dae6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/common_flows.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/common_flows.cy.ts @@ -21,7 +21,7 @@ import { RULE_NAME_HEADER } from '../../../screens/rule_details'; import { createTimeline } from '../../../tasks/api_calls/timelines'; import { deleteAlertsAndRules } from '../../../tasks/common'; import { - createAndEnableRuleOnly, + createAndEnableRule, expandAdvancedSettings, fillCustomInvestigationFields, fillDescription, @@ -93,8 +93,9 @@ describe('Common rule creation flows', { tags: ['@ess', '@serverless'] }, () => cy.get(ABOUT_CONTINUE_BTN).should('exist').click(); cy.get(SCHEDULE_CONTINUE_BUTTON).click(); - createAndEnableRuleOnly(); + createAndEnableRule(); + // UI redirects to rule creation page of a created rule cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule.cy.ts index 07f0b8535d835..e4bb4b2bfba83 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule.cy.ts @@ -10,10 +10,10 @@ import { RULE_NAME_HEADER } from '../../../screens/rule_details'; import { deleteAlertsAndRules } from '../../../tasks/common'; import { - createAndEnableRuleOnly, fillScheduleRuleAndContinue, fillAboutRuleMinimumAndContinue, fillDefineCustomRuleAndContinue, + createRuleWithoutEnabling, } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; @@ -37,7 +37,7 @@ describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => { fillDefineCustomRuleAndContinue(rule); fillAboutRuleMinimumAndContinue(rule); fillScheduleRuleAndContinue(rule); - createAndEnableRuleOnly(); + createRuleWithoutEnabling(); cy.log('Asserting we have a new rule created'); cy.get(RULE_NAME_HEADER).should('contain', rule.name); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule_data_view.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule_data_view.cy.ts index 5c23d4dab1b3a..32eb50ef25d53 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule_data_view.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_query_rule_data_view.cy.ts @@ -64,6 +64,7 @@ import { import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; import { getDetails, waitForTheRuleToBeExecuted } from '../../../tasks/rule_details'; import { CREATE_RULE_URL } from '../../../urls/navigation'; @@ -97,6 +98,7 @@ describe('Custom query rules', { tags: ['@ess', '@serverless', '@brokenInServerl fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); @@ -161,6 +163,7 @@ describe('Custom query rules', { tags: ['@ess', '@serverless', '@brokenInServerl fillScheduleRuleAndContinue(rule); createRuleWithoutEnabling(); + openRuleManagementPageViaBreadcrumbs(); goToRuleDetailsOf(rule.name); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_saved_query_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_saved_query_rule.cy.ts index a2abf05ecab40..c0498bdfcbcb1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_saved_query_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/custom_saved_query_rule.cy.ts @@ -43,9 +43,9 @@ import { visitRuleDetailsPage, } from '../../../tasks/rule_details'; import { createRule } from '../../../tasks/api_calls/rules'; - import { CREATE_RULE_URL } from '../../../urls/navigation'; import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; const savedQueryName = 'custom saved query'; const savedQueryQuery = 'process.name: test'; @@ -87,6 +87,7 @@ describe('Saved query rules', { tags: ['@ess', '@serverless', '@brokenInServerle fillScheduleRuleAndContinue(rule); cy.intercept('POST', '/api/detection_engine/rules').as('savedQueryRule'); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.wait('@savedQueryRule').then(({ response }) => { // created rule should have saved_query type diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts index 857043cd0a84d..386b6c919a5e6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts @@ -31,8 +31,8 @@ import { selectEsqlRuleType, getDefineContinueButton, fillEsqlQueryBar, - pressRuleCreateBtn, fillAboutSpecificEsqlRuleAndContinue, + createRuleWithoutEnabling, } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; @@ -68,7 +68,7 @@ describe.skip('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { fillDefineEsqlRuleAndContinue(rule); fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); - pressRuleCreateBtn(); + createRuleWithoutEnabling(); // ensures after rule save ES|QL rule is displayed cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); @@ -91,7 +91,7 @@ describe.skip('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { fillDefineEsqlRuleAndContinue(rule); fillAboutSpecificEsqlRuleAndContinue({ ...rule, rule_name_override: 'test_id' }); fillScheduleRuleAndContinue(rule); - pressRuleCreateBtn(); + createRuleWithoutEnabling(); // ensure rule name override is displayed on details page getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', 'test_id'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts index 1984ef5a5eda4..d169d44f19761 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/event_correlation_rule.cy.ts @@ -54,7 +54,7 @@ import { } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; - +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; import { CREATE_RULE_URL } from '../../../urls/navigation'; // TODO: https://github.com/elastic/kibana/issues/161539 @@ -85,6 +85,7 @@ describe('EQL rules', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); @@ -162,6 +163,7 @@ describe('EQL rules', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); goToRuleDetailsOf(rule.name); waitForTheRuleToBeExecuted(); waitForAlertsToPopulate(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts index 8d581d69edb95..0d1466a755185 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts @@ -109,9 +109,9 @@ import { waitForTheRuleToBeExecuted, visitRuleDetailsPage, } from '../../../tasks/rule_details'; - import { CREATE_RULE_URL } from '../../../urls/navigation'; import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; const DEFAULT_THREAT_MATCH_QUERY = '@timestamp >= "now-30d/d"'; @@ -435,6 +435,7 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@brokenInServerless fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/machine_learning_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/machine_learning_rule.cy.ts index 38f977f6c309f..7e73310433df1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/machine_learning_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/machine_learning_rule.cy.ts @@ -51,7 +51,7 @@ import { } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; - +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; import { CREATE_RULE_URL } from '../../../urls/navigation'; // TODO: https://github.com/elastic/kibana/issues/161539 @@ -78,6 +78,7 @@ describe('Machine Learning rules', { tags: ['@ess', '@serverless', '@brokenInSer fillAboutRuleAndContinue(mlRule); fillScheduleRuleAndContinue(mlRule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/new_terms_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/new_terms_rule.cy.ts index 91a815823ad41..53334bdc80541 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/new_terms_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/new_terms_rule.cy.ts @@ -56,8 +56,8 @@ import { } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; - import { CREATE_RULE_URL } from '../../../urls/navigation'; +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; // TODO: https://github.com/elastic/kibana/issues/161539 describe('New Terms rules', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { @@ -86,6 +86,7 @@ describe('New Terms rules', { tags: ['@ess', '@serverless', '@brokenInServerless fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/override.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/override.cy.ts index b438d43a25636..6290583e82d82 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/override.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/override.cy.ts @@ -59,8 +59,8 @@ import { import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; import { getDetails, waitForTheRuleToBeExecuted } from '../../../tasks/rule_details'; - import { CREATE_RULE_URL } from '../../../urls/navigation'; +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; // TODO: https://github.com/elastic/kibana/issues/161539 describe('Rules override', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { @@ -82,6 +82,7 @@ describe('Rules override', { tags: ['@ess', '@serverless', '@brokenInServerless' fillAboutRuleWithOverrideAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/threshold_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/threshold_rule.cy.ts index 1b4122606c102..1928fd8098f91 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/threshold_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/threshold_rule.cy.ts @@ -56,11 +56,10 @@ import { } from '../../../tasks/create_new_rule'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; - +import { openRuleManagementPageViaBreadcrumbs } from '../../../tasks/rules_management'; import { CREATE_RULE_URL } from '../../../urls/navigation'; -// TODO: https://github.com/elastic/kibana/issues/161539 -describe('Threshold rules', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Threshold rules', { tags: ['@ess', '@serverless'] }, () => { const rule = getNewThresholdRule(); const expectedUrls = rule.references?.join(''); const expectedFalsePositives = rule.false_positives?.join(''); @@ -84,6 +83,7 @@ describe('Threshold rules', { tags: ['@ess', '@serverless', '@brokenInServerless fillAboutRuleAndContinue(rule); fillScheduleRuleAndContinue(rule); createAndEnableRule(); + openRuleManagementPageViaBreadcrumbs(); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/breadcrumbs.ts b/x-pack/test/security_solution_cypress/cypress/screens/breadcrumbs.ts new file mode 100644 index 0000000000000..52910ec9b5f29 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/breadcrumbs.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const RULE_MANAGEMENT_PAGE_BREADCRUMB = + '[data-test-subj~="breadcrumb"][title="Detection rules (SIEM)"]'; + +export const LAST_BREADCRUMB = `[data-test-subj~="breadcrumb"][data-test-subj~="last"]`; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts b/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts index 4759c3cd2b08c..fd98e38f9cc32 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/rule_details.ts @@ -146,8 +146,5 @@ export const THREAT_TECHNIQUE = '[data-test-subj="threatTechniqueLink"]'; export const THREAT_SUBTECHNIQUE = '[data-test-subj="threatSubtechniqueLink"]'; -export const BACK_TO_RULES_TABLE = - '[data-test-subj="breadcrumbs"] a[title="Detection rules (SIEM)"]'; - export const HIGHLIGHTED_ROWS_IN_TABLE = '[data-test-subj="euiDataGridBody"] .alertsTableHighlightedRow'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts index a6eb63fe6318b..9faf5fa81ec00 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts @@ -127,33 +127,20 @@ import { ALERTS_TABLE_COUNT } from '../screens/timeline'; import { TIMELINE } from '../screens/timelines'; import { EUI_FILTER_SELECT_ITEM, COMBO_BOX_INPUT } from '../screens/common/controls'; import { ruleFields } from '../data/detection_engine'; -import { BACK_TO_RULES_TABLE } from '../screens/rule_details'; import { waitForAlerts } from './alerts'; import { refreshPage } from './security_header'; import { EMPTY_ALERT_TABLE } from '../screens/alerts'; -export const createAndEnableRuleOnly = () => { - cy.get(CREATE_AND_ENABLE_BTN).click({ force: true }); - cy.get(CREATE_AND_ENABLE_BTN).should('not.exist'); -}; - export const createAndEnableRule = () => { - cy.get(CREATE_AND_ENABLE_BTN).click({ force: true }); + cy.get(CREATE_AND_ENABLE_BTN).click(); cy.get(CREATE_AND_ENABLE_BTN).should('not.exist'); - cy.get(BACK_TO_RULES_TABLE).click({ force: true }); }; -export const pressRuleCreateBtn = () => { +export const createRuleWithoutEnabling = () => { cy.get(CREATE_WITHOUT_ENABLING_BTN).click(); cy.get(CREATE_WITHOUT_ENABLING_BTN).should('not.exist'); }; -export const createRuleWithoutEnabling = () => { - pressRuleCreateBtn(); - cy.get(BACK_TO_RULES_TABLE).click({ force: true }); - cy.get(BACK_TO_RULES_TABLE).should('not.exist'); -}; - export const fillAboutRule = (rule: RuleCreateProps) => { cy.get(RULE_NAME_INPUT).clear({ force: true }); cy.get(RULE_NAME_INPUT).type(rule.name, { force: true }); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/prebuilt_rules.ts b/x-pack/test/security_solution_cypress/cypress/tasks/prebuilt_rules.ts index e6945c551c965..7b58dda17015f 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/prebuilt_rules.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/prebuilt_rules.ts @@ -22,7 +22,7 @@ import { UPGRADE_ALL_RULES_BUTTON, UPGRADE_SELECTED_RULES_BUTTON, } from '../screens/alerts_detection_rules'; -import { BACK_TO_RULES_TABLE } from '../screens/rule_details'; +import { RULE_MANAGEMENT_PAGE_BREADCRUMB } from '../screens/breadcrumbs'; import type { SAMPLE_PREBUILT_RULE } from './api_calls/prebuilt_rules'; export const addElasticRulesButtonClick = () => { @@ -108,7 +108,7 @@ const assertInstallationSuccessOrFailure = ( cy.get(ADD_ELASTIC_RULES_TABLE).contains(rule['security-rule'].name); } } else { - cy.get(BACK_TO_RULES_TABLE).click(); + cy.get(RULE_MANAGEMENT_PAGE_BREADCRUMB).click(); for (const rule of rules) { cy.get(RULES_MANAGEMENT_TABLE).contains(rule['security-rule'].name); } diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/rule_details.ts b/x-pack/test/security_solution_cypress/cypress/tasks/rule_details.ts index 9264b17fec081..a81be48d229e9 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/rule_details.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/rule_details.ts @@ -7,6 +7,7 @@ import { ROLES } from '@kbn/security-solution-plugin/common/test'; import type { Exception } from '../objects/exception'; +import { RULE_MANAGEMENT_PAGE_BREADCRUMB } from '../screens/breadcrumbs'; import { PAGE_CONTENT_SPINNER } from '../screens/common/page'; import { RULE_STATUS } from '../screens/create_new_rule'; import { @@ -30,7 +31,6 @@ import { EDIT_EXCEPTION_BTN, ENDPOINT_EXCEPTIONS_TAB, EDIT_RULE_SETTINGS_LINK, - BACK_TO_RULES_TABLE, EXCEPTIONS_TAB_EXPIRED_FILTER, EXCEPTIONS_TAB_ACTIVE_FILTER, RULE_NAME_HEADER, @@ -152,7 +152,7 @@ export const waitForTheRuleToBeExecuted = () => { }; export const goBackToRulesTable = () => { - cy.get(BACK_TO_RULES_TABLE).click(); + cy.get(RULE_MANAGEMENT_PAGE_BREADCRUMB).click(); }; export const getDetails = (title: string | RegExp) => diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/rules_management.ts b/x-pack/test/security_solution_cypress/cypress/tasks/rules_management.ts index 6c6bbfb1564e2..5f795ce97d524 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/rules_management.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/rules_management.ts @@ -6,6 +6,7 @@ */ import type { ROLES } from '@kbn/security-solution-plugin/common/test'; +import { LAST_BREADCRUMB, RULE_MANAGEMENT_PAGE_BREADCRUMB } from '../screens/breadcrumbs'; import { RULES_MANAGEMENT_URL } from '../urls/rules_management'; import { resetRulesTableState } from './common'; import { visit } from './navigation'; @@ -14,3 +15,9 @@ export function visitRulesManagementTable(role?: ROLES): void { resetRulesTableState(); // Clear persistent rules filter data before page loading visit(RULES_MANAGEMENT_URL, { role }); } + +export function openRuleManagementPageViaBreadcrumbs(): void { + cy.log('Navigate back to rules table via breadcrumbs'); + cy.get(RULE_MANAGEMENT_PAGE_BREADCRUMB).not(LAST_BREADCRUMB).click(); + cy.get(RULE_MANAGEMENT_PAGE_BREADCRUMB).filter(LAST_BREADCRUMB).should('exist'); +} From 7baab02533c31d983b2e1bb1952682c706c76dac Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Wed, 4 Oct 2023 10:43:33 +0200 Subject: [PATCH 048/170] Model version testing: add utility to test MV transforms (#167861) ## Summary Follow-up of https://github.com/elastic/kibana/pull/167501 Adds a new utility to `@kbn/core-test-helpers-model-versions` to easily assert model version document transformations in unit tests. ```ts const mySoType = someSoType(); const migrator = createModelVersionTestMigrator({ type: mySoType }); const obj = createSomeSavedObject(); const migrated = migrator.migrate({ document: obj, fromVersion: 1, toVersion: 2, }); expect(migrated.properties).toEqual(myExpectedProperties); ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../document_migrator/document_migrator.ts | 27 ++- .../src/document_migrator/utils.test.ts | 36 ++++ .../src/document_migrator/utils.ts | 11 +- .../README.md | 36 +++- .../core-test-helpers-model-versions/index.ts | 19 +- .../src/model_version_tester.test.ts | 192 ++++++++++++++++++ .../src/model_version_tester.ts | 113 +++++++++++ .../src/{ => test_bed}/elasticsearch.ts | 0 .../src/test_bed/index.ts | 16 ++ .../src/{ => test_bed}/test_bed.ts | 0 .../src/{ => test_bed}/test_kit.ts | 0 .../src/{ => test_bed}/type_registry.ts | 0 .../src/{ => test_bed}/types.ts | 0 .../tsconfig.json | 2 + 14 files changed, 431 insertions(+), 21 deletions(-) create mode 100644 packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.test.ts create mode 100644 packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts rename packages/core/test-helpers/core-test-helpers-model-versions/src/{ => test_bed}/elasticsearch.ts (100%) create mode 100644 packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/index.ts rename packages/core/test-helpers/core-test-helpers-model-versions/src/{ => test_bed}/test_bed.ts (100%) rename packages/core/test-helpers/core-test-helpers-model-versions/src/{ => test_bed}/test_kit.ts (100%) rename packages/core/test-helpers/core-test-helpers-model-versions/src/{ => test_bed}/type_registry.ts (100%) rename packages/core/test-helpers/core-test-helpers-model-versions/src/{ => test_bed}/types.ts (100%) diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts index 8ca15093d5827..540f8e39b4671 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts @@ -31,11 +31,16 @@ export interface DocumentMigrateOptions { * Defaults to `false`. */ allowDowngrade?: boolean; + /** + * If specified, will migrate to the given version instead of the latest known version. + */ + targetTypeVersion?: string; } interface TransformOptions { convertNamespaceTypes?: boolean; allowDowngrade?: boolean; + targetTypeVersion?: string; } interface DocumentMigratorOptions { @@ -149,10 +154,11 @@ export class DocumentMigrator implements VersionedTransformer { */ public migrate( doc: SavedObjectUnsanitizedDoc, - { allowDowngrade = false }: DocumentMigrateOptions = {} + { allowDowngrade = false, targetTypeVersion }: DocumentMigrateOptions = {} ): SavedObjectUnsanitizedDoc { const { document } = this.transform(doc, { allowDowngrade, + targetTypeVersion, }); return document; } @@ -171,15 +177,20 @@ export class DocumentMigrator implements VersionedTransformer { private transform( doc: SavedObjectUnsanitizedDoc, - { convertNamespaceTypes = false, allowDowngrade = false }: TransformOptions = {} + { + convertNamespaceTypes = false, + allowDowngrade = false, + targetTypeVersion, + }: TransformOptions = {} ) { if (!this.migrations) { throw new Error('Migrations are not ready. Make sure prepareMigrations is called first.'); } const typeMigrations = this.migrations[doc.type]; - if (downgradeRequired(doc, typeMigrations?.latestVersion ?? {})) { + if (downgradeRequired(doc, typeMigrations?.latestVersion ?? {}, targetTypeVersion)) { const currentVersion = doc.typeMigrationVersion ?? doc.migrationVersion?.[doc.type]; - const latestVersion = this.migrations[doc.type].latestVersion[TransformType.Migrate]; + const latestVersion = + targetTypeVersion ?? this.migrations[doc.type].latestVersion[TransformType.Migrate]; if (!allowDowngrade) { throw Boom.badData( `Document "${doc.id}" belongs to a more recent version of Kibana [${currentVersion}] when the last known version is [${latestVersion}].` @@ -187,13 +198,16 @@ export class DocumentMigrator implements VersionedTransformer { } return this.transformDown(doc, { targetTypeVersion: latestVersion! }); } else { - return this.transformUp(doc, { convertNamespaceTypes }); + return this.transformUp(doc, { convertNamespaceTypes, targetTypeVersion }); } } private transformUp( doc: SavedObjectUnsanitizedDoc, - { convertNamespaceTypes }: { convertNamespaceTypes: boolean } + { + convertNamespaceTypes, + targetTypeVersion, + }: { convertNamespaceTypes: boolean; targetTypeVersion?: string } ) { if (!this.migrations) { throw new Error('Migrations are not ready. Make sure prepareMigrations is called first.'); @@ -201,6 +215,7 @@ export class DocumentMigrator implements VersionedTransformer { const pipeline = new DocumentUpgradePipeline({ document: doc, + targetTypeVersion, migrations: this.migrations, kibanaVersion: this.options.kibanaVersion, convertNamespaceTypes, diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.test.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.test.ts index 6734def19d5ce..b66e1ea7c2d71 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.test.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.test.ts @@ -154,4 +154,40 @@ describe('downgradeRequired', () => { expect(downgradeRequired(doc, latestVersions)).toEqual(false); }); + + it('returns true when targetTypeVersion is specified and lower than the document version', () => { + const doc = createDoc({ + typeMigrationVersion: '8.0.0', + }); + const latestVersions = { + [TransformType.Migrate]: '8.5.0', + } as Record; + const targetTypeVersion = '7.9.0'; + + expect(downgradeRequired(doc, latestVersions, targetTypeVersion)).toEqual(true); + }); + + it('returns false when targetTypeVersion is specified and higher than the document version', () => { + const doc = createDoc({ + typeMigrationVersion: '8.0.0', + }); + const latestVersions = { + [TransformType.Migrate]: '7.9.0', + } as Record; + const targetTypeVersion = '8.5.0'; + + expect(downgradeRequired(doc, latestVersions, targetTypeVersion)).toEqual(false); + }); + + it('returns false when targetTypeVersion is specified and the same as the document version', () => { + const doc = createDoc({ + typeMigrationVersion: '8.0.0', + }); + const latestVersions = { + [TransformType.Migrate]: '7.9.0', + } as Record; + const targetTypeVersion = '8.0.0'; + + expect(downgradeRequired(doc, latestVersions, targetTypeVersion)).toEqual(false); + }); }); diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts index 2082a0361336c..a111fc663e5da 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts @@ -92,13 +92,14 @@ export function transformComparator(a: Transform, b: Transform) { */ export function downgradeRequired( doc: SavedObjectUnsanitizedDoc, - latestVersions: Record + latestVersions: Record, + targetTypeVersion?: string ): boolean { const docTypeVersion = doc.typeMigrationVersion ?? doc.migrationVersion?.[doc.type]; - const latestMigrationVersion = maxVersion( - latestVersions[TransformType.Migrate], - latestVersions[TransformType.Convert] - ); + const latestMigrationVersion = + targetTypeVersion ?? + maxVersion(latestVersions[TransformType.Migrate], latestVersions[TransformType.Convert]); + if (!docTypeVersion || !latestMigrationVersion) { return false; } diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/README.md b/packages/core/test-helpers/core-test-helpers-model-versions/README.md index 71aca755a14b6..e9e8ca52d7641 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/README.md +++ b/packages/core/test-helpers/core-test-helpers-model-versions/README.md @@ -1,12 +1,44 @@ # @kbn/core-test-helpers-model-versions -Package exposing utilities for model version integration testing. +Package exposing utilities for model version testing: +- unit testing +- integration testing + +## Unit testing + +### Model version test migrator + +The `createModelVersionTestMigrator` helper allows to create a test migrator that +can be used to test model version changes between versions. + +```ts +const mySoType = someSoType(); +const migrator = createModelVersionTestMigrator({ type: mySoType }); + +const obj = createSomeSavedObject(); + +const migrated = migrator.migrate({ + document: obj, + fromVersion: 1, + toVersion: 2, +}); + +expect(migrated.properties).toEqual(myExpectedProperties); +``` + +Please refer to the code documentation for more detailed examples. + +## Integration testing + +### Model version test bed This package exposes a `createModelVersionTestBed` utility which allow simulating a testbed environment where we're in the cohabitation period between two versions, to test the interactions between two model versions of a set of SO types. -### Limitations: +Please refer to the code documentation for more detailed examples. + +*Limitations:* Because the test bed is only creating the parts of Core required to create the two SO repositories, and because we're not loading all plugins (for proper isolation), the integration diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/index.ts b/packages/core/test-helpers/core-test-helpers-model-versions/index.ts index e8a5565f1dd79..9bd91d4e7d592 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/index.ts +++ b/packages/core/test-helpers/core-test-helpers-model-versions/index.ts @@ -6,11 +6,14 @@ * Side Public License, v 1. */ -export { createModelVersionTestBed } from './src/test_bed'; - -export type { - ModelVersionTestBed, - ModelVersionTestKit, - ModelVersionTestkitOptions, - SavedObjectTestkitDefinition, -} from './src/types'; +export { + createModelVersionTestBed, + type ModelVersionTestBed, + type ModelVersionTestKit, + type ModelVersionTestkitOptions, + type SavedObjectTestkitDefinition, +} from './src/test_bed'; +export { + createModelVersionTestMigrator, + type ModelVersionTestMigrator, +} from './src/model_version_tester'; diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.test.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.test.ts new file mode 100644 index 0000000000000..6f0aa75e2ad74 --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.test.ts @@ -0,0 +1,192 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { schema } from '@kbn/config-schema'; +import type { SavedObjectsType, SavedObject } from '@kbn/core-saved-objects-server'; +import { createModelVersionTestMigrator } from './model_version_tester'; + +const createObject = (parts: Partial): SavedObject => { + return { + type: 'test-type', + id: 'test-id', + attributes: {}, + references: [], + ...parts, + }; +}; + +describe('modelVersionTester', () => { + const testType: SavedObjectsType = { + name: 'test-type', + hidden: false, + namespaceType: 'single', + mappings: { properties: {} }, + modelVersions: { + 1: { + changes: [], + schemas: { + forwardCompatibility: schema.object( + { + fieldV1: schema.string(), + }, + { unknowns: 'ignore' } + ), + }, + }, + 2: { + changes: [ + { + type: 'data_backfill', + backfillFn: (document) => { + return { + attributes: { + fieldAddedInV2: '2', + }, + }; + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { + fieldV1: schema.string(), + fieldAddedInV2: schema.string(), + }, + { unknowns: 'ignore' } + ), + }, + }, + 3: { + changes: [ + { + type: 'data_backfill', + backfillFn: (doc) => { + return { + attributes: { + fieldAddedInV3: '3', + }, + }; + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { + fieldV1: schema.string(), + fieldAddedInV2: schema.string(), + fieldAddedInV3: schema.string(), + }, + { unknowns: 'ignore' } + ), + }, + }, + 4: { + changes: [ + { + type: 'unsafe_transform', + transformFn: (doc) => { + doc.attributes = { + ...doc.attributes, + fieldUnsafelyAddedInV4: '4', + }; + + return { document: doc }; + }, + }, + ], + schemas: { + forwardCompatibility: schema.object( + { + fieldV1: schema.string(), + fieldAddedInV2: schema.string(), + fieldAddedInV3: schema.string(), + fieldUnsafelyAddedInV4: schema.string(), + }, + { unknowns: 'ignore' } + ), + }, + }, + }, + }; + + it('upward migrate one version', () => { + const migrator = createModelVersionTestMigrator({ type: testType }); + + const obj = createObject({ + attributes: { + fieldV1: 'v1', + }, + }); + + const migrated = migrator.migrate({ document: obj, fromVersion: 1, toVersion: 2 }); + + expect(migrated.attributes).toEqual({ + fieldV1: 'v1', + fieldAddedInV2: '2', + }); + }); + + it('upward migrate multiple version', () => { + const migrator = createModelVersionTestMigrator({ type: testType }); + + const obj = createObject({ + attributes: { + fieldV1: 'v1', + }, + }); + + const migrated = migrator.migrate({ document: obj, fromVersion: 1, toVersion: 4 }); + + expect(migrated.attributes).toEqual({ + fieldV1: 'v1', + fieldAddedInV2: '2', + fieldAddedInV3: '3', + fieldUnsafelyAddedInV4: '4', + }); + }); + + it('downward migrate one version', () => { + const migrator = createModelVersionTestMigrator({ type: testType }); + + const obj = createObject({ + attributes: { + fieldV1: 'v1', + fieldAddedInV2: '2', + fieldAddedInV3: '3', + fieldUnsafelyAddedInV4: '4', + }, + }); + + const migrated = migrator.migrate({ document: obj, fromVersion: 4, toVersion: 3 }); + + expect(migrated.attributes).toEqual({ + fieldV1: 'v1', + fieldAddedInV2: '2', + fieldAddedInV3: '3', + }); + }); + + it('downward migrate multiple versions', () => { + const migrator = createModelVersionTestMigrator({ type: testType }); + + const obj = createObject({ + attributes: { + fieldV1: 'v1', + fieldAddedInV2: '2', + fieldAddedInV3: '3', + fieldUnsafelyAddedInV4: '4', + }, + }); + + const migrated = migrator.migrate({ document: obj, fromVersion: 4, toVersion: 1 }); + + expect(migrated.attributes).toEqual({ + fieldV1: 'v1', + }); + }); +}); diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts new file mode 100644 index 0000000000000..9aaa2fcde3847 --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { loggerMock } from '@kbn/logging-mocks'; +import { getEnvOptions } from '@kbn/config-mocks'; +import { Env } from '@kbn/config'; +import { REPO_ROOT } from '@kbn/repo-info'; +import type { SavedObjectsType, SavedObject } from '@kbn/core-saved-objects-server'; +import { + modelVersionToVirtualVersion, + SavedObjectTypeRegistry, + globalSwitchToModelVersionAt, +} from '@kbn/core-saved-objects-base-server-internal'; +import { DocumentMigrator } from '@kbn/core-saved-objects-migration-server-internal'; + +const env = Env.createDefault(REPO_ROOT, getEnvOptions()); +const currentVersion = env.packageInfo.version; +const lastCoreVersion = '8.8.0'; + +/** + * Options for {@link ModelVersionTestMigrator.migrate} + */ +interface ModelVersionTestMigrateOptions { + /** + * The document to migrate. + */ + document: SavedObject; + /** + * The model version the input document should be considered in. + */ + fromVersion: number; + /** + * The model version the document should be migrated to. + */ + toVersion: number; +} + +/** + * Test utility allowing to test model version changes between versions. + */ +export interface ModelVersionTestMigrator { + /** + * Migrate the document from the provided source to destination model version. + * + * @see {@link ModelVersionTestMigrateOptions} + */ + migrate( + options: ModelVersionTestMigrateOptions + ): SavedObject; +} + +/** + * Create a {@link ModelVersionTestMigrator | test migrator} that can be used + * to test model version changes between versions. + * + * @example + * ```ts + * const mySoType = someSoType(); + * const migrator = createModelVersionTestMigrator({ type: mySoType }); + * + * const obj = createSomeSavedObject(); + * + * const migrated = migrator.migrate({ + * document: obj, + * fromVersion: 1, + * toVersion: 2, + * }); + * + * expect(migrated.properties).toEqual(myExpectedProperties); + * ``` + */ +export const createModelVersionTestMigrator = ({ + type, +}: { + type: SavedObjectsType; +}): ModelVersionTestMigrator => { + const typeRegistry = new SavedObjectTypeRegistry(); + typeRegistry.registerType({ + switchToModelVersionAt: globalSwitchToModelVersionAt, + ...type, + }); + + const logger = loggerMock.create(); + + const migrator = new DocumentMigrator({ + typeRegistry, + log: logger, + kibanaVersion: currentVersion, + }); + migrator.prepareMigrations(); + + return { + migrate: ({ document, fromVersion, toVersion }) => { + const docCopy: SavedObject = { + ...document, + coreMigrationVersion: lastCoreVersion, + typeMigrationVersion: modelVersionToVirtualVersion(fromVersion), + }; + + const migratedDoc = migrator.migrate(docCopy, { + allowDowngrade: true, + targetTypeVersion: modelVersionToVirtualVersion(toVersion), + }); + + return migratedDoc as SavedObject; + }, + }; +}; diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/elasticsearch.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/elasticsearch.ts similarity index 100% rename from packages/core/test-helpers/core-test-helpers-model-versions/src/elasticsearch.ts rename to packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/elasticsearch.ts diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/index.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/index.ts new file mode 100644 index 0000000000000..b38390e7c38f8 --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { createModelVersionTestBed } from './test_bed'; + +export type { + ModelVersionTestBed, + ModelVersionTestKit, + ModelVersionTestkitOptions, + SavedObjectTestkitDefinition, +} from './types'; diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts similarity index 100% rename from packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed.ts rename to packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_kit.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts similarity index 100% rename from packages/core/test-helpers/core-test-helpers-model-versions/src/test_kit.ts rename to packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/type_registry.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/type_registry.ts similarity index 100% rename from packages/core/test-helpers/core-test-helpers-model-versions/src/type_registry.ts rename to packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/type_registry.ts diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts similarity index 100% rename from packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts rename to packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/tsconfig.json b/packages/core/test-helpers/core-test-helpers-model-versions/tsconfig.json index fe08f1cce0cea..89bf3a0c97d1b 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-model-versions/tsconfig.json @@ -33,5 +33,7 @@ "@kbn/doc-links", "@kbn/core-doc-links-server", "@kbn/core-node-server", + "@kbn/config-schema", + "@kbn/logging-mocks", ] } From a69957e0fc821b9644a70df2a57ccb672fd71001 Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Wed, 4 Oct 2023 10:50:07 +0200 Subject: [PATCH 049/170] [Stack Monitoring] Convert node roles into array (#167628) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary When the `elasticsearch.node.roles` property is set to a single role, the API returns a single string instead of a list, failing when computing the role list client side and resulting in an empty list. This fix is to parse the node roles into a list if the API returns a single role string and correctly displays the roles. E.g. Assuming we have the following roles configuration ``` [ { "_source": { "elasticsearch": { "node": { "roles": [ "data", "master" ] } } } }, { "_source": { "elasticsearch": { "node": { "roles": "master" } } } } ] ``` It would fail at parsing the second node roles and fall back into the "coordinating only" default. Screenshot 2023-09-29 at 13 05 14 Co-authored-by: Marco Antonio Ghiani --- .../public/application/pages/elasticsearch/nodes_page.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/nodes_page.tsx b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/nodes_page.tsx index 75dadbc2f6558..c13682800707a 100644 --- a/x-pack/plugins/monitoring/public/application/pages/elasticsearch/nodes_page.tsx +++ b/x-pack/plugins/monitoring/public/application/pages/elasticsearch/nodes_page.tsx @@ -186,15 +186,17 @@ export const ElasticsearchNodesPage: React.FC = ({ clusters }) = ); }; -function sortNodeRoles(roles: string[] | undefined): string[] | undefined { +function sortNodeRoles(roles: string[] | string | undefined): string[] | undefined { if (!roles) { return undefined; } - if (roles.length === 0) { + const rolesList = Array.isArray(roles) ? roles : [roles]; + + if (rolesList.length === 0) { return []; } - const rolesAsSet = new Set(roles); + const rolesAsSet = new Set(rolesList); return rolesByImportance.filter((role) => rolesAsSet.has(role)); } From dfd35c6361be6426468ca6cd4e2bfe20b7978774 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:58:29 +0100 Subject: [PATCH 050/170] [SecuritySolution] It should return to the origin app and path after editing markdown from the dashboard (#167927) ## Summary issue: https://github.com/elastic/kibana/issues/167786 In this PR: https://github.com/elastic/kibana/assets/6295984/a35bd617-5805-4e60-a1e6-7ba559756ef0 ### Checklist Delete any items that are not applicable to this PR. - [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 --- .../utils/get_top_nav_config.test.tsx | 43 +++++++++++++++++++ .../utils/get_top_nav_config.tsx | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.test.tsx b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.test.tsx index 909e3029db48d..edcff40f4763a 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.test.tsx +++ b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.test.tsx @@ -224,6 +224,49 @@ describe('getTopNavConfig', () => { ] `); }); + + test('navigates to origin app and path on cancel', async () => { + const vis = { + savedVis: { + id: 'test', + sharingSavedObjectProps: { + outcome: 'conflict', + aliasTargetId: 'alias_id', + }, + }, + vis: { + type: { + title: 'TSVB', + }, + }, + } as VisualizeEditorVisInstance; + const mockNavigateToApp = jest.fn(); + const topNavLinks = getTopNavConfig( + { + hasUnsavedChanges: false, + setHasUnsavedChanges: jest.fn(), + hasUnappliedChanges: false, + onOpenInspector: jest.fn(), + originatingApp: 'testApp', + originatingPath: '/testPath', + setOriginatingApp: jest.fn(), + visInstance: vis, + stateContainer, + visualizationIdFromUrl: undefined, + stateTransfer: createEmbeddableStateTransferMock(), + } as unknown as TopNavConfigParams, + { + ...services, + application: { navigateToApp: mockNavigateToApp }, + } as unknown as VisualizeServices + ); + + const executionFunction = topNavLinks.find(({ id }) => id === 'cancel')?.run; + const mockAnchorElement = document.createElement('div'); + await executionFunction?.(mockAnchorElement); + expect(mockNavigateToApp).toHaveBeenCalledWith('testApp', { path: '/testPath' }); + }); + test('returns correct links for by reference visualization', () => { const vis = { savedVis: { diff --git a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx index 49ebc45833376..064e281f8c269 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx +++ b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx @@ -258,7 +258,7 @@ export const getTopNavConfig = ( const navigateToOriginatingApp = () => { if (originatingApp) { - application.navigateToApp(originatingApp); + application.navigateToApp(originatingApp, { path: originatingPath }); } }; From d8886d83c4694c01d7629680b8e7ae222f3ccbfc Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 4 Oct 2023 11:23:26 +0200 Subject: [PATCH 051/170] [ML] AIOps: Support text fields in log rate analysis (#165124) Part of #167467. Adds support for text fields in log pattern analysis. Text fields will be analysed using log categorization, similar to log pattern analysis. Significant log patterns will be identified using the `chi2test` package, similar to how we detect data drifts. --- x-pack/packages/ml/agg_utils/index.ts | 2 + .../ml/agg_utils/src/type_guards.test.ts | 2 + .../packages/ml/agg_utils/src/type_guards.ts | 2 + x-pack/packages/ml/agg_utils/src/types.ts | 30 +++ .../final_significant_term_groups.ts | 56 ++++-- .../significant_term_groups.ts | 11 +- .../artificial_logs/significant_terms.ts | 12 +- .../farequote/significant_term_groups.ts | 8 + .../aiops/common/api/stream_reducer.test.ts | 2 + x-pack/plugins/aiops/common/types.ts | 4 +- ...uild_extended_base_filter_criteria.test.ts | 42 ++++- .../build_extended_base_filter_criteria.ts | 72 ++++++-- .../get_group_table_items.test.ts | 56 ++++-- .../get_group_table_items.ts | 19 +- .../log_rate_analysis_results_table.tsx | 104 +++++++++-- .../log_rate_analysis_results_table/types.ts | 2 +- ...se_view_in_log_pattern_analysis_action.tsx | 27 ++- .../aiops/server/routes/log_rate_analysis.ts | 171 ++++++++++++++++-- .../server/routes/queries/fetch_categories.ts | 149 +++++++++++++++ .../routes/queries/fetch_category_counts.ts | 125 +++++++++++++ .../server/routes/queries/fetch_index_info.ts | 43 ++++- .../queries/fetch_significant_categories.ts | 139 ++++++++++++++ .../fetch_significant_term_p_values.ts | 16 +- .../fetch_terms_2_categories_counts.ts | 150 +++++++++++++++ .../get_field_value_pair_counts.test.ts | 2 + .../server/routes/queries/get_group_filter.ts | 38 +++- ...get_groups_with_readded_duplicates.test.ts | 4 + .../get_groups_with_readded_duplicates.ts | 2 + .../routes/queries/get_histogram_query.ts | 2 +- .../queries/get_marked_duplicates.test.ts | 22 ++- .../get_missing_significant_terms.test.ts | 4 + .../routes/queries/get_normalized_score.ts | 13 ++ .../routes/queries/get_query_with_params.ts | 5 +- .../queries/get_significant_term_groups.ts | 2 +- .../get_simple_hierarchical_tree.test.ts | 29 ++- .../queries/get_simple_hierarchical_tree.ts | 35 +++- ...et_simple_hierarchical_tree_leaves.test.ts | 25 ++- ...ransform_significant_term_to_group.test.ts | 6 +- .../transform_significant_term_to_group.ts | 10 +- x-pack/plugins/aiops/tsconfig.json | 1 + .../api_integration/apis/aiops/test_data.ts | 4 + .../test/functional/apps/aiops/test_data.ts | 6 +- 42 files changed, 1307 insertions(+), 147 deletions(-) create mode 100644 x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts create mode 100644 x-pack/plugins/aiops/server/routes/queries/fetch_category_counts.ts create mode 100644 x-pack/plugins/aiops/server/routes/queries/fetch_significant_categories.ts create mode 100644 x-pack/plugins/aiops/server/routes/queries/fetch_terms_2_categories_counts.ts create mode 100644 x-pack/plugins/aiops/server/routes/queries/get_normalized_score.ts diff --git a/x-pack/packages/ml/agg_utils/index.ts b/x-pack/packages/ml/agg_utils/index.ts index 05e176be4a02a..dd3b694d332c7 100644 --- a/x-pack/packages/ml/agg_utils/index.ts +++ b/x-pack/packages/ml/agg_utils/index.ts @@ -19,6 +19,7 @@ export type { } from './src/fetch_histograms_for_fields'; export { isMultiBucketAggregate } from './src/is_multi_bucket_aggregate'; export { isSignificantTerm } from './src/type_guards'; +export { SIGNIFICANT_TERM_TYPE } from './src/types'; export type { AggCardinality, SignificantTerm, @@ -27,6 +28,7 @@ export type { SignificantTermGroupHistogram, SignificantTermHistogram, SignificantTermHistogramItem, + SignificantTermType, HistogramField, NumericColumnStats, NumericColumnStatsMap, diff --git a/x-pack/packages/ml/agg_utils/src/type_guards.test.ts b/x-pack/packages/ml/agg_utils/src/type_guards.test.ts index dc0556eab68dd..9cf472abcfb03 100644 --- a/x-pack/packages/ml/agg_utils/src/type_guards.test.ts +++ b/x-pack/packages/ml/agg_utils/src/type_guards.test.ts @@ -14,6 +14,8 @@ describe('isSignificantTerm', () => { expect(isSignificantTerm({ fieldValue: '500' })).toBeFalsy(); expect( isSignificantTerm({ + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', doc_count: 1819, diff --git a/x-pack/packages/ml/agg_utils/src/type_guards.ts b/x-pack/packages/ml/agg_utils/src/type_guards.ts index ffc0d5943adb7..0e33052c8658b 100644 --- a/x-pack/packages/ml/agg_utils/src/type_guards.ts +++ b/x-pack/packages/ml/agg_utils/src/type_guards.ts @@ -19,6 +19,8 @@ import type { SignificantTerm } from './types'; */ export function isSignificantTerm(arg: unknown): arg is SignificantTerm { return isPopulatedObject(arg, [ + 'key', + 'type', 'fieldName', 'fieldValue', 'doc_count', diff --git a/x-pack/packages/ml/agg_utils/src/types.ts b/x-pack/packages/ml/agg_utils/src/types.ts index 92b1d03ea9d5e..026daf861058f 100644 --- a/x-pack/packages/ml/agg_utils/src/types.ts +++ b/x-pack/packages/ml/agg_utils/src/types.ts @@ -87,6 +87,24 @@ export interface HistogramField { type: KBN_FIELD_TYPES; } +/** + * Enumeration of significant term types. + */ +export const SIGNIFICANT_TERM_TYPE = { + KEYWORD: 'keyword', + LOG_PATTERN: 'log_pattern', +} as const; + +/** + * Type for significant term type keys. + */ +type SignificantTermTypeKeys = keyof typeof SIGNIFICANT_TERM_TYPE; + +/** + * Represents the type of significant term as determined by the SIGNIFICANT_TERM_TYPE enumeration. + */ +export type SignificantTermType = typeof SIGNIFICANT_TERM_TYPE[SignificantTermTypeKeys]; + /** * Represents significant term metadata for a field/value pair. * This interface is used as a custom type within Log Rate Analysis @@ -97,6 +115,12 @@ export interface HistogramField { * @extends FieldValuePair */ export interface SignificantTerm extends FieldValuePair { + /** The key associated with the significant term. */ + key: string; + + /** The type of the significant term. */ + type: SignificantTermType; + /** The document count for the significant term. */ doc_count: number; @@ -169,6 +193,12 @@ export interface SignificantTermGroupHistogram { * @interface */ export interface SignificantTermGroupItem extends FieldValuePair { + /** The key associated with the significant term. */ + key: string; + + /** The type of the significant term. */ + type: SignificantTermType; + /** The document count associated with this item. */ docCount: number; diff --git a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/final_significant_term_groups.ts b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/final_significant_term_groups.ts index a149a8edc5601..7166e548449eb 100644 --- a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/final_significant_term_groups.ts +++ b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/final_significant_term_groups.ts @@ -12,84 +12,100 @@ export const finalSignificantTermGroups: SignificantTermGroup[] = [ docCount: 632, group: [ { - docCount: 790, - duplicate: 2, + key: 'url:login.php', + type: 'keyword', fieldName: 'url', fieldValue: 'login.php', + docCount: 790, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 632, - duplicate: 2, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 632, + duplicate: 2, pValue: 0.012783309213417932, }, ], - id: '1982924514', + id: '1937394803', pValue: 0.012783309213417932, }, { docCount: 792, group: [ { - docCount: 792, - duplicate: 2, + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', + docCount: 792, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 792, - duplicate: 2, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, + duplicate: 2, pValue: 0.00974308761016614, }, ], - id: '2052830342', + id: '2675980076', pValue: 0.00974308761016614, }, { docCount: 790, group: [ { - docCount: 792, - duplicate: 2, + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', + docCount: 792, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 790, - duplicate: 2, + key: 'url:login.php', + type: 'keyword', fieldName: 'url', fieldValue: 'login.php', + docCount: 790, + duplicate: 2, pValue: 0.012783309213417932, }, ], - id: '3851735068', + id: '3819687732', pValue: 0.012783309213417932, }, { docCount: 636, group: [ { - docCount: 792, - duplicate: 2, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, + duplicate: 2, pValue: 0.00974308761016614, }, { - docCount: 636, - duplicate: 2, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 636, + duplicate: 2, pValue: 0.00974308761016614, }, ], - id: '92732022', + id: '2091742187', pValue: 0.00974308761016614, }, ]; diff --git a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_term_groups.ts b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_term_groups.ts index ebbb8731511f9..160ce3967cd43 100644 --- a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_term_groups.ts +++ b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_term_groups.ts @@ -12,12 +12,21 @@ export const significantTermGroups: SignificantTermGroup[] = [ id: '2038579476', group: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', docCount: 1819, pValue: 2.9589053032077285e-12, }, - { fieldName: 'url', fieldValue: 'home.php', docCount: 1744, pValue: 0.010770456205312423 }, + { + key: 'url:home.php', + type: 'keyword', + fieldName: 'url', + fieldValue: 'home.php', + docCount: 1744, + pValue: 0.010770456205312423, + }, ], docCount: 792, pValue: 0.010770456205312423, diff --git a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_terms.ts b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_terms.ts index 1c71932496d78..4512f5943f4d0 100644 --- a/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_terms.ts +++ b/x-pack/plugins/aiops/common/__mocks__/artificial_logs/significant_terms.ts @@ -5,8 +5,12 @@ * 2.0. */ -export const significantTerms = [ +import type { SignificantTerm } from '@kbn/ml-agg-utils'; + +export const significantTerms: SignificantTerm[] = [ { + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', doc_count: 1981, @@ -18,6 +22,8 @@ export const significantTerms = [ normalizedScore: 0.8328439168064725, }, { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', doc_count: 1819, @@ -29,6 +35,8 @@ export const significantTerms = [ normalizedScore: 0.7809229492301661, }, { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', doc_count: 1744, @@ -40,6 +48,8 @@ export const significantTerms = [ normalizedScore: 0.12006631193078789, }, { + key: 'url:login.php', + type: 'keyword', fieldName: 'url', fieldValue: 'login.php', doc_count: 1738, diff --git a/x-pack/plugins/aiops/common/__mocks__/farequote/significant_term_groups.ts b/x-pack/plugins/aiops/common/__mocks__/farequote/significant_term_groups.ts index 59d310ed82d44..5058f0dbe7e98 100644 --- a/x-pack/plugins/aiops/common/__mocks__/farequote/significant_term_groups.ts +++ b/x-pack/plugins/aiops/common/__mocks__/farequote/significant_term_groups.ts @@ -12,12 +12,16 @@ export const significantTermGroups: SignificantTermGroup[] = [ id: 'group-1', group: [ { + key: 'custom_field.keyword:deviation', + type: 'keyword', fieldName: 'custom_field.keyword', fieldValue: 'deviation', docCount: 101, pValue: 0.01, }, { + key: 'airline:UAL', + type: 'keyword', fieldName: 'airline', fieldValue: 'UAL', docCount: 101, @@ -31,12 +35,16 @@ export const significantTermGroups: SignificantTermGroup[] = [ id: 'group-2', group: [ { + key: 'custom_field.keyword:deviation', + type: 'keyword', fieldName: 'custom_field.keyword', fieldValue: 'deviation', docCount: 49, pValue: 0.001, }, { + key: 'airline:AAL', + type: 'keyword', fieldName: 'airline', fieldValue: 'AAL', docCount: 49, diff --git a/x-pack/plugins/aiops/common/api/stream_reducer.test.ts b/x-pack/plugins/aiops/common/api/stream_reducer.test.ts index c119dcfc54c02..d779ccab356b3 100644 --- a/x-pack/plugins/aiops/common/api/stream_reducer.test.ts +++ b/x-pack/plugins/aiops/common/api/stream_reducer.test.ts @@ -39,6 +39,8 @@ describe('streamReducer', () => { initialState, addSignificantTermsAction([ { + key: 'the-field-name:the-field-value', + type: 'keyword', fieldName: 'the-field-name', fieldValue: 'the-field-value', doc_count: 10, diff --git a/x-pack/plugins/aiops/common/types.ts b/x-pack/plugins/aiops/common/types.ts index f9279686b6fe8..b46dd587838b4 100644 --- a/x-pack/plugins/aiops/common/types.ts +++ b/x-pack/plugins/aiops/common/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SignificantTerm, FieldValuePair } from '@kbn/ml-agg-utils'; +import type { SignificantTerm, SignificantTermType, FieldValuePair } from '@kbn/ml-agg-utils'; export interface SignificantTermDuplicateGroup { keys: Pick; @@ -24,6 +24,8 @@ export interface ItemsetResult { } interface SimpleHierarchicalTreeNodeSet extends FieldValuePair { + key: string; + type: SignificantTermType; docCount: number; pValue: number | null; } diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts index c27c8d66de53a..797f6f1e36a00 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts @@ -12,6 +12,8 @@ import type { GroupTableItem } from '../../components/log_rate_analysis_results_ import { buildExtendedBaseFilterCriteria } from './build_extended_base_filter_criteria'; const selectedSignificantTermMock: SignificantTerm = { + key: 'meta.cloud.instance_id.keyword:1234', + type: 'keyword', doc_count: 53408, bg_count: 1154, fieldName: 'meta.cloud.instance_id.keyword', @@ -29,22 +31,54 @@ const selectedGroupMock: GroupTableItem = { pValue: 2.2250738585072626e-308, uniqueItemsCount: 3, groupItemsSortedByUniqueness: [ - { fieldName: 'error.message', fieldValue: 'rate limit exceeded', docCount: 10, pValue: 0.05 }, - { fieldName: 'message', fieldValue: 'too many requests', docCount: 10, pValue: 0.05 }, { + key: 'error.message:rate limit exceeded', + type: 'keyword', + fieldName: 'error.message', + fieldValue: 'rate limit exceeded', + docCount: 10, + pValue: 0.05, + }, + { + key: 'message:too many requests', + type: 'keyword', + fieldName: 'message', + fieldValue: 'too many requests', + docCount: 10, + pValue: 0.05, + }, + { + key: 'user_agent.original.keyword:Mozilla/5.0', + type: 'keyword', fieldName: 'user_agent.original.keyword', fieldValue: 'Mozilla/5.0', docCount: 10, pValue: 0.05, }, { + key: 'beat.hostname.keyword:ip-192-168-1-1', + type: 'keyword', fieldName: 'beat.hostname.keyword', fieldValue: 'ip-192-168-1-1', docCount: 10, pValue: 0.05, }, - { fieldName: 'beat.name.keyword', fieldValue: 'i-1234', docCount: 10, pValue: 0.05 }, - { fieldName: 'docker.container.id.keyword', fieldValue: 'asdf', docCount: 10, pValue: 0.05 }, + { + key: 'beat.name.keyword:i-1234', + type: 'keyword', + fieldName: 'beat.name.keyword', + fieldValue: 'i-1234', + docCount: 10, + pValue: 0.05, + }, + { + key: 'docker.container.id.keyword:asdf', + type: 'keyword', + fieldName: 'docker.container.id.keyword', + fieldValue: 'asdf', + docCount: 10, + pValue: 0.05, + }, ], histogram: [], }; diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts index 87cc5afc65e25..ee4e707304ff4 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts @@ -11,10 +11,12 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Query } from '@kbn/es-query'; -import type { SignificantTerm } from '@kbn/ml-agg-utils'; +import { type SignificantTerm, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; import { buildBaseFilterCriteria } from '@kbn/ml-query-utils'; +import { getCategoryQuery } from '../../../common/api/log_categorization/get_category_query'; + import type { GroupTableItem } from '../../components/log_rate_analysis_results_table/types'; /* @@ -38,29 +40,69 @@ export function buildExtendedBaseFilterCriteria( if (selectedGroup) { const allItems = selectedGroup.groupItemsSortedByUniqueness; for (const item of allItems) { - const { fieldName, fieldValue } = item; - groupFilter.push({ term: { [fieldName]: fieldValue } }); + const { fieldName, fieldValue, key, type, docCount } = item; + if (type === SIGNIFICANT_TERM_TYPE.KEYWORD) { + groupFilter.push({ term: { [fieldName]: fieldValue } }); + } else { + groupFilter.push( + getCategoryQuery(fieldName, [ + { + key, + count: docCount, + examples: [], + }, + ]) + ); + } } } if (includeSelectedSignificantTerm) { if (selectedSignificantTerm) { - filterCriteria.push({ - term: { [selectedSignificantTerm.fieldName]: selectedSignificantTerm.fieldValue }, - }); + if (selectedSignificantTerm.type === 'keyword') { + filterCriteria.push({ + term: { [selectedSignificantTerm.fieldName]: selectedSignificantTerm.fieldValue }, + }); + } else { + filterCriteria.push( + getCategoryQuery(selectedSignificantTerm.fieldName, [ + { + key: `${selectedSignificantTerm.key}`, + count: selectedSignificantTerm.doc_count, + examples: [], + }, + ]) + ); + } } else if (selectedGroup) { filterCriteria.push(...groupFilter); } } else if (selectedSignificantTerm && !includeSelectedSignificantTerm) { - filterCriteria.push({ - bool: { - must_not: [ - { - term: { [selectedSignificantTerm.fieldName]: selectedSignificantTerm.fieldValue }, - }, - ], - }, - }); + if (selectedSignificantTerm.type === 'keyword') { + filterCriteria.push({ + bool: { + must_not: [ + { + term: { [selectedSignificantTerm.fieldName]: selectedSignificantTerm.fieldValue }, + }, + ], + }, + }); + } else { + filterCriteria.push({ + bool: { + must_not: [ + getCategoryQuery(selectedSignificantTerm.fieldName, [ + { + key: `${selectedSignificantTerm.key}`, + count: selectedSignificantTerm.doc_count, + examples: [], + }, + ]), + ], + }, + }); + } } else if (selectedGroup && !includeSelectedSignificantTerm) { filterCriteria.push({ bool: { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.test.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.test.ts index 9986925f07a88..6e6ea7594f69c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.test.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.test.ts @@ -18,22 +18,26 @@ describe('getGroupTableItems', () => { docCount: 632, groupItemsSortedByUniqueness: [ { - docCount: 632, - duplicate: 2, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 632, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 790, - duplicate: 2, + key: 'url:login.php', + type: 'keyword', fieldName: 'url', fieldValue: 'login.php', + docCount: 790, + duplicate: 2, pValue: 0.012783309213417932, }, ], histogram: undefined, - id: '1982924514', + id: '1937394803', pValue: 0.012783309213417932, uniqueItemsCount: 0, }, @@ -41,22 +45,26 @@ describe('getGroupTableItems', () => { docCount: 792, groupItemsSortedByUniqueness: [ { - docCount: 792, - duplicate: 2, + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', + docCount: 792, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 792, - duplicate: 2, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, + duplicate: 2, pValue: 0.00974308761016614, }, ], histogram: undefined, - id: '2052830342', + id: '2675980076', pValue: 0.00974308761016614, uniqueItemsCount: 0, }, @@ -64,22 +72,26 @@ describe('getGroupTableItems', () => { docCount: 790, groupItemsSortedByUniqueness: [ { - docCount: 790, - duplicate: 2, + key: 'url:login.php', + type: 'keyword', fieldName: 'url', fieldValue: 'login.php', + docCount: 790, + duplicate: 2, pValue: 0.012783309213417932, }, { - docCount: 792, - duplicate: 2, + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', + docCount: 792, + duplicate: 2, pValue: 0.012783309213417932, }, ], histogram: undefined, - id: '3851735068', + id: '3819687732', pValue: 0.012783309213417932, uniqueItemsCount: 0, }, @@ -87,22 +99,26 @@ describe('getGroupTableItems', () => { docCount: 636, groupItemsSortedByUniqueness: [ { - docCount: 636, - duplicate: 2, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 636, + duplicate: 2, pValue: 0.00974308761016614, }, { - docCount: 792, - duplicate: 2, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, + duplicate: 2, pValue: 0.00974308761016614, }, ], histogram: undefined, - id: '92732022', + id: '2091742187', pValue: 0.00974308761016614, uniqueItemsCount: 0, }, diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts index 68ba4471a7b5e..11331037de481 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts @@ -19,9 +19,24 @@ export function getGroupTableItems( const dedupedGroup: GroupTableItemGroup[] = []; sortedGroup.forEach((pair) => { - const { fieldName, fieldValue, docCount: pairDocCount, pValue: pairPValue, duplicate } = pair; + const { + key, + type, + fieldName, + fieldValue, + docCount: pairDocCount, + pValue: pairPValue, + duplicate, + } = pair; if ((duplicate ?? 0) <= 1) { - dedupedGroup.push({ fieldName, fieldValue, docCount: pairDocCount, pValue: pairPValue }); + dedupedGroup.push({ + key, + type, + fieldName, + fieldValue, + docCount: pairDocCount, + pValue: pairPValue, + }); } }); diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx index 4e87f58293f8b..de66040c8e382 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx @@ -6,6 +6,7 @@ */ import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; +import { css } from '@emotion/react'; import { orderBy, isEqual } from 'lodash'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; @@ -14,8 +15,10 @@ import { EuiBadge, EuiBasicTable, EuiBasicTableColumn, + EuiCode, EuiIcon, EuiIconTip, + EuiText, EuiTableSortingType, EuiToolTip, } from '@elastic/eui'; @@ -25,9 +28,11 @@ import type { FieldStatsServices } from '@kbn/unified-field-list/src/components/ import type { DataView } from '@kbn/data-views-plugin/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { SignificantTerm } from '@kbn/ml-agg-utils'; +import { type SignificantTerm, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; +import { getCategoryQuery } from '../../../common/api/log_categorization/get_category_query'; + import { useEuiTheme } from '../../hooks/use_eui_theme'; import { MiniHistogram } from '../mini_histogram'; @@ -49,6 +54,15 @@ const PAGINATION_SIZE_OPTIONS = [5, 10, 20, 50]; const DEFAULT_SORT_FIELD = 'pValue'; const DEFAULT_SORT_DIRECTION = 'asc'; +const TRUNCATE_MAX_LINES = 3; +const cssMultiLineTruncation = css` + display: -webkit-box; + line-clamp: ${TRUNCATE_MAX_LINES}; + -webkit-line-clamp: ${TRUNCATE_MAX_LINES}; + -webkit-box-orient: vertical; + overflow: hidden; +`; + interface LogRateAnalysisResultsTableProps { significantTerms: SignificantTerm[]; dataView: DataView; @@ -77,7 +91,9 @@ export const LogRateAnalysisResultsTable: FC = const dataViewId = dataView.id; const { + pinnedGroup, pinnedSignificantTerm, + selectedGroup, selectedSignificantTerm, setPinnedSignificantTerm, setSelectedSignificantTerm, @@ -111,19 +127,52 @@ export const LogRateAnalysisResultsTable: FC = name: i18n.translate('xpack.aiops.logRateAnalysis.resultsTable.fieldNameLabel', { defaultMessage: 'Field name', }), - render: (_, { fieldName, fieldValue }) => ( - <> - - {fieldName} - - ), + render: (_, { fieldName, fieldValue, key, type, doc_count: count }) => { + const dslQuery = + type === SIGNIFICANT_TERM_TYPE.KEYWORD + ? searchQuery + : getCategoryQuery(fieldName, [ + { + key, + count, + examples: [], + }, + ]); + return ( + <> + {type === SIGNIFICANT_TERM_TYPE.KEYWORD && ( + + )} + {type === SIGNIFICANT_TERM_TYPE.LOG_PATTERN && ( + + + + )} + + {fieldName} + + ); + }, sortable: true, valign: 'middle', }, @@ -133,9 +182,22 @@ export const LogRateAnalysisResultsTable: FC = name: i18n.translate('xpack.aiops.logRateAnalysis.resultsTable.fieldValueLabel', { defaultMessage: 'Field value', }), - render: (_, { fieldValue }) => String(fieldValue), + render: (_, { fieldValue, type }) => ( +
    + {type === 'keyword' ? ( + String(fieldValue) + ) : ( + + + {fieldValue} + + + )} +
    + ), sortable: true, textOnly: true, + truncateText: false, valign: 'middle', }, { @@ -230,7 +292,7 @@ export const LogRateAnalysisResultsTable: FC = ), render: (_, { pValue }) => { - if (!pValue) return NOT_AVAILABLE; + if (typeof pValue !== 'number') return NOT_AVAILABLE; const label = getFailedTransactionsCorrelationImpactLabel(pValue); return label ? {label.impact} : null; }, @@ -344,7 +406,9 @@ export const LogRateAnalysisResultsTable: FC = (selectedSignificantTerm === null || !pageOfItems.some((item) => isEqual(item, selectedSignificantTerm))) && pinnedSignificantTerm === null && - pageOfItems.length > 0 + pageOfItems.length > 0 && + selectedGroup === null && + pinnedGroup === null ) { setSelectedSignificantTerm(pageOfItems[0]); } @@ -353,15 +417,19 @@ export const LogRateAnalysisResultsTable: FC = // on the current page, set the status of pinned rows back to `null`. if ( pinnedSignificantTerm !== null && - !pageOfItems.some((item) => isEqual(item, pinnedSignificantTerm)) + !pageOfItems.some((item) => isEqual(item, pinnedSignificantTerm)) && + selectedGroup === null && + pinnedGroup === null ) { setPinnedSignificantTerm(null); } }, [ + selectedGroup, selectedSignificantTerm, setSelectedSignificantTerm, setPinnedSignificantTerm, pageOfItems, + pinnedGroup, pinnedSignificantTerm, ]); diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts index 4afe831f7bd37..66a8a7fe5ab00 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts @@ -11,7 +11,7 @@ import type { SignificantTerm, SignificantTermGroupItem } from '@kbn/ml-agg-util export type GroupTableItemGroup = Pick< SignificantTermGroupItem, - 'fieldName' | 'fieldValue' | 'docCount' | 'pValue' | 'duplicate' + 'key' | 'type' | 'fieldName' | 'fieldValue' | 'docCount' | 'pValue' | 'duplicate' >; export interface GroupTableItem { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx index 72fcabd6b7725..ba25db2b76aac 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx @@ -10,7 +10,7 @@ import React, { useMemo } from 'react'; import { SerializableRecord } from '@kbn/utility-types'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; -import type { SignificantTerm } from '@kbn/ml-agg-utils'; +import { isSignificantTerm, type SignificantTerm, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; @@ -19,6 +19,9 @@ import { TableActionButton } from './table_action_button'; import { getTableItemAsKQL } from './get_table_item_as_kql'; import type { GroupTableItem, TableItemAction } from './types'; +const isLogPattern = (tableItem: SignificantTerm | GroupTableItem) => + isSignificantTerm(tableItem) && tableItem.type === SIGNIFICANT_TERM_TYPE.LOG_PATTERN; + const viewInLogPatternAnalysisMessage = i18n.translate( 'xpack.aiops.logRateAnalysis.resultsTable.linksMenu.viewInLogPatternAnalysis', { @@ -88,13 +91,15 @@ export const useViewInLogPatternAnalysisAction = (dataViewId?: string): TableIte : viewInLogPatternAnalysisMessage; const clickHandler = async () => { - const openInLogPatternAnalysisUrl = await generateLogPatternAnalysisUrl(tableItem); - if (typeof openInLogPatternAnalysisUrl === 'string') { - await application.navigateToUrl(openInLogPatternAnalysisUrl); + if (!isLogPattern(tableItem)) { + const openInLogPatternAnalysisUrl = await generateLogPatternAnalysisUrl(tableItem); + if (typeof openInLogPatternAnalysisUrl === 'string') { + await application.navigateToUrl(openInLogPatternAnalysisUrl); + } } }; - const isDisabled = logPatternAnalysisUrlError !== undefined; + const isDisabled = logPatternAnalysisUrlError !== undefined || isLogPattern(tableItem); return ( ); diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts index a9ccce753a02a..7a0d1be0d7585 100644 --- a/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts +++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis.ts @@ -21,6 +21,7 @@ import type { NumericChartData, NumericHistogramField, } from '@kbn/ml-agg-utils'; +import { SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; import { fetchHistogramsForFields } from '@kbn/ml-agg-utils'; import { createExecutionContext } from '@kbn/ml-route-utils'; import type { UsageCounter } from '@kbn/usage-collection-plugin/server'; @@ -40,6 +41,7 @@ import { updateLoadingStateAction, AiopsLogRateAnalysisApiAction, } from '../../common/api/log_rate_analysis'; +import { getCategoryQuery } from '../../common/api/log_categorization/get_category_query'; import { AIOPS_API_ENDPOINT } from '../../common/api'; import { PLUGIN_ID } from '../../common'; @@ -47,9 +49,11 @@ import { PLUGIN_ID } from '../../common'; import { isRequestAbortedError } from '../lib/is_request_aborted_error'; import type { AiopsLicense } from '../types'; +import { fetchSignificantCategories } from './queries/fetch_significant_categories'; import { fetchSignificantTermPValues } from './queries/fetch_significant_term_p_values'; import { fetchIndexInfo } from './queries/fetch_index_info'; import { fetchFrequentItemSets } from './queries/fetch_frequent_item_sets'; +import { fetchTerms2CategoriesCounts } from './queries/fetch_terms_2_categories_counts'; import { getHistogramQuery } from './queries/get_histogram_query'; import { getGroupFilter } from './queries/get_group_filter'; import { getSignificantTermGroups } from './queries/get_significant_term_groups'; @@ -212,10 +216,11 @@ export const defineLogRateAnalysisRoute = ( // Step 1: Index Info: Field candidates, total doc count, sample probability - const fieldCandidates: Awaited>['fieldCandidates'] = - []; + const fieldCandidates: string[] = []; let fieldCandidatesCount = fieldCandidates.length; + const textFieldCandidates: string[] = []; + let totalDocCount = 0; if (!request.body.overrides?.remainingFieldCandidates) { @@ -234,9 +239,16 @@ export const defineLogRateAnalysisRoute = ( ); try { - const indexInfo = await fetchIndexInfo(client, request.body, abortSignal); + const indexInfo = await fetchIndexInfo( + client, + request.body, + ['message', 'error.message'], + abortSignal + ); + fieldCandidates.push(...indexInfo.fieldCandidates); fieldCandidatesCount = fieldCandidates.length; + textFieldCandidates.push(...indexInfo.textFieldCandidates); totalDocCount = indexInfo.totalDocCount; } catch (e) { if (!isRequestAbortedError(e)) { @@ -280,11 +292,43 @@ export const defineLogRateAnalysisRoute = ( } } - // Step 2: Significant Terms + // Step 2: Significant Categories and Terms + + // This will store the combined count of detected significant log patterns and keywords + let fieldValuePairsCount = 0; + + const significantCategories: SignificantTerm[] = request.body.overrides + ?.significantTerms + ? request.body.overrides?.significantTerms.filter( + (d) => d.type === SIGNIFICANT_TERM_TYPE.LOG_PATTERN + ) + : []; + + // Get significant categories of text fields + if (textFieldCandidates.length > 0) { + significantCategories.push( + ...(await fetchSignificantCategories( + client, + request.body, + textFieldCandidates, + logger, + sampleProbability, + pushError, + abortSignal + )) + ); + + if (significantCategories.length > 0) { + push(addSignificantTermsAction(significantCategories)); + } + } const significantTerms: SignificantTerm[] = request.body.overrides?.significantTerms - ? request.body.overrides?.significantTerms + ? request.body.overrides?.significantTerms.filter( + (d) => d.type === SIGNIFICANT_TERM_TYPE.KEYWORD + ) : []; + const fieldsToSample = new Set(); // Don't use more than 10 here otherwise Kibana will emit an error @@ -356,7 +400,7 @@ export const defineLogRateAnalysisRoute = ( defaultMessage: 'Identified {fieldValuePairsCount, plural, one {# significant field/value pair} other {# significant field/value pairs}}.', values: { - fieldValuePairsCount: significantTerms.length, + fieldValuePairsCount, }, } ), @@ -379,7 +423,9 @@ export const defineLogRateAnalysisRoute = ( }); await pValuesQueue.drain(); - if (significantTerms.length === 0) { + fieldValuePairsCount = significantCategories.length + significantTerms.length; + + if (fieldValuePairsCount === 0) { logDebugMessage('Stopping analysis, did not find significant terms.'); endWithUpdatedLoadingState(); return; @@ -474,6 +520,25 @@ export const defineLogRateAnalysisRoute = ( abortSignal ); + if (significantCategories.length > 0) { + const { fields: significantCategoriesFields, df: significantCategoriesDf } = + await fetchTerms2CategoriesCounts( + client, + request.body, + JSON.parse(request.body.searchQuery) as estypes.QueryDslQueryContainer, + significantTerms, + significantCategories, + request.body.deviationMin, + request.body.deviationMax, + logger, + pushError, + abortSignal + ); + + fields.push(...significantCategoriesFields); + df.push(...significantCategoriesDf); + } + if (shouldStop) { logDebugMessage('shouldStop after fetching frequent_item_sets.'); end(); @@ -483,7 +548,7 @@ export const defineLogRateAnalysisRoute = ( if (fields.length > 0 && df.length > 0) { const significantTermGroups = getSignificantTermGroups( df, - significantTerms, + [...significantTerms, ...significantCategories], fields ); @@ -555,7 +620,7 @@ export const defineLogRateAnalysisRoute = ( return; } const histogram = - overallTimeSeries.data.map((o, i) => { + overallTimeSeries.data.map((o) => { const current = cpgTimeSeries.data.find( (d1) => d1.key_as_string === o.key_as_string ) ?? { @@ -657,7 +722,7 @@ export const defineLogRateAnalysisRoute = ( } const histogram = - overallTimeSeries.data.map((o, i) => { + overallTimeSeries.data.map((o) => { const current = cpTimeSeries.data.find( (d1) => d1.key_as_string === o.key_as_string ) ?? { @@ -673,7 +738,7 @@ export const defineLogRateAnalysisRoute = ( const { fieldName, fieldValue } = cp; - loaded += (1 / significantTerms.length) * PROGRESS_STEP_HISTOGRAMS; + loaded += (1 / fieldValuePairsCount) * PROGRESS_STEP_HISTOGRAMS; pushHistogramDataLoadingState(); push( addSignificantTermsHistogramAction([ @@ -691,6 +756,90 @@ export const defineLogRateAnalysisRoute = ( await fieldValueHistogramQueue.drain(); } + // histograms for text field patterns + if (overallTimeSeries !== undefined && significantCategories.length > 0) { + const significantCategoriesHistogramQueries = significantCategories.map((d) => { + const histogramQuery = getHistogramQuery(request.body); + const categoryQuery = getCategoryQuery(d.fieldName, [ + { key: `${d.key}`, count: d.doc_count, examples: [] }, + ]); + if (Array.isArray(histogramQuery.bool?.filter)) { + histogramQuery.bool?.filter?.push(categoryQuery); + } + return histogramQuery; + }); + + for (const [i, histogramQuery] of significantCategoriesHistogramQueries.entries()) { + const cp = significantCategories[i]; + let catTimeSeries: NumericChartData; + + try { + catTimeSeries = ( + (await fetchHistogramsForFields( + client, + request.body.index, + histogramQuery, + // fields + [ + { + fieldName: request.body.timeFieldName, + type: KBN_FIELD_TYPES.DATE, + interval: overallTimeSeries.interval, + min: overallTimeSeries.stats[0], + max: overallTimeSeries.stats[1], + }, + ], + // samplerShardSize + -1, + undefined, + abortSignal, + sampleProbability, + RANDOM_SAMPLER_SEED + )) as [NumericChartData] + )[0]; + } catch (e) { + logger.error( + `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${ + cp.fieldValue + }", got: \n${e.toString()}` + ); + pushError( + `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${cp.fieldValue}".` + ); + return; + } + + const histogram = + overallTimeSeries.data.map((o) => { + const current = catTimeSeries.data.find( + (d1) => d1.key_as_string === o.key_as_string + ) ?? { + doc_count: 0, + }; + return { + key: o.key, + key_as_string: o.key_as_string ?? '', + doc_count_significant_term: current.doc_count, + doc_count_overall: Math.max(0, o.doc_count - current.doc_count), + }; + }) ?? []; + + const { fieldName, fieldValue } = cp; + + loaded += (1 / fieldValuePairsCount) * PROGRESS_STEP_HISTOGRAMS; + pushHistogramDataLoadingState(); + push( + addSignificantTermsHistogramAction([ + { + fieldName, + fieldValue, + histogram, + }, + ]) + ); + } + } + endWithUpdatedLoadingState(); } catch (e) { if (!isRequestAbortedError(e)) { diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts new file mode 100644 index 0000000000000..dd72e21990150 --- /dev/null +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts @@ -0,0 +1,149 @@ +/* + * Copyright 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 { get } from 'lodash'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { ElasticsearchClient } from '@kbn/core/server'; +import type { Logger } from '@kbn/logging'; +import { + createRandomSamplerWrapper, + type RandomSamplerWrapper, +} from '@kbn/ml-random-sampler-utils'; + +import { RANDOM_SAMPLER_SEED } from '../../../common/constants'; +import type { AiopsLogRateAnalysisSchema } from '../../../common/api/log_rate_analysis'; +import { createCategoryRequest } from '../../../common/api/log_categorization/create_category_request'; +import type { + Category, + CategoriesAgg, + SparkLinesPerCategory, +} from '../../../common/api/log_categorization/types'; + +import { isRequestAbortedError } from '../../lib/is_request_aborted_error'; + +import { getQueryWithParams } from './get_query_with_params'; + +export const getCategoryRequest = ( + params: AiopsLogRateAnalysisSchema, + fieldName: string, + from: number | undefined, + to: number | undefined, + { wrap }: RandomSamplerWrapper +): estypes.SearchRequest => { + const { index, timeFieldName } = params; + const query = getQueryWithParams({ + params, + }); + const { params: request } = createCategoryRequest( + index, + fieldName, + timeFieldName, + from, + to, + query, + wrap + ); + + return request; +}; + +export interface FetchCategoriesResponse { + categories: Category[]; + sparkLinesPerCategory: SparkLinesPerCategory; +} + +export const fetchCategories = async ( + esClient: ElasticsearchClient, + params: AiopsLogRateAnalysisSchema, + fieldNames: string[], + from: number | undefined, + to: number | undefined, + logger: Logger, + // The default value of 1 means no sampling will be used + sampleProbability: number = 1, + emitError: (m: string) => void, + abortSignal?: AbortSignal +): Promise => { + const randomSamplerWrapper = createRandomSamplerWrapper({ + probability: sampleProbability, + seed: RANDOM_SAMPLER_SEED, + }); + + const result: FetchCategoriesResponse[] = []; + + const settledPromises = await Promise.allSettled( + fieldNames.map((fieldName) => { + const request = getCategoryRequest(params, fieldName, from, to, randomSamplerWrapper); + return esClient.search(request, { + signal: abortSignal, + maxRetries: 0, + }); + }) + ); + + function reportError(fieldName: string, error: unknown) { + if (!isRequestAbortedError(error)) { + logger.error( + `Failed to fetch category aggregation for fieldName "${fieldName}", got: \n${JSON.stringify( + error, + null, + 2 + )}` + ); + emitError(`Failed to fetch category aggregation for fieldName "${fieldName}".`); + } + } + + for (const [index, settledPromise] of settledPromises.entries()) { + const fieldName = fieldNames[index]; + + if (settledPromise.status === 'rejected') { + reportError(fieldName, settledPromise.reason); + // Still continue the analysis even if individual category queries fail. + continue; + } + + const resp = settledPromise.value; + const { aggregations } = resp; + + if (aggregations === undefined) { + reportError(fieldName, resp); + // Still continue the analysis even if individual category queries fail. + continue; + } + + const sparkLinesPerCategory: SparkLinesPerCategory = {}; + const { + categories: { buckets }, + } = randomSamplerWrapper.unwrap( + aggregations as unknown as Record + ) as CategoriesAgg; + + const categories: Category[] = buckets.map((b) => { + sparkLinesPerCategory[b.key] = + b.sparkline === undefined + ? {} + : b.sparkline.buckets.reduce>((acc2, cur2) => { + acc2[cur2.key] = cur2.doc_count; + return acc2; + }, {}); + + return { + key: b.key, + count: b.doc_count, + examples: b.hit.hits.hits.map((h) => get(h._source, fieldName)), + }; + }); + result.push({ + categories, + sparkLinesPerCategory, + }); + } + + return result; +}; diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_category_counts.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_category_counts.ts new file mode 100644 index 0000000000000..f27d2190a8ca6 --- /dev/null +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_category_counts.ts @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { cloneDeep } from 'lodash'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { ElasticsearchClient } from '@kbn/core/server'; +import type { Logger } from '@kbn/logging'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; + +import type { AiopsLogRateAnalysisSchema } from '../../../common/api/log_rate_analysis'; +import { getCategoryQuery } from '../../../common/api/log_categorization/get_category_query'; +import type { Category } from '../../../common/api/log_categorization/types'; + +import { isRequestAbortedError } from '../../lib/is_request_aborted_error'; + +import { getQueryWithParams } from './get_query_with_params'; +import type { FetchCategoriesResponse } from './fetch_categories'; + +const isMsearchResponseItem = (arg: unknown): arg is estypes.MsearchMultiSearchItem => + isPopulatedObject(arg, ['hits']); + +export const getCategoryCountRequest = ( + params: AiopsLogRateAnalysisSchema, + fieldName: string, + category: Category, + from: number | undefined, + to: number | undefined +): estypes.SearchRequest => { + const { index } = params; + + const query = getQueryWithParams({ + params, + }); + + const categoryQuery = getCategoryQuery(fieldName, [category]); + + if (Array.isArray(query.bool?.filter)) { + query.bool?.filter?.push(categoryQuery); + query.bool?.filter?.push({ + range: { + [params.timeFieldName]: { + gte: from, + lte: to, + format: 'epoch_millis', + }, + }, + }); + } + + return { + index, + body: { + query, + size: 0, + track_total_hits: true, + }, + }; +}; + +export const fetchCategoryCounts = async ( + esClient: ElasticsearchClient, + params: AiopsLogRateAnalysisSchema, + fieldName: string, + categories: FetchCategoriesResponse, + from: number | undefined, + to: number | undefined, + logger: Logger, + emitError: (m: string) => void, + abortSignal?: AbortSignal +): Promise => { + const updatedCategories = cloneDeep(categories); + + const searches = categories.categories.flatMap((category) => [ + { index: params.index }, + getCategoryCountRequest(params, fieldName, category, from, to) + .body as estypes.MsearchMultisearchBody, + ]); + + let mSearchresponse; + + try { + mSearchresponse = await esClient.msearch( + { searches }, + { + signal: abortSignal, + maxRetries: 0, + } + ); + } catch (error) { + if (!isRequestAbortedError(error)) { + logger.error( + `Failed to fetch category counts for field name "${fieldName}", got: \n${JSON.stringify( + error, + null, + 2 + )}` + ); + emitError(`Failed to fetch category counts for field name "${fieldName}".`); + } + return updatedCategories; + } + + for (const [index, resp] of mSearchresponse.responses.entries()) { + if (isMsearchResponseItem(resp)) { + updatedCategories.categories[index].count = + (resp.hits.total as estypes.SearchTotalHits).value ?? 0; + } else { + logger.error( + `Failed to fetch category count for category "${ + updatedCategories.categories[index].key + }", got: \n${JSON.stringify(resp, null, 2)}` + ); + emitError( + `Failed to fetch category count for category "${updatedCategories.categories[index].key}".` + ); + } + } + + return updatedCategories; +}; diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_index_info.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_index_info.ts index c44d2f99eb95f..08c510405e32c 100644 --- a/x-pack/plugins/aiops/server/routes/queries/fetch_index_info.ts +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_index_info.ts @@ -26,6 +26,8 @@ const SUPPORTED_ES_FIELD_TYPES = [ ES_FIELD_TYPES.BOOLEAN, ]; +const SUPPORTED_ES_FIELD_TYPES_TEXT = [ES_FIELD_TYPES.TEXT, ES_FIELD_TYPES.MATCH_ONLY_TEXT]; + export const getRandomDocsRequest = ( params: AiopsLogRateAnalysisSchema ): estypes.SearchRequest => ({ @@ -46,11 +48,18 @@ export const getRandomDocsRequest = ( }, }); +interface IndexInfo { + fieldCandidates: string[]; + textFieldCandidates: string[]; + totalDocCount: number; +} + export const fetchIndexInfo = async ( esClient: ElasticsearchClient, params: AiopsLogRateAnalysisSchema, + textFieldCandidatesOverrides: string[] = [], abortSignal?: AbortSignal -): Promise<{ fieldCandidates: string[]; totalDocCount: number }> => { +): Promise => { const { index } = params; // Get all supported fields const respMapping = await esClient.fieldCaps( @@ -61,18 +70,29 @@ export const fetchIndexInfo = async ( { signal: abortSignal, maxRetries: 0 } ); + const allFieldNames: string[] = []; + const finalFieldCandidates: Set = new Set([]); + const finalTextFieldCandidates: Set = new Set([]); const acceptableFields: Set = new Set(); + const acceptableTextFields: Set = new Set(); Object.entries(respMapping.fields).forEach(([key, value]) => { const fieldTypes = Object.keys(value) as ES_FIELD_TYPES[]; const isSupportedType = fieldTypes.some((type) => SUPPORTED_ES_FIELD_TYPES.includes(type)); const isAggregatable = fieldTypes.some((type) => value[type].aggregatable); + const isTextField = fieldTypes.some((type) => SUPPORTED_ES_FIELD_TYPES_TEXT.includes(type)); // Check if fieldName is something we can aggregate on if (isSupportedType && isAggregatable) { acceptableFields.add(key); } + + if (isTextField) { + acceptableTextFields.add(key); + } + + allFieldNames.push(key); }); // Only the deviation window will be used to identify field candidates and sample probability based on total doc count. @@ -85,16 +105,33 @@ export const fetchIndexInfo = async ( ); const sampledDocs = resp.hits.hits.map((d) => d.fields ?? {}); + const textFieldCandidatesOverridesWithKeywordPostfix = textFieldCandidatesOverrides.map( + (d) => `${d}.keyword` + ); + // Get all field names for each returned doc and flatten it // to a list of unique field names used across all docs // and filter by list of acceptable fields. [...new Set(sampledDocs.map(Object.keys).flat(1))].forEach((field) => { - if (acceptableFields.has(field)) { + if ( + acceptableFields.has(field) && + !textFieldCandidatesOverridesWithKeywordPostfix.includes(field) + ) { finalFieldCandidates.add(field); } + if ( + acceptableTextFields.has(field) && + (!allFieldNames.includes(`${field}.keyword`) || textFieldCandidatesOverrides.includes(field)) + ) { + finalTextFieldCandidates.add(field); + } }); const totalDocCount = (resp.hits.total as estypes.SearchTotalHits).value; - return { fieldCandidates: [...finalFieldCandidates], totalDocCount }; + return { + fieldCandidates: [...finalFieldCandidates], + textFieldCandidates: [...finalTextFieldCandidates], + totalDocCount, + }; }; diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_significant_categories.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_significant_categories.ts new file mode 100644 index 0000000000000..84e99f820bfb4 --- /dev/null +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_significant_categories.ts @@ -0,0 +1,139 @@ +/* + * Copyright 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 { uniq } from 'lodash'; + +import { ElasticsearchClient } from '@kbn/core/server'; +import type { Logger } from '@kbn/logging'; +import { criticalTableLookup, type Histogram } from '@kbn/ml-chi2test'; +import { type SignificantTerm, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; + +import type { Category } from '../../../common/api/log_categorization/types'; +import type { AiopsLogRateAnalysisSchema } from '../../../common/api/log_rate_analysis'; +import { LOG_RATE_ANALYSIS_P_VALUE_THRESHOLD } from '../../../common/constants'; + +import { fetchCategories } from './fetch_categories'; +import { fetchCategoryCounts } from './fetch_category_counts'; +import { getNormalizedScore } from './get_normalized_score'; + +const getCategoriesTestData = (categories: Category[]): Histogram[] => { + const categoriesBaselineTotalCount = getCategoriesTotalCount(categories); + return categories.map((d) => ({ + key: d.key, + doc_count: d.count, + percentage: d.count / categoriesBaselineTotalCount, + })); +}; + +const getCategoriesTotalCount = (categories: Category[]): number => + categories.reduce((p, c) => p + c.count, 0); + +export const fetchSignificantCategories = async ( + esClient: ElasticsearchClient, + params: AiopsLogRateAnalysisSchema, + fieldNames: string[], + logger: Logger, + // The default value of 1 means no sampling will be used + sampleProbability: number = 1, + emitError: (m: string) => void, + abortSignal?: AbortSignal +) => { + // To make sure we have the same categories for both baseline and deviation, + // we do an initial query that spans across baseline start and deviation end. + // We could update this to query the exact baseline AND deviation range, but + // wanted to avoid the refactor here and it should be good enough for a start. + const categoriesOverall = await fetchCategories( + esClient, + params, + fieldNames, + params.baselineMin, + params.deviationMax, + logger, + sampleProbability, + emitError, + abortSignal + ); + + if (categoriesOverall.length !== fieldNames.length) return []; + + const significantCategories: SignificantTerm[] = []; + + // Using for...of to allow `await` within the loop. + for (const [i, fieldName] of fieldNames.entries()) { + if (categoriesOverall[i].categories.length === 0) { + continue; + } + + const categoriesBaseline = await fetchCategoryCounts( + esClient, + params, + fieldName, + categoriesOverall[i], + params.baselineMin, + params.baselineMax, + logger, + emitError, + abortSignal + ); + + const categoriesDeviation = await fetchCategoryCounts( + esClient, + params, + fieldName, + categoriesOverall[i], + params.deviationMin, + params.deviationMax, + logger, + emitError, + abortSignal + ); + + const categoriesBaselineTotalCount = getCategoriesTotalCount(categoriesBaseline.categories); + const categoriesBaselineTestData = getCategoriesTestData(categoriesBaseline.categories); + + const categoriesDeviationTotalCount = getCategoriesTotalCount(categoriesDeviation.categories); + const categoriesDeviationTestData = getCategoriesTestData(categoriesDeviation.categories); + + // Get all unique keys from both arrays + const allKeys: string[] = uniq([ + ...categoriesBaselineTestData.map((term) => term.key.toString()), + ...categoriesDeviationTestData.map((term) => term.key.toString()), + ]); + + allKeys.forEach((key) => { + const categoryData = categoriesOverall[i].categories.find((c) => c.key === key); + + const baselineTerm = categoriesBaselineTestData.find((term) => term.key === key); + const deviationTerm = categoriesDeviationTestData.find((term) => term.key === key); + + const observed: number = deviationTerm?.percentage ?? 0; + const expected: number = baselineTerm?.percentage ?? 0; + const chiSquared = Math.pow(observed - expected, 2) / (expected > 0 ? expected : 1e-6); // Prevent divide by zero + + const pValue = criticalTableLookup(chiSquared, 1); + const score = Math.log(pValue); + + if (pValue <= LOG_RATE_ANALYSIS_P_VALUE_THRESHOLD && observed > expected) { + significantCategories.push({ + key, + fieldName, + fieldValue: categoryData?.examples[0] ?? '', + doc_count: deviationTerm?.doc_count ?? 0, + bg_count: baselineTerm?.doc_count ?? 0, + total_doc_count: categoriesDeviationTotalCount, + total_bg_count: categoriesBaselineTotalCount, + score, + pValue, + normalizedScore: getNormalizedScore(score), + type: SIGNIFICANT_TERM_TYPE.LOG_PATTERN, + }); + } + }); + } + + return significantCategories; +}; diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_significant_term_p_values.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_significant_term_p_values.ts index 9aa26c5d12ec9..85a21e6870a03 100644 --- a/x-pack/plugins/aiops/server/routes/queries/fetch_significant_term_p_values.ts +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_significant_term_p_values.ts @@ -9,7 +9,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; -import { type SignificantTerm } from '@kbn/ml-agg-utils'; +import { type SignificantTerm, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; import { createRandomSamplerWrapper, type RandomSamplerWrapper, @@ -23,6 +23,7 @@ import type { AiopsLogRateAnalysisSchema } from '../../../common/api/log_rate_an import { isRequestAbortedError } from '../../lib/is_request_aborted_error'; +import { getNormalizedScore } from './get_normalized_score'; import { getQueryWithParams } from './get_query_with_params'; import { getRequestBase } from './get_request_base'; @@ -42,7 +43,7 @@ export const getSignificantTermRequest = ( let filter: estypes.QueryDslQueryContainer[] = []; - if (Array.isArray(query.bool.filter)) { + if (query.bool && Array.isArray(query.bool.filter)) { filter = query.bool.filter.filter((d) => Object.keys(d)[0] !== 'range'); query.bool.filter = [ @@ -167,15 +168,10 @@ export const fetchSignificantTermPValues = async ( for (const bucket of overallResult.buckets) { const pValue = Math.exp(-bucket.score); - // Scale the score into a value from 0 - 1 - // using a concave piecewise linear function in -log(p-value) - const normalizedScore = - 0.5 * Math.min(Math.max((bucket.score - 3.912) / 2.995, 0), 1) + - 0.25 * Math.min(Math.max((bucket.score - 6.908) / 6.908, 0), 1) + - 0.25 * Math.min(Math.max((bucket.score - 13.816) / 101.314, 0), 1); - if (typeof pValue === 'number' && pValue < LOG_RATE_ANALYSIS_P_VALUE_THRESHOLD) { result.push({ + key: `${fieldName}:${String(bucket.key)}`, + type: SIGNIFICANT_TERM_TYPE.KEYWORD, fieldName, fieldValue: String(bucket.key), doc_count: bucket.doc_count, @@ -184,7 +180,7 @@ export const fetchSignificantTermPValues = async ( total_bg_count: overallResult.bg_count, score: bucket.score, pValue, - normalizedScore, + normalizedScore: getNormalizedScore(bucket.score), }); } } diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_terms_2_categories_counts.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_terms_2_categories_counts.ts new file mode 100644 index 0000000000000..1fdeaef5e18c3 --- /dev/null +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_terms_2_categories_counts.ts @@ -0,0 +1,150 @@ +/* + * Copyright 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 { uniq } from 'lodash'; + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { Logger } from '@kbn/logging'; +import { type SignificantTerm } from '@kbn/ml-agg-utils'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; + +import type { AiopsLogRateAnalysisSchema } from '../../../common/api/log_rate_analysis'; +import type { ItemsetResult } from '../../../common/types'; +import { getCategoryQuery } from '../../../common/api/log_categorization/get_category_query'; +import type { Category } from '../../../common/api/log_categorization/types'; + +import { isRequestAbortedError } from '../../lib/is_request_aborted_error'; + +import { getQueryWithParams } from './get_query_with_params'; + +const isMsearchResponseItem = (arg: unknown): arg is estypes.MsearchMultiSearchItem => + isPopulatedObject(arg, ['hits']); + +export const getTerm2CategoryCountRequest = ( + params: AiopsLogRateAnalysisSchema, + significantTerm: SignificantTerm, + categoryFieldName: string, + category: Category, + from: number | undefined, + to: number | undefined +): estypes.SearchRequest['body'] => { + const query = getQueryWithParams({ + params, + }); + + const categoryQuery = getCategoryQuery(categoryFieldName, [category]); + + if (Array.isArray(query.bool?.filter)) { + query.bool?.filter?.push({ term: { [significantTerm.fieldName]: significantTerm.fieldValue } }); + query.bool?.filter?.push(categoryQuery); + query.bool?.filter?.push({ + range: { + [params.timeFieldName]: { + gte: from, + lte: to, + format: 'epoch_millis', + }, + }, + }); + } + + return { + query, + size: 0, + track_total_hits: true, + }; +}; + +export async function fetchTerms2CategoriesCounts( + esClient: ElasticsearchClient, + params: AiopsLogRateAnalysisSchema, + searchQuery: estypes.QueryDslQueryContainer, + significantTerms: SignificantTerm[], + significantCategories: SignificantTerm[], + from: number, + to: number, + logger: Logger, + emitError: (m: string) => void, + abortSignal?: AbortSignal +) { + const searches: Array< + | estypes.MsearchMultisearchBody + | { + index: string; + } + > = []; + const results: ItemsetResult[] = []; + + significantTerms.forEach((term) => { + significantCategories.forEach((category) => { + searches.push({ index: params.index }); + searches.push( + getTerm2CategoryCountRequest( + params, + term, + category.fieldName, + { key: `${category.key}`, count: category.doc_count, examples: [] }, + from, + to + ) as estypes.MsearchMultisearchBody + ); + results.push({ + set: { + [term.fieldName]: term.fieldValue, + [category.fieldName]: category.fieldValue, + }, + size: 2, + maxPValue: Math.max(term.pValue ?? 1, category.pValue ?? 1), + doc_count: 0, + support: 1, + total_doc_count: 0, + }); + }); + }); + + let mSearchresponse; + + try { + mSearchresponse = await esClient.msearch( + { searches }, + { + signal: abortSignal, + maxRetries: 0, + } + ); + } catch (error) { + if (!isRequestAbortedError(error)) { + logger.error( + `Failed to fetch term/category counts, got: \n${JSON.stringify(error, null, 2)}` + ); + emitError(`Failed to fetch term/category counts.`); + } + return { + fields: [], + df: [], + totalDocCount: 0, + }; + } + + const mSearchResponses = mSearchresponse.responses; + + return { + fields: uniq(significantCategories.map((c) => c.fieldName)), + df: results + .map((result, i) => { + const resp = mSearchResponses[i]; + if (isMsearchResponseItem(resp)) { + result.doc_count = (resp.hits.total as estypes.SearchTotalHits).value ?? 0; + } + return result; + }) + .filter((d) => d.doc_count > 0), + totalDocCount: 0, + }; +} diff --git a/x-pack/plugins/aiops/server/routes/queries/get_field_value_pair_counts.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_field_value_pair_counts.test.ts index 8ad6142e70c0a..a762c04f14810 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_field_value_pair_counts.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_field_value_pair_counts.test.ts @@ -8,6 +8,7 @@ import { significantTermGroups } from '../../../common/__mocks__/farequote/significant_term_groups'; import { fields } from '../../../common/__mocks__/artificial_logs/fields'; import { filteredFrequentItemSets } from '../../../common/__mocks__/artificial_logs/filtered_frequent_item_sets'; +import { significantTerms } from '../../../common/__mocks__/artificial_logs/significant_terms'; import { getFieldValuePairCounts } from './get_field_value_pair_counts'; import { getSimpleHierarchicalTree } from './get_simple_hierarchical_tree'; @@ -33,6 +34,7 @@ describe('getFieldValuePairCounts', () => { filteredFrequentItemSets, true, false, + significantTerms, fields ); const leaves = getSimpleHierarchicalTreeLeaves(simpleHierarchicalTree.root, []); diff --git a/x-pack/plugins/aiops/server/routes/queries/get_group_filter.ts b/x-pack/plugins/aiops/server/routes/queries/get_group_filter.ts index b6d780310df83..86fd60b9fe8b0 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_group_filter.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_group_filter.ts @@ -7,7 +7,9 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { SignificantTermGroup } from '@kbn/ml-agg-utils'; +import { type SignificantTermGroup, SIGNIFICANT_TERM_TYPE } from '@kbn/ml-agg-utils'; + +import { getCategoryQuery } from '../../../common/api/log_categorization/get_category_query'; // Transforms a list of significant terms from a group in a query filter. // Uses a `term` filter for single field value combinations. @@ -17,17 +19,33 @@ import type { SignificantTermGroup } from '@kbn/ml-agg-utils'; export function getGroupFilter( significantTermGroup: SignificantTermGroup ): estypes.QueryDslQueryContainer[] { - return Object.entries( - significantTermGroup.group.reduce>>((p, c) => { - if (p[c.fieldName]) { - p[c.fieldName].push(c.fieldValue); - } else { - p[c.fieldName] = [c.fieldValue]; - } - return p; - }, {}) + const groupKeywordFilter = Object.entries( + significantTermGroup.group + .filter((d) => d.type === SIGNIFICANT_TERM_TYPE.KEYWORD) + .reduce>>((p, c) => { + if (p[c.fieldName]) { + p[c.fieldName].push(c.fieldValue); + } else { + p[c.fieldName] = [c.fieldValue]; + } + return p; + }, {}) ).reduce((p, [key, values]) => { p.push(values.length > 1 ? { terms: { [key]: values } } : { term: { [key]: values[0] } }); return p; }, []); + + const groupLogPatternFilter = significantTermGroup.group + .filter((d) => d.type === SIGNIFICANT_TERM_TYPE.LOG_PATTERN) + .map((d) => + getCategoryQuery(d.fieldName, [ + { + key: d.key, + count: d.docCount, + examples: [], + }, + ]) + ); + + return [...groupKeywordFilter, ...groupLogPatternFilter]; } diff --git a/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.test.ts index 2842b05d80621..c0a2da80a080b 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.test.ts @@ -32,6 +32,8 @@ describe('getGroupsWithReaddedDuplicates', () => { docCount: 792, group: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', duplicate: 1, @@ -39,6 +41,8 @@ describe('getGroupsWithReaddedDuplicates', () => { pValue: 2.9589053032077285e-12, }, { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', duplicate: 1, diff --git a/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.ts b/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.ts index fbc9909e2194e..e6afb5e52ab53 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_groups_with_readded_duplicates.ts @@ -30,6 +30,8 @@ export function getGroupsWithReaddedDuplicates( group.push( ...duplicates.group.map((d) => { return { + key: d.key, + type: d.type, fieldName: d.fieldName, fieldValue: d.fieldValue, pValue: d.pValue, diff --git a/x-pack/plugins/aiops/server/routes/queries/get_histogram_query.ts b/x-pack/plugins/aiops/server/routes/queries/get_histogram_query.ts index dceab338947f7..ad99a967894f6 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_histogram_query.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_histogram_query.ts @@ -19,7 +19,7 @@ export function getHistogramQuery( params, }); - if (Array.isArray(histogramQuery.bool.filter)) { + if (histogramQuery.bool && Array.isArray(histogramQuery.bool.filter)) { const existingFilter = histogramQuery.bool.filter.filter((d) => Object.keys(d)[0] !== 'range'); histogramQuery.bool.filter = [ diff --git a/x-pack/plugins/aiops/server/routes/queries/get_marked_duplicates.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_marked_duplicates.test.ts index d3ea95b5e1263..694767a17b55d 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_marked_duplicates.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_marked_duplicates.test.ts @@ -8,6 +8,7 @@ import { significantTermGroups } from '../../../common/__mocks__/farequote/significant_term_groups'; import { fields } from '../../../common/__mocks__/artificial_logs/fields'; import { filteredFrequentItemSets } from '../../../common/__mocks__/artificial_logs/filtered_frequent_item_sets'; +import { significantTerms } from '../../../common/__mocks__/artificial_logs/significant_terms'; import { getFieldValuePairCounts } from './get_field_value_pair_counts'; import { getMarkedDuplicates } from './get_marked_duplicates'; @@ -24,6 +25,8 @@ describe('markDuplicates', () => { id: 'group-1', group: [ { + key: 'custom_field.keyword:deviation', + type: 'keyword', fieldName: 'custom_field.keyword', fieldValue: 'deviation', docCount: 101, @@ -31,6 +34,8 @@ describe('markDuplicates', () => { pValue: 0.01, }, { + key: 'airline:UAL', + type: 'keyword', fieldName: 'airline', fieldValue: 'UAL', docCount: 101, @@ -45,6 +50,8 @@ describe('markDuplicates', () => { id: 'group-2', group: [ { + key: 'custom_field.keyword:deviation', + type: 'keyword', fieldName: 'custom_field.keyword', fieldValue: 'deviation', docCount: 49, @@ -52,6 +59,8 @@ describe('markDuplicates', () => { pValue: 0.001, }, { + key: 'airline:AAL', + type: 'keyword', fieldName: 'airline', fieldValue: 'AAL', docCount: 49, @@ -70,6 +79,7 @@ describe('markDuplicates', () => { filteredFrequentItemSets, true, false, + significantTerms, fields ); const leaves = getSimpleHierarchicalTreeLeaves(simpleHierarchicalTree.root, []); @@ -78,9 +88,11 @@ describe('markDuplicates', () => { expect(markedDuplicates).toEqual([ { - id: '40215074', + id: '3189595908', group: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', docCount: 792, @@ -88,6 +100,8 @@ describe('markDuplicates', () => { pValue: 0.010770456205312423, }, { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', docCount: 792, @@ -99,9 +113,11 @@ describe('markDuplicates', () => { pValue: 0.010770456205312423, }, { - id: '47022118', + id: '715957062', group: [ { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', docCount: 792, @@ -109,6 +125,8 @@ describe('markDuplicates', () => { pValue: 0.010770456205312423, }, { + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', docCount: 634, diff --git a/x-pack/plugins/aiops/server/routes/queries/get_missing_significant_terms.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_missing_significant_terms.test.ts index 5da659dd58631..e721143ad150c 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_missing_significant_terms.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_missing_significant_terms.test.ts @@ -35,6 +35,8 @@ describe('getMissingSignificantTerms', () => { expect(missingSignificantTerms).toEqual([ { + key: 'user:Peter', + type: 'keyword', bg_count: 553, doc_count: 1981, fieldName: 'user', @@ -46,6 +48,8 @@ describe('getMissingSignificantTerms', () => { total_doc_count: 4669, }, { + key: 'url:login.php', + type: 'keyword', bg_count: 632, doc_count: 1738, fieldName: 'url', diff --git a/x-pack/plugins/aiops/server/routes/queries/get_normalized_score.ts b/x-pack/plugins/aiops/server/routes/queries/get_normalized_score.ts new file mode 100644 index 0000000000000..55de9c15c839c --- /dev/null +++ b/x-pack/plugins/aiops/server/routes/queries/get_normalized_score.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// Scale the score into a value from 0 - 1 +// using a concave piecewise linear function in -log(p-value) +export const getNormalizedScore = (score: number): number => + 0.5 * Math.min(Math.max((score - 3.912) / 2.995, 0), 1) + + 0.25 * Math.min(Math.max((score - 6.908) / 6.908, 0), 1) + + 0.25 * Math.min(Math.max((score - 13.816) / 101.314, 0), 1); diff --git a/x-pack/plugins/aiops/server/routes/queries/get_query_with_params.ts b/x-pack/plugins/aiops/server/routes/queries/get_query_with_params.ts index d93f34892f7d7..6c95085b379be 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_query_with_params.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_query_with_params.ts @@ -21,7 +21,10 @@ interface QueryParams { params: AiopsLogRateAnalysisSchema; termFilters?: FieldValuePair[]; } -export const getQueryWithParams = ({ params, termFilters }: QueryParams) => { +export const getQueryWithParams = ({ + params, + termFilters, +}: QueryParams): estypes.QueryDslQueryContainer => { const searchQuery = JSON.parse(params.searchQuery) as estypes.QueryDslQueryContainer; return { bool: { diff --git a/x-pack/plugins/aiops/server/routes/queries/get_significant_term_groups.ts b/x-pack/plugins/aiops/server/routes/queries/get_significant_term_groups.ts index 796463c554779..74951bf7aa1d9 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_significant_term_groups.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_significant_term_groups.ts @@ -33,7 +33,7 @@ export function getSignificantTermGroups( // and then summarize them in larger groups where possible. // Get a tree structure based on `frequent_item_sets`. - const { root } = getSimpleHierarchicalTree(itemsets, false, false, fields); + const { root } = getSimpleHierarchicalTree(itemsets, false, false, significantTerms, fields); // Each leave of the tree will be a summarized group of co-occuring field/value pairs. const treeLeaves = getSimpleHierarchicalTreeLeaves(root, []); diff --git a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.test.ts index 8023e95b880b3..1713e677c2b14 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.test.ts @@ -7,6 +7,7 @@ import { fields } from '../../../common/__mocks__/artificial_logs/fields'; import { filteredFrequentItemSets } from '../../../common/__mocks__/artificial_logs/filtered_frequent_item_sets'; +import { significantTerms } from '../../../common/__mocks__/artificial_logs/significant_terms'; import { getSimpleHierarchicalTree } from './get_simple_hierarchical_tree'; @@ -16,7 +17,9 @@ describe('getSimpleHierarchicalTree', () => { // and make it comparable against a static representation. expect( JSON.parse( - JSON.stringify(getSimpleHierarchicalTree(filteredFrequentItemSets, true, false, fields)) + JSON.stringify( + getSimpleHierarchicalTree(filteredFrequentItemSets, true, false, significantTerms, fields) + ) ) ).toEqual({ root: { @@ -29,12 +32,16 @@ describe('getSimpleHierarchicalTree', () => { name: "792/1505 500 home.php '*'", set: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', docCount: 792, pValue: 0.010770456205312423, }, { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', docCount: 792, @@ -48,12 +55,16 @@ describe('getSimpleHierarchicalTree', () => { name: "792/1505 500 home.php '*'", set: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', docCount: 792, pValue: 0.010770456205312423, }, { + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', docCount: 792, @@ -75,15 +86,19 @@ describe('getSimpleHierarchicalTree', () => { pValue: 0.010770456205312423, set: [ { - docCount: 792, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, pValue: 0.010770456205312423, }, { - docCount: 634, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 634, pValue: 0.010770456205312423, }, ], @@ -94,9 +109,11 @@ describe('getSimpleHierarchicalTree', () => { pValue: 0.010770456205312423, set: [ { - docCount: 792, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, pValue: 0.010770456205312423, }, ], @@ -108,9 +125,11 @@ describe('getSimpleHierarchicalTree', () => { pValue: 0.010770456205312423, set: [ { - docCount: 634, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 634, pValue: 0.010770456205312423, }, ], diff --git a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.ts b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.ts index fb5ded672d284..2462878798322 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree.ts @@ -5,6 +5,8 @@ * 2.0. */ +import type { SignificantTerm } from '@kbn/ml-agg-utils'; + import type { ItemsetResult, SimpleHierarchicalTreeNode } from '../../../common/types'; import { getValueCounts } from './get_value_counts'; @@ -32,6 +34,8 @@ function NewNodeFactory(name: string): SimpleHierarchicalTreeNode { * The resulting tree components are non-overlapping subsets of the data. * In summary, we start with the most inclusive itemset (highest count), and perform a depth first search in field order. * + * @param significantTerms + * @param fields * @param displayParent * @param parentDocCount * @param parentLabel @@ -43,6 +47,7 @@ function NewNodeFactory(name: string): SimpleHierarchicalTreeNode { * @returns */ function dfDepthFirstSearch( + significantTerms: SignificantTerm[], fields: string[], displayParent: SimpleHierarchicalTreeNode, parentDocCount: number, @@ -73,17 +78,40 @@ function dfDepthFirstSearch( let label = `${parentLabel} ${value}`; let displayNode: SimpleHierarchicalTreeNode; + + const significantTerm = significantTerms.find( + (d) => d.fieldName === field && d.fieldValue === value + ); + if (!significantTerm) { + return 0; + } + if (parentDocCount === docCount && collapseRedundant) { // collapse identical paths displayParent.name += ` ${value}`; - displayParent.set.push({ fieldName: field, fieldValue: value, docCount, pValue }); + + displayParent.set.push({ + key: significantTerm.key, + type: significantTerm.type, + fieldName: field, + fieldValue: value, + docCount, + pValue, + }); displayParent.docCount = docCount; displayParent.pValue = pValue; displayNode = displayParent; } else { displayNode = NewNodeFactory(`${docCount}/${totalDocCount}${label}`); displayNode.set = [...displayParent.set]; - displayNode.set.push({ fieldName: field, fieldValue: value, docCount, pValue }); + displayNode.set.push({ + key: significantTerm.key, + type: significantTerm.type, + fieldName: field, + fieldValue: value, + docCount, + pValue, + }); displayNode.docCount = docCount; displayNode.pValue = pValue; displayParent.addNode(displayNode); @@ -120,6 +148,7 @@ function dfDepthFirstSearch( let subCount = 0; for (const nextValue of getValuesDescending(filteredItemSets, nextField)) { subCount += dfDepthFirstSearch( + significantTerms, fields, displayNode, docCount, @@ -152,6 +181,7 @@ export function getSimpleHierarchicalTree( df: ItemsetResult[], collapseRedundant: boolean, displayOther: boolean, + significantTerms: SignificantTerm[], fields: string[] = [] ) { const totalDocCount = Math.max(...df.map((d) => d.total_doc_count)); @@ -161,6 +191,7 @@ export function getSimpleHierarchicalTree( for (const field of fields) { for (const value of getValuesDescending(df, field)) { dfDepthFirstSearch( + significantTerms, fields, newRoot, totalDocCount + 1, diff --git a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree_leaves.test.ts b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree_leaves.test.ts index fd3d40285bc6e..5ca23395c9815 100644 --- a/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree_leaves.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/get_simple_hierarchical_tree_leaves.test.ts @@ -7,6 +7,7 @@ import { fields } from '../../../common/__mocks__/artificial_logs/fields'; import { filteredFrequentItemSets } from '../../../common/__mocks__/artificial_logs/filtered_frequent_item_sets'; +import { significantTerms } from '../../../common/__mocks__/artificial_logs/significant_terms'; import { getSimpleHierarchicalTree } from './get_simple_hierarchical_tree'; import { getSimpleHierarchicalTreeLeaves } from './get_simple_hierarchical_tree_leaves'; @@ -17,37 +18,51 @@ describe('getSimpleHierarchicalTreeLeaves', () => { filteredFrequentItemSets, true, false, + significantTerms, fields ); const leaves = getSimpleHierarchicalTreeLeaves(simpleHierarchicalTree.root, []); expect(leaves).toEqual([ { - id: '40215074', + id: '3189595908', group: [ { + key: 'response_code:500', + type: 'keyword', fieldName: 'response_code', fieldValue: '500', docCount: 792, pValue: 0.010770456205312423, }, - { fieldName: 'url', fieldValue: 'home.php', docCount: 792, pValue: 0.010770456205312423 }, + { + key: 'url:home.php', + type: 'keyword', + fieldName: 'url', + fieldValue: 'home.php', + docCount: 792, + pValue: 0.010770456205312423, + }, ], docCount: 792, pValue: 0.010770456205312423, }, { - id: '47022118', + id: '715957062', group: [ { - docCount: 792, + key: 'url:home.php', + type: 'keyword', fieldName: 'url', fieldValue: 'home.php', + docCount: 792, pValue: 0.010770456205312423, }, { - docCount: 634, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 634, pValue: 0.010770456205312423, }, ], diff --git a/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.test.ts b/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.test.ts index ec86dbb47d81e..e22d6fcec784a 100644 --- a/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.test.ts +++ b/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.test.ts @@ -43,10 +43,12 @@ describe('getMissingSignificantTerms', () => { docCount: 1981, group: [ { - docCount: 1981, - duplicate: 1, + key: 'user:Peter', + type: 'keyword', fieldName: 'user', fieldValue: 'Peter', + docCount: 1981, + duplicate: 1, pValue: 2.62555579103777e-21, }, ], diff --git a/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.ts b/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.ts index 1ecf8d6d8422d..54ae0839c5c19 100644 --- a/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.ts +++ b/x-pack/plugins/aiops/server/routes/queries/transform_significant_term_to_group.ts @@ -6,15 +6,15 @@ */ import { stringHash } from '@kbn/ml-string-hash'; -import type { SignificantTerm } from '@kbn/ml-agg-utils'; +import type { SignificantTerm, SignificantTermGroup } from '@kbn/ml-agg-utils'; import type { SignificantTermDuplicateGroup } from '../../../common/types'; export function transformSignificantTermToGroup( significantTerm: SignificantTerm, groupedSignificantTerms: SignificantTermDuplicateGroup[] -) { - const { fieldName, fieldValue, doc_count: docCount, pValue } = significantTerm; +): SignificantTermGroup { + const { key, type, fieldName, fieldValue, doc_count: docCount, pValue } = significantTerm; const duplicates = groupedSignificantTerms.find((d) => d.group.some((dg) => dg.fieldName === fieldName && dg.fieldValue === fieldValue) @@ -31,6 +31,8 @@ export function transformSignificantTermToGroup( ) )}`, group: duplicates.group.map((d) => ({ + key: d.key, + type: d.type, fieldName: d.fieldName, fieldValue: d.fieldValue, duplicate: 1, @@ -45,6 +47,8 @@ export function transformSignificantTermToGroup( id: `${stringHash(JSON.stringify({ fieldName, fieldValue }))}`, group: [ { + key, + type, fieldName, fieldValue, duplicate: 1, diff --git a/x-pack/plugins/aiops/tsconfig.json b/x-pack/plugins/aiops/tsconfig.json index 6303a009bb36d..1c0095046c735 100644 --- a/x-pack/plugins/aiops/tsconfig.json +++ b/x-pack/plugins/aiops/tsconfig.json @@ -63,6 +63,7 @@ "@kbn/core-lifecycle-browser", "@kbn/cases-plugin", "@kbn/react-kibana-mount", + "@kbn/ml-chi2test", "@kbn/usage-collection-plugin", ], "exclude": [ diff --git a/x-pack/test/api_integration/apis/aiops/test_data.ts b/x-pack/test/api_integration/apis/aiops/test_data.ts index e9f42a002ac49..9ec8b69a3ca5d 100644 --- a/x-pack/test/api_integration/apis/aiops/test_data.ts +++ b/x-pack/test/api_integration/apis/aiops/test_data.ts @@ -43,6 +43,8 @@ export const logRateAnalysisTestData: TestData[] = [ errorFilter: 'add_error', significantTerms: [ { + key: 'day_of_week:Thursday', + type: 'keyword', fieldName: 'day_of_week', fieldValue: 'Thursday', doc_count: 157, @@ -54,6 +56,8 @@ export const logRateAnalysisTestData: TestData[] = [ normalizedScore: 0.7661649691018979, }, { + key: 'day_of_week:Wednesday', + type: 'keyword', fieldName: 'day_of_week', fieldValue: 'Wednesday', doc_count: 145, diff --git a/x-pack/test/functional/apps/aiops/test_data.ts b/x-pack/test/functional/apps/aiops/test_data.ts index d0b9035c69ced..7a1b47cf9ca63 100644 --- a/x-pack/test/functional/apps/aiops/test_data.ts +++ b/x-pack/test/functional/apps/aiops/test_data.ts @@ -21,7 +21,7 @@ export const kibanaLogsDataViewTestData: TestData = { fieldSelectorApplyAvailable: true, action: { type: 'LogPatternAnalysis', - tableRowId: '488337254', + tableRowId: '157690148', expected: { queryBar: 'clientip:30.156.16.164 AND host.keyword:elastic-elastic-elastic.org AND ip:30.156.16.163 AND response.keyword:404 AND machine.os.keyword:win xp AND geo.dest:IN AND geo.srcdest:US\\:IN', @@ -233,7 +233,9 @@ const getArtificialLogDataViewTestData = (analysisType: LogRateAnalysisType): Te }); export const logRateAnalysisTestData: TestData[] = [ - kibanaLogsDataViewTestData, + // Temporarily disabling since the data seems out of sync on local dev installs and CI + // so it's not possible to compare and update assertions accordingly. + // kibanaLogsDataViewTestData, farequoteDataViewTestData, farequoteDataViewTestDataWithQuery, getArtificialLogDataViewTestData(LOG_RATE_ANALYSIS_TYPE.SPIKE), From fb574972f4078598f939701c5c55722b414da861 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:31:27 +0300 Subject: [PATCH 052/170] [Cloud Security] CSPM fleet forms disabled on edit mode (#167910) --- .../aws_credentials_form.tsx | 12 ++++++ .../azure_credentials_form.tsx | 3 ++ .../fleet_extensions/gcp_credential_form.tsx | 16 ++++++++ .../fleet_extensions/policy_template_form.tsx | 40 ++++++++++++++++++- .../policy_template_selectors.tsx | 1 + 5 files changed, 71 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx index fdc7d8c0f328f..5c12396942d77 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx @@ -103,6 +103,7 @@ interface Props { packageInfo: PackageInfo; onChange: any; setIsValid: (isValid: boolean) => void; + disabled: boolean; } const CloudFormationSetup = ({ @@ -215,6 +216,7 @@ export const AwsCredentialsForm = ({ packageInfo, onChange, setIsValid, + disabled, }: Props) => { const { awsCredentialsType, @@ -238,6 +240,7 @@ export const AwsCredentialsForm = ({ { updatePolicy( @@ -267,6 +271,7 @@ export const AwsCredentialsForm = ({ { updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })); @@ -281,9 +286,11 @@ export const AwsCredentialsForm = ({ const AwsCredentialTypeSelector = ({ type, onChange, + disabled, }: { onChange(type: AwsCredentialsType): void; type: AwsCredentialsType; + disabled: boolean; }) => ( ; onChange: (key: string, value: string) => void; + disabled: boolean; }) => (
    {fields.map((field) => ( @@ -315,6 +325,7 @@ const AwsInputVarFields = ({ <> {field.type === 'password' && ( void; + disabled: boolean; } const ARM_TEMPLATE_EXTERNAL_DOC_URL = @@ -207,6 +208,7 @@ export const AzureCredentialsForm = ({ packageInfo, onChange, setIsValid, + disabled, }: Props) => { const { setupFormat, onSetupFormatChange, integrationLink, hasArmTemplateUrl } = useAzureCredentialsForm({ @@ -260,6 +262,7 @@ export const AzureCredentialsForm = ({ ; onChange: (key: string, value: string) => void; input: NewPackagePolicyInput; + disabled: boolean; }) => { const accountType = input.streams?.[0]?.vars?.['gcp.account_type']?.value; const getFieldById = (id: keyof GcpInputFields['fields']) => { @@ -142,6 +144,7 @@ const GoogleCloudShellSetup = ({ {organizationIdFields && accountType === GCP_ORGANIZATION_ACCOUNT && ( void; onChange: any; + disabled: boolean; } export const getInputVarsFields = (input: NewPackagePolicyInput, fields: GcpFields) => @@ -356,6 +361,7 @@ export const GcpCredentialsForm = ({ packageInfo, setIsValid, onChange, + disabled, }: GcpFormProps) => { /* Create a subset of properties from GcpField to use for hiding value of credentials json and credentials file when user switch from Manual to Cloud Shell, we wanna keep Project and Organization ID */ const subsetOfGcpField = (({ ['gcp.credentials.file']: a, ['gcp.credentials.json']: b }) => ({ @@ -444,6 +450,7 @@ export const GcpCredentialsForm = ({ {setupFormat === SETUP_ACCESS_CLOUD_SHELL ? ( updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })) @@ -462,6 +470,7 @@ export const GcpCredentialsForm = ({ /> ) : ( updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })) @@ -481,10 +490,12 @@ const GcpInputVarFields = ({ fields, onChange, isOrganization, + disabled, }: { fields: Array; onChange: (key: string, value: string) => void; isOrganization: boolean; + disabled: boolean; }) => { const getFieldById = (id: keyof GcpInputFields['fields']) => { return fields.find((element) => element.id === id); @@ -508,6 +519,7 @@ const GcpInputVarFields = ({ {organizationIdFields && isOrganization && ( ; newPolicy: NewPackagePolicy; updatePolicy: (updatedPolicy: NewPackagePolicy) => void; packageInfo: PackageInfo; + disabled: boolean; }) => { // This will disable the aws org option for any version below 1.5.0-preview20 which introduced support for account_type. https://github.com/elastic/integrations/pull/6682 const isValidSemantic = semverValid(packageInfo.version); @@ -221,6 +223,7 @@ const AwsAccountTypeSelect = ({ )} { @@ -272,11 +275,13 @@ const GcpAccountTypeSelect = ({ newPolicy, updatePolicy, packageInfo, + disabled, }: { input: Extract; newPolicy: NewPackagePolicy; updatePolicy: (updatedPolicy: NewPackagePolicy) => void; packageInfo: PackageInfo; + disabled: boolean; }) => { // This will disable the gcp org option for any version below 1.6.0 which introduced support for account_type. https://github.com/elastic/integrations/pull/6682 const validSemantic = semverValid(packageInfo.version); @@ -364,6 +369,7 @@ const GcpAccountTypeSelect = ({ )} @@ -405,10 +411,12 @@ const AzureAccountTypeSelect = ({ input, newPolicy, updatePolicy, + disabled, }: { input: Extract; newPolicy: NewPackagePolicy; updatePolicy: (updatedPolicy: NewPackagePolicy) => void; + disabled: boolean; }) => { const azureAccountTypeOptions = getAzureAccountTypeOptions(); @@ -440,6 +448,7 @@ const AzureAccountTypeSelect = ({ { @@ -628,6 +637,27 @@ export const CspPolicyTemplateForm = memo )} + + {isEditPage && ( + <> + +

    + +

    +
    + + + )} + {/* Shows info on the active policy template */} @@ -646,6 +676,7 @@ export const CspPolicyTemplateForm = memo )} @@ -655,11 +686,17 @@ export const CspPolicyTemplateForm = memo )} {input.type === 'cloudbeat/cis_azure' && ( - + )} {/* Defines the name/description */} @@ -677,6 +714,7 @@ export const CspPolicyTemplateForm = memo diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx index 4491d4a7c66a8..01d7fdcfc1891 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx @@ -73,6 +73,7 @@ interface PolicyTemplateVarsFormProps { packageInfo: PackageInfo; onChange: PackagePolicyReplaceDefineStepExtensionComponentProps['onChange']; setIsValid: (isValid: boolean) => void; + disabled: boolean; } export const PolicyTemplateVarsForm = ({ input, ...props }: PolicyTemplateVarsFormProps) => { From 7e24f2512ddb3c3ed462216992e6db7bcabe75fd Mon Sep 17 00:00:00 2001 From: Francesco Gualazzi Date: Wed, 4 Oct 2023 11:33:36 +0200 Subject: [PATCH 053/170] fleet packages: upgrade profiling bundled integrations (#167307) ## Summary Upgrade the bundled Universal Profiling packages to run the backend using the new version that will be published with https://github.com/elastic/integrations/pull/7962 Signed-off-by: inge4pres --- fleet_packages.json | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/fleet_packages.json b/fleet_packages.json index a206560d48d80..123fdad4451cd 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -42,15 +42,13 @@ }, { "name": "profiler_symbolizer", - "version": "8.9.0-preview", - "forceAlignStackVersion": true, - "allowSyncToPrerelease": true + "version": "8.10.0", + "forceAlignStackVersion": true }, { "name": "profiler_collector", - "version": "8.9.1-preview", - "forceAlignStackVersion": true, - "allowSyncToPrerelease": true + "version": "8.10.0", + "forceAlignStackVersion": true }, { "name": "synthetics", @@ -60,4 +58,4 @@ "name": "security_detection_engine", "version": "8.10.1" } -] \ No newline at end of file +] From 5fb9a3889e2d37880f09cc93f4971bd88c764306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Wed, 4 Oct 2023 09:56:08 +0000 Subject: [PATCH 054/170] Setup E2E against Serverless ES, Kibana, Fleet server standalone and Elastic endpoint agent in VM (#167720) ## Summary Run Defend Workflows Cypress E2E against Serverless stack, similar to https://github.com/elastic/kibana/pull/165415 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Gloria Hornero --- .buildkite/ftr_configs.yml | 3 +- .../kbn-es/src/cli_commands/serverless.ts | 3 +- packages/kbn-es/src/utils/docker.test.ts | 29 ++++ packages/kbn-es/src/utils/docker.ts | 20 +-- packages/kbn-test/src/es/test_es_cluster.ts | 7 +- .../lib/config/schema.ts | 6 + .../functional_tests/lib/run_elasticsearch.ts | 8 ++ x-pack/plugins/security_solution/package.json | 2 +- .../management/cypress/cypress_base.config.ts | 12 +- .../e2e/artifacts/artifacts_mocked_data.cy.ts | 2 +- .../e2e/automated_response_actions/form.cy.ts | 2 +- .../history_log.cy.ts | 136 +++++++++--------- .../automated_response_actions/results.cy.ts | 2 +- .../cypress/e2e/endpoint_list/endpoints.cy.ts | 2 +- .../endpoint_list/endpoints_mocked_data.cy.ts | 2 +- .../e2e/endpoint_list/policy_response.cy.ts | 2 +- .../cypress/e2e/policy/policy_details.cy.ts | 3 +- ...olicy_experimental_features_disabled.cy.ts | 2 +- .../cypress/e2e/policy/policy_list.cy.ts | 2 +- .../isolate_mocked_data.cy.ts | 4 +- .../reponse_actions_history.cy.ts | 104 +++++++------- .../e2e/response_actions/responder.cy.ts | 20 +-- .../response_console_mocked_data.cy.ts | 6 +- ...alhost_services.ts => network_services.ts} | 5 +- .../scripts/endpoint/common/stack_services.ts | 30 ++-- .../scripts/run_cypress/get_ftr_config.ts | 48 ++++--- .../scripts/run_cypress/parallel.ts | 4 + .../test/defend_workflows_cypress/config.ts | 4 +- .../endpoint_serverless_config.ts | 65 --------- ...ndpoint_config.ts => serverless_config.ts} | 15 +- 30 files changed, 275 insertions(+), 275 deletions(-) rename x-pack/plugins/security_solution/scripts/endpoint/common/{localhost_services.ts => network_services.ts} (86%) delete mode 100644 x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts rename x-pack/test/defend_workflows_cypress/{endpoint_config.ts => serverless_config.ts} (76%) diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 0afb3e5c4ee68..5ef5041673c71 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -27,8 +27,7 @@ disabled: - x-pack/test/functional_enterprise_search/cypress.config.ts - x-pack/test/defend_workflows_cypress/cli_config.ts - x-pack/test/defend_workflows_cypress/config.ts - - x-pack/test/defend_workflows_cypress/endpoint_config.ts - - x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts + - x-pack/test/defend_workflows_cypress/serverless_config.ts - x-pack/plugins/observability_onboarding/e2e/ftr_config_open.ts - x-pack/plugins/observability_onboarding/e2e/ftr_config_runner.ts - x-pack/plugins/observability_onboarding/e2e/ftr_config.ts diff --git a/packages/kbn-es/src/cli_commands/serverless.ts b/packages/kbn-es/src/cli_commands/serverless.ts index dcf8f1607f188..87a573a8810dd 100644 --- a/packages/kbn-es/src/cli_commands/serverless.ts +++ b/packages/kbn-es/src/cli_commands/serverless.ts @@ -35,6 +35,7 @@ export const serverless: Command = { --basePath Path to the directory where the ES cluster will store data --clean Remove existing file system object store before running --kill Kill running ES serverless nodes if detected on startup + --host Publish ES docker container on additional host IP --port The port to bind to on 127.0.0.1 [default: ${DEFAULT_PORT}] --ssl Enable HTTP SSL on the ES cluster --skipTeardown If this process exits, leave the ES cluster running in the background @@ -72,7 +73,7 @@ export const serverless: Command = { files: 'F', }, - string: ['tag', 'image', 'basePath', 'resources'], + string: ['tag', 'image', 'basePath', 'resources', 'host'], boolean: ['clean', 'ssl', 'kill', 'background', 'skipTeardown', 'waitForReady'], default: defaults, diff --git a/packages/kbn-es/src/utils/docker.test.ts b/packages/kbn-es/src/utils/docker.test.ts index a45d57c7fe90a..e9017acc6c94d 100644 --- a/packages/kbn-es/src/utils/docker.test.ts +++ b/packages/kbn-es/src/utils/docker.test.ts @@ -29,6 +29,7 @@ import { teardownServerlessClusterSync, verifyDockerInstalled, getESp12Volume, + ServerlessOptions, } from './docker'; import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; import { ES_P12_PATH } from '@kbn/dev-utils'; @@ -155,6 +156,19 @@ describe('resolvePort()', () => { `); }); + test('should return default port when custom host passed in options', () => { + const port = resolvePort({ host: '192.168.25.1' } as ServerlessOptions); + + expect(port).toMatchInlineSnapshot(` + Array [ + "-p", + "127.0.0.1:9200:9200", + "-p", + "192.168.25.1:9200:9200", + ] + `); + }); + test('should return custom port when passed in options', () => { const port = resolvePort({ port: 9220 }); @@ -167,6 +181,21 @@ describe('resolvePort()', () => { ] `); }); + + test('should return custom port and host when passed in options', () => { + const port = resolvePort({ port: 9220, host: '192.168.25.1' }); + + expect(port).toMatchInlineSnapshot(` + Array [ + "-p", + "127.0.0.1:9220:9220", + "-p", + "192.168.25.1:9220:9220", + "--env", + "http.port=9220", + ] + `); + }); }); describe('verifyDockerInstalled()', () => { diff --git a/packages/kbn-es/src/utils/docker.ts b/packages/kbn-es/src/utils/docker.ts index d3d83b7c66cc2..4a54045fb0924 100644 --- a/packages/kbn-es/src/utils/docker.ts +++ b/packages/kbn-es/src/utils/docker.ts @@ -56,6 +56,8 @@ export interface DockerOptions extends EsClusterExecOptions, BaseOptions { } export interface ServerlessOptions extends EsClusterExecOptions, BaseOptions { + /** Publish ES docker container on additional host IP */ + host?: string; /** Clean (or delete) all data created by the ES cluster after it is stopped */ clean?: boolean; /** Path to the directory where the ES cluster will store data */ @@ -306,19 +308,21 @@ export function resolveDockerImage({ } /** - * Determine the port to bind the Serverless index node or Docker node to + * Determine the port and optionally an additional host to bind the Serverless index node or Docker node to */ export function resolvePort(options: ServerlessOptions | DockerOptions) { + const port = options.port || DEFAULT_PORT; + const value = ['-p', `127.0.0.1:${port}:${port}`]; + + if ((options as ServerlessOptions).host) { + value.push('-p', `${(options as ServerlessOptions).host}:${port}:${port}`); + } + if (options.port) { - return [ - '-p', - `127.0.0.1:${options.port}:${options.port}`, - '--env', - `http.port=${options.port}`, - ]; + value.push('--env', `http.port=${options.port}`); } - return ['-p', `127.0.0.1:${DEFAULT_PORT}:${DEFAULT_PORT}`]; + return value; } /** diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index 3c63960bdc0e5..9d37e60fdff0f 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -19,6 +19,7 @@ import { Client, HttpConnection } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense } from '@kbn/es'; +import type { ServerlessOptions } from '@kbn/es/src/utils'; import { CI_PARALLEL_PROCESS_PREFIX } from '../ci_parallel_process_prefix'; import { esTestConfig } from './es_test_config'; @@ -70,10 +71,7 @@ export interface CreateTestEsClusterOptions { */ esArgs?: string[]; esFrom?: string; - esServerlessOptions?: { - image?: string; - tag?: string; - }; + esServerlessOptions?: Pick; esJavaOpts?: string; /** * License to run your cluster under. Keep in mind that a `trial` license @@ -246,6 +244,7 @@ export function createTestEsCluster< esArgs: customEsArgs, image: esServerlessOptions?.image, tag: esServerlessOptions?.tag, + host: esServerlessOptions?.host, port, clean: true, background: true, diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts index 27bdee55da128..6c037bab1c3e5 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts @@ -214,6 +214,12 @@ export const schema = Joi.object() }) .default(), + esServerlessOptions: Joi.object() + .keys({ + host: Joi.string().ip(), + }) + .default(), + kbnTestServer: Joi.object() .keys({ buildArgs: Joi.array(), diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index d298a1c1abaa4..2ad6725e8258b 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -166,16 +166,24 @@ function getESServerlessOptions(esServerlessImageFromArg: string | undefined, co esTestConfig.getESServerlessImage() || (config.has('esTestCluster.esServerlessImage') && config.get('esTestCluster.esServerlessImage')); + const serverlessHost: string | undefined = + config.has('esServerlessOptions.host') && config.get('esServerlessOptions.host'); if (esServerlessImageUrlOrTag) { if (esServerlessImageUrlOrTag.includes(':')) { return { image: esServerlessImageUrlOrTag, + host: serverlessHost, }; } else { return { tag: esServerlessImageUrlOrTag, + host: serverlessHost, }; } } + + return { + host: serverlessHost, + }; } diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 04ee03ecfed2e..5e2bc285bca9a 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -13,7 +13,7 @@ "cypress:dw": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress.config.ts --ftr-config-file ../../test/defend_workflows_cypress/cli_config", "cypress:dw:open": "yarn cypress:dw open", "cypress:dw:run": "yarn cypress:dw run", - "cypress:dw:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../../x-pack/test_serverless/functional/test_suites/security/cypress/security_config", + "cypress:dw:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file ./public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../test/defend_workflows_cypress/serverless_config", "cypress:dw:serverless:open": "yarn cypress:dw:serverless open", "cypress:dw:serverless:run": "yarn cypress:dw:serverless run", "cypress:dw:endpoint": "echo '\n** WARNING **: Run script `cypress:dw:endpoint` no longer valid! Use `cypress:dw` instead\n'", diff --git a/x-pack/plugins/security_solution/public/management/cypress/cypress_base.config.ts b/x-pack/plugins/security_solution/public/management/cypress/cypress_base.config.ts index 7416ef60eda19..e861c5927d3fd 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/cypress_base.config.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/cypress_base.config.ts @@ -63,16 +63,8 @@ export const getCypressBaseConfig = ( experimentalInteractiveRunEvents: true, setupNodeEvents: (on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) => { dataLoaders(on, config); - - // skip dataLoadersForRealEndpoints() if running in serverless - // https://github.com/elastic/security-team/issues/7467 - // Once we are able to run Fleet server in serverless mode (see: https://github.com/elastic/kibana/pull/166183) - // this `if()` statement needs to be removed and `dataLoadersForRealEndpoints()` should - // just be called without having any checks around it. - if (!config.env.IS_SERVERLESS) { - // Data loaders specific to "real" Endpoint testing - dataLoadersForRealEndpoints(on, config); - } + // Data loaders specific to "real" Endpoint testing + dataLoadersForRealEndpoints(on, config); responseActionTasks(on, config); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts index 86cd86dd797b7..df0ad073ebdbf 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifacts_mocked_data.cy.ts @@ -30,7 +30,7 @@ const loginWithoutAccess = (url: string) => { loadPage(url); }; -describe('Artifacts pages', { tags: '@ess' }, () => { +describe('Artifacts pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { before(() => { login(); loadEndpointDataForEventFiltersIfNeeded(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts index eb5bae8624475..7205601b06493 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts @@ -18,7 +18,7 @@ import { cleanupRule, generateRandomStringName, loadRule } from '../../tasks/api import { RESPONSE_ACTION_TYPES } from '../../../../../common/api/detection_engine'; import { login, ROLE } from '../../tasks/login'; -describe('Form', { tags: '@ess' }, () => { +describe('Form', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { describe('User with no access can not create an endpoint response action', () => { before(() => { login(ROLE.endpoint_response_actions_no_access); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/history_log.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/history_log.cy.ts index 8e33a98fa5d79..b2f99a51087be 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/history_log.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/history_log.cy.ts @@ -12,79 +12,83 @@ import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts' import { login, ROLE } from '../../tasks/login'; -describe('Response actions history page', { tags: '@ess' }, () => { - let endpointData: ReturnTypeFromChainable | undefined; - let endpointDataWithAutomated: ReturnTypeFromChainable | undefined; - let alertData: ReturnTypeFromChainable | undefined; - const [endpointAgentId, endpointHostname] = generateRandomStringName(2); +describe( + 'Response actions history page', + { tags: ['@ess', '@serverless', '@brokenInServerless'] }, + () => { + let endpointData: ReturnTypeFromChainable | undefined; + let endpointDataWithAutomated: ReturnTypeFromChainable | undefined; + let alertData: ReturnTypeFromChainable | undefined; + const [endpointAgentId, endpointHostname] = generateRandomStringName(2); - before(() => { - login(ROLE.endpoint_response_actions_access); + before(() => { + login(ROLE.endpoint_response_actions_access); - indexEndpointHosts({ numResponseActions: 2 }).then((indexEndpoints) => { - endpointData = indexEndpoints; - }); - indexEndpointRuleAlerts({ - endpointAgentId, - endpointHostname, - endpointIsolated: false, - }).then((indexedAlert) => { - alertData = indexedAlert; - const alertId = alertData.alerts[0]._id; - return indexEndpointHosts({ - numResponseActions: 1, - alertIds: [alertId], - }).then((indexEndpoints) => { - endpointDataWithAutomated = indexEndpoints; + indexEndpointHosts({ numResponseActions: 2 }).then((indexEndpoints) => { + endpointData = indexEndpoints; + }); + indexEndpointRuleAlerts({ + endpointAgentId, + endpointHostname, + endpointIsolated: false, + }).then((indexedAlert) => { + alertData = indexedAlert; + const alertId = alertData.alerts[0]._id; + return indexEndpointHosts({ + numResponseActions: 1, + alertIds: [alertId], + }).then((indexEndpoints) => { + endpointDataWithAutomated = indexEndpoints; + }); }); }); - }); - after(() => { - if (endpointDataWithAutomated) { - endpointDataWithAutomated.cleanup(); - endpointDataWithAutomated = undefined; - } - if (endpointData) { - endpointData.cleanup(); - endpointData = undefined; - } + after(() => { + if (endpointDataWithAutomated) { + endpointDataWithAutomated.cleanup(); + endpointDataWithAutomated = undefined; + } + if (endpointData) { + endpointData.cleanup(); + endpointData = undefined; + } - if (alertData) { - alertData.cleanup(); - alertData = undefined; - } - }); + if (alertData) { + alertData.cleanup(); + alertData = undefined; + } + }); - it('enable filtering by type', () => { - cy.visit(`/app/security/administration/response_actions_history`); + it('enable filtering by type', () => { + cy.visit(`/app/security/administration/response_actions_history`); - let maxLength: number; - cy.getByTestSubj('response-actions-list').then(($table) => { - maxLength = $table.find('tbody .euiTableRow').length; - cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); - }); + let maxLength: number; + cy.getByTestSubj('response-actions-list').then(($table) => { + maxLength = $table.find('tbody .euiTableRow').length; + cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); + }); - cy.getByTestSubj('response-actions-list-type-filter-popoverButton').click(); - cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); - cy.getByTestSubj('response-actions-list').within(() => { - cy.get('tbody .euiTableRow').should('have.lengthOf', 1); - cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule'); - }); - cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); - cy.getByTestSubj('response-actions-list').within(() => { - cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); - }); - cy.getByTestSubj('type-filter-option').contains('Triggered manually').click(); - cy.getByTestSubj('response-actions-list').within(() => { - cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength - 1); - }); - cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); - cy.getByTestSubj('response-actions-list').within(() => { - cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); - cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule').click(); + cy.getByTestSubj('response-actions-list-type-filter-popoverButton').click(); + cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); + cy.getByTestSubj('response-actions-list').within(() => { + cy.get('tbody .euiTableRow').should('have.lengthOf', 1); + cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule'); + }); + cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); + cy.getByTestSubj('response-actions-list').within(() => { + cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); + }); + cy.getByTestSubj('type-filter-option').contains('Triggered manually').click(); + cy.getByTestSubj('response-actions-list').within(() => { + cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength - 1); + }); + cy.getByTestSubj('type-filter-option').contains('Triggered by rule').click(); + cy.getByTestSubj('response-actions-list').within(() => { + cy.get('tbody .euiTableRow').should('have.lengthOf', maxLength); + cy.get('tbody .euiTableRow').eq(0).contains('Triggered by rule').click(); + }); + // check if we were moved to Rules app after clicking Triggered by rule + cy.getByTestSubj('breadcrumb last').contains('Detection rules (SIEM)'); }); - // check if we were moved to Rules app after clicking Triggered by rule - cy.getByTestSubj('breadcrumb last').contains('Detection rules (SIEM)'); - }); -}); + } +); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts index 2fe539e8ffe77..409fe4546ddbc 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts @@ -15,7 +15,7 @@ import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts' import { login, ROLE } from '../../tasks/login'; -describe('Results', { tags: '@ess' }, () => { +describe('Results', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let endpointData: ReturnTypeFromChainable | undefined; let alertData: ReturnTypeFromChainable | undefined; const [endpointAgentId, endpointHostname] = generateRandomStringName(2); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts index 2664dbcbb76a0..0c6c64afad492 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts @@ -32,7 +32,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe('Endpoints page', { tags: '@ess' }, () => { +describe('Endpoints page', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints_mocked_data.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints_mocked_data.cy.ts index 5804143f3b19c..8232281c4a6a6 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints_mocked_data.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints_mocked_data.cy.ts @@ -13,7 +13,7 @@ import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts'; import { login } from '../../tasks/login'; import { loadPage } from '../../tasks/common'; -describe('Endpoints page', { tags: '@ess' }, () => { +describe('Endpoints page', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let endpointData: ReturnTypeFromChainable; before(() => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/policy_response.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/policy_response.cy.ts index 073bb92ea8f43..8df860d051733 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/policy_response.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/policy_response.cy.ts @@ -15,7 +15,7 @@ import { navigateToFleetAgentDetails } from '../../screens/fleet/agent_details'; import { EndpointPolicyResponseGenerator } from '../../../../../common/endpoint/data_generators/endpoint_policy_response_generator'; import { descriptions } from '../../../components/policy_response/policy_response_friendly_names'; -describe.skip('Endpoint Policy Response', { tags: '@ess' }, () => { +describe.skip('Endpoint Policy Response', { tags: ['@ess', '@serverless'] }, () => { let loadedEndpoint: CyIndexEndpointHosts; let endpointMetadata: HostMetadata; let loadedPolicyResponse: IndexedEndpointPolicyResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts index 20d64f23de4b8..8bddeda2f8137 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_details.cy.ts @@ -19,7 +19,8 @@ import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/c describe( 'Policy Details', { - tags: '@ess', + tags: ['@ess', '@serverless', '@brokenInServerless'], + env: { ftrConfig: { enableExperimental: ['protectionUpdatesEnabled'] } }, }, () => { describe('Protection updates', () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_experimental_features_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_experimental_features_disabled.cy.ts index 68803619e899a..6605dd43a9e08 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_experimental_features_disabled.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_experimental_features_disabled.cy.ts @@ -13,7 +13,7 @@ import { login } from '../../tasks/login'; import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet'; // We need a way to disable experimental features in the Cypress tests -describe.skip('Disabled experimental features on: ', { tags: '@ess' }, () => { +describe.skip('Disabled experimental features on: ', { tags: ['@ess', '@serverless'] }, () => { describe('Policy list', () => { describe('Renders policy list without protection updates feature flag', () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_list.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_list.cy.ts index 0a88b58359649..01145059f71bd 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_list.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/policy/policy_list.cy.ts @@ -16,7 +16,7 @@ import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../task describe( 'Policy List', { - tags: '@ess', + tags: ['@ess', '@serverless', '@brokenInServerless'], env: { ftrConfig: { enableExperimental: ['protectionUpdatesEnabled'] } }, }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/isolate_mocked_data.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/isolate_mocked_data.cy.ts index 8998ec3cc32b7..00bca7e3864af 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/isolate_mocked_data.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/isolate_mocked_data.cy.ts @@ -29,7 +29,7 @@ import { indexNewCase } from '../../tasks/index_new_case'; import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts'; import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts'; -describe('Isolate command', { tags: '@ess' }, () => { +describe('Isolate command', { tags: ['@ess', '@serverless'] }, () => { describe('from Manage', () => { let endpointData: ReturnTypeFromChainable | undefined; let isolatedEndpointData: ReturnTypeFromChainable | undefined; @@ -192,7 +192,7 @@ describe('Isolate command', { tags: '@ess' }, () => { }); }); - describe('from Cases', () => { + describe('from Cases', { tags: ['@brokenInServerless'] }, () => { let endpointData: ReturnTypeFromChainable | undefined; let caseData: ReturnTypeFromChainable | undefined; let alertData: ReturnTypeFromChainable | undefined; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/reponse_actions_history.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/reponse_actions_history.cy.ts index 7d1fe8b40a51e..aedcca4e1dc99 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/reponse_actions_history.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/reponse_actions_history.cy.ts @@ -10,65 +10,69 @@ import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts'; import { login } from '../../tasks/login'; import { loadPage } from '../../tasks/common'; -describe('Response actions history page', { tags: '@ess' }, () => { - let endpointData: ReturnTypeFromChainable; - // let actionData: ReturnTypeFromChainable; +describe( + 'Response actions history page', + { tags: ['@ess', '@serverless', '@brokenInServerless'] }, + () => { + let endpointData: ReturnTypeFromChainable; + // let actionData: ReturnTypeFromChainable; - before(() => { - indexEndpointHosts({ numResponseActions: 11 }).then((indexEndpoints) => { - endpointData = indexEndpoints; + before(() => { + indexEndpointHosts({ numResponseActions: 11 }).then((indexEndpoints) => { + endpointData = indexEndpoints; + }); }); - }); - beforeEach(() => { - login(); - }); + beforeEach(() => { + login(); + }); - after(() => { - if (endpointData) { - endpointData.cleanup(); - // @ts-expect-error ignore setting to undefined - endpointData = undefined; - } - }); + after(() => { + if (endpointData) { + endpointData.cleanup(); + // @ts-expect-error ignore setting to undefined + endpointData = undefined; + } + }); - it('retains expanded action details on page reload', () => { - loadPage(`/app/security/administration/response_actions_history`); - cy.getByTestSubj('response-actions-list-expand-button').eq(3).click(); // 4th row on 1st page - cy.getByTestSubj('response-actions-list-details-tray').should('exist'); - cy.url().should('include', 'withOutputs'); + it('retains expanded action details on page reload', () => { + loadPage(`/app/security/administration/response_actions_history`); + cy.getByTestSubj('response-actions-list-expand-button').eq(3).click(); // 4th row on 1st page + cy.getByTestSubj('response-actions-list-details-tray').should('exist'); + cy.url().should('include', 'withOutputs'); - // navigate to page 2 - cy.getByTestSubj('pagination-button-1').click(); - cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); + // navigate to page 2 + cy.getByTestSubj('pagination-button-1').click(); + cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); - // reload with URL params on page 2 with existing URL - cy.reload(); - cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); + // reload with URL params on page 2 with existing URL + cy.reload(); + cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); - // navigate to page 1 - cy.getByTestSubj('pagination-button-0').click(); - cy.getByTestSubj('response-actions-list-details-tray').should('exist'); - }); + // navigate to page 1 + cy.getByTestSubj('pagination-button-0').click(); + cy.getByTestSubj('response-actions-list-details-tray').should('exist'); + }); - it('collapses expanded tray with a single click', () => { - loadPage(`/app/security/administration/response_actions_history`); - // 2nd row on 1st page - cy.getByTestSubj('response-actions-list-expand-button').eq(1).as('2nd-row'); + it('collapses expanded tray with a single click', () => { + loadPage(`/app/security/administration/response_actions_history`); + // 2nd row on 1st page + cy.getByTestSubj('response-actions-list-expand-button').eq(1).as('2nd-row'); - // expand the row - cy.get('@2nd-row').click(); - cy.getByTestSubj('response-actions-list-details-tray').should('exist'); - cy.url().should('include', 'withOutputs'); + // expand the row + cy.get('@2nd-row').click(); + cy.getByTestSubj('response-actions-list-details-tray').should('exist'); + cy.url().should('include', 'withOutputs'); - // collapse the row - cy.intercept('GET', '/api/endpoint/action*').as('getResponses'); - cy.get('@2nd-row').click(); - // wait for the API response to come back - // and then see if the tray is actually closed - cy.wait('@getResponses', { timeout: 500 }).then(() => { - cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); - cy.url().should('not.include', 'withOutputs'); + // collapse the row + cy.intercept('GET', '/api/endpoint/action*').as('getResponses'); + cy.get('@2nd-row').click(); + // wait for the API response to come back + // and then see if the tray is actually closed + cy.wait('@getResponses', { timeout: 500 }).then(() => { + cy.getByTestSubj('response-actions-list-details-tray').should('not.exist'); + cy.url().should('not.include', 'withOutputs'); + }); }); - }); -}); + } +); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/responder.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/responder.cy.ts index 1e699300d1dab..9272f14eab4ae 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/responder.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/responder.cy.ts @@ -21,7 +21,7 @@ import { indexNewCase } from '../../tasks/index_new_case'; import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts'; import { indexEndpointRuleAlerts } from '../../tasks/index_endpoint_rule_alerts'; -describe('When accessing Endpoint Response Console', { tags: '@ess' }, () => { +describe('When accessing Endpoint Response Console', { tags: ['@ess', '@serverless'] }, () => { const performResponderSanityChecks = () => { openResponderActionLogFlyout(); // Ensure the popover in the action log date quick select picker is accessible @@ -109,12 +109,16 @@ describe('When accessing Endpoint Response Console', { tags: '@ess' }, () => { cy.getByTestSubj('endpointResponseActions-action-item').should('be.enabled'); }); - it('should display Responder response action interface', () => { - loadPage(caseUrlPath); - closeAllToasts(); - openCaseAlertDetails(); - cy.getByTestSubj('endpointResponseActions-action-item').click(); - performResponderSanityChecks(); - }); + it( + 'should display Responder response action interface', + { tags: ['@brokenInServerless'] }, + () => { + loadPage(caseUrlPath); + closeAllToasts(); + openCaseAlertDetails(); + cy.getByTestSubj('endpointResponseActions-action-item').click(); + performResponderSanityChecks(); + } + ); }); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console_mocked_data.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console_mocked_data.cy.ts index 9bfc4ff5fc58d..11030ae8e77ba 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console_mocked_data.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console_mocked_data.cy.ts @@ -24,12 +24,12 @@ import { } from '../../tasks/isolate'; import { login } from '../../tasks/login'; -describe('Response console', { tags: '@ess' }, () => { +describe('Response console', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); }); - describe('`isolate` command', () => { + describe('`isolate` command', { tags: ['@brokenInServerless'] }, () => { let endpointData: ReturnTypeFromChainable; let endpointHostname: string; let isolateRequestResponse: ActionDetails; @@ -71,7 +71,7 @@ describe('Response console', { tags: '@ess' }, () => { }); }); - describe('`release` command', () => { + describe('`release` command', { tags: ['@brokenInServerless'] }, () => { let endpointData: ReturnTypeFromChainable; let endpointHostname: string; let releaseRequestResponse: ActionDetails; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts similarity index 86% rename from x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts rename to x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts index 5c557f644a9ec..9f75ee6d8a6ae 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts @@ -7,8 +7,9 @@ import { networkInterfaces } from 'node:os'; -export const getLocalhostRealIp = (): string => { - for (const netInterfaceList of Object.values(networkInterfaces())) { +export const getBridgeNetworkHostIp = (): string => { + // reverse to get the last interface first + for (const netInterfaceList of Object.values(networkInterfaces()).reverse()) { if (netInterfaceList) { const netInterface = netInterfaceList.find( (networkInterface) => diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts index 7e5d9a95efe76..39dc4ffb06896 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts @@ -11,7 +11,6 @@ import type { KbnClientOptions } from '@kbn/test'; import { KbnClient } from '@kbn/test'; import type { StatusResponse } from '@kbn/core-status-common-internal'; import pRetry from 'p-retry'; -import nodeFetch from 'node-fetch'; import type { ReqOptions } from '@kbn/test/src/kbn_client/kbn_client_requester'; import { type AxiosResponse } from 'axios'; import type { ClientOptions } from '@elastic/elasticsearch/lib/client'; @@ -19,7 +18,7 @@ import fs from 'fs'; import { CA_CERT_PATH } from '@kbn/dev-utils'; import { catchAxiosErrorFormatAndThrow } from './format_axios_error'; import { isLocalhost } from './is_localhost'; -import { getLocalhostRealIp } from './localhost_services'; +import { getBridgeNetworkHostIp } from './network_services'; import { createSecuritySuperuser } from './security_user_services'; const CA_CERTIFICATE: Buffer = fs.readFileSync(CA_CERT_PATH); @@ -117,7 +116,9 @@ export const createRuntimeServices = async ({ let password = _password; if (asSuperuser) { - await waitForKibana(kibanaUrl); + await waitForKibana( + createKbnClient({ log, url: kibanaUrl, username, password, apiKey, noCertForSsl }) + ); const tmpEsClient = createEsClient({ url: elasticsearchUrl, username, @@ -162,7 +163,7 @@ export const createRuntimeServices = async ({ noCertForSsl, }), log, - localhostRealIp: getLocalhostRealIp(), + localhostRealIp: getBridgeNetworkHostIp(), apiKey: apiKey ?? '', user: { username, @@ -306,24 +307,15 @@ export const fetchKibanaStatus = async (kbnClient: KbnClient): Promise => { - const url = (() => { - const u = new URL(kbnUrl); - // This API seems to be available even if user is not authenticated - u.pathname = '/api/status'; - return u.toString(); - })(); - +export const waitForKibana = async (kbnClient: KbnClient): Promise => { await pRetry( async () => { - const response = await nodeFetch(url); - - if (response.status !== 200) { - throw new Error( - `Kibana not available. Returned: [${response.status}]: ${response.statusText}` - ); + try { + await kbnClient.status.get(); + } catch (err) { + throw new Error(`Kibana not available: ${err.message}`); } }, { maxTimeout: 10000 } diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts b/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts index 670a85fae4093..0a620fc1715ad 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts @@ -6,11 +6,10 @@ */ import _ from 'lodash'; -import { SERVERLESS_NODES } from '@kbn/es'; import { EsVersion, readConfigFile } from '@kbn/test'; import type { ToolingLog } from '@kbn/tooling-log'; import { CA_TRUSTED_FINGERPRINT } from '@kbn/dev-utils'; -import { getLocalhostRealIp } from '../endpoint/common/localhost_services'; +import { getBridgeNetworkHostIp } from '../endpoint/common/network_services'; import type { parseTestFileConfig } from './utils'; export const getFTRConfig = ({ @@ -59,7 +58,7 @@ export const getFTRConfig = ({ // }, }, (vars) => { - const hostRealIp = getLocalhostRealIp(); + const hostRealIp = getBridgeNetworkHostIp(); const hasFleetServerArgs = _.some( vars.kbnTestServer.serverArgs, @@ -90,15 +89,15 @@ export const getFTRConfig = ({ vars.kbnTestServer.serverArgs = _.map(vars.kbnTestServer.serverArgs, (value) => { if ( vars.servers.elasticsearch.protocol === 'https' && - value.includes('--elasticsearch.hosts=http') + value.includes('--elasticsearch.hosts=http://') ) { return value.replace('http', 'https'); } if ( vars.servers.kibana.protocol === 'https' && - (value.includes('--elasticsearch.hosts=http') || - value.includes('--server.publicBaseUrl=http')) + (value.includes('--elasticsearch.hosts=http://') || + value.includes('--server.publicBaseUrl=http://')) ) { return value.replace('http', 'https'); } @@ -135,14 +134,32 @@ export const getFTRConfig = ({ if (hasFleetServerArgs) { if (vars.serverless) { + vars.esServerlessOptions = { + ...(vars.esServerlessOptions || {}), + // Bind ES docker container to the host network so that the Elastic agent running in the VM can connect to it + host: hostRealIp, + }; + vars.kbnTestServer.serverArgs.push( - `--xpack.fleet.agents.fleet_server.hosts=["https://host.docker.internal:${fleetServerPort}"]` - ); - vars.kbnTestServer.serverArgs.push( - `--xpack.fleet.agents.elasticsearch.host=https://${SERVERLESS_NODES[0].name}:${esPort}` + `--xpack.fleet.agents.fleet_server.hosts=["https://${hostRealIp}:${fleetServerPort}"]` ); vars.kbnTestServer.serverArgs.push( - `--xpack.fleet.agents.elasticsearch.ca_trusted_fingerprint=${CA_TRUSTED_FINGERPRINT}` + `--xpack.fleet.outputs=${JSON.stringify([ + { + id: 'fleet-default-output', + name: 'default', + is_default: true, + is_default_monitoring: true, + type: 'elasticsearch', + ca_trusted_fingerprint: CA_TRUSTED_FINGERPRINT, + hosts: [`https://${hostRealIp}:${esPort}`], + config: { + ssl: { + verification_mode: 'none', + }, + }, + }, + ])}` ); } else { vars.kbnTestServer.serverArgs.push( @@ -158,20 +175,11 @@ export const getFTRConfig = ({ if (vars.serverless) { log.info(`Serverless mode detected`); - vars.kbnTestServer.serverArgs.push( - `--elasticsearch.hosts=https://localhost:${esPort}`, - `--server.publicBaseUrl=https://localhost:${kibanaPort}` - ); vars.esTestCluster.serverArgs.push( `xpack.security.authc.realms.saml.cloud-saml-kibana.sp.entity_id=http://host.docker.internal:${kibanaPort}`, `xpack.security.authc.realms.saml.cloud-saml-kibana.sp.logout=http://host.docker.internal:${kibanaPort}/logout`, `xpack.security.authc.realms.saml.cloud-saml-kibana.sp.acs=http://host.docker.internal:${kibanaPort}/api/security/saml/callback` ); - } else { - vars.kbnTestServer.serverArgs.push( - `--elasticsearch.hosts=http://localhost:${esPort}`, - `--server.publicBaseUrl=http://localhost:${kibanaPort}` - ); } if (specFileFTRConfig?.productTypes) { diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts index c37d698d2010b..1882fba6e3884 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts @@ -176,6 +176,10 @@ ${JSON.stringify(cypressConfigFile, null, 2)} const fleetServerPorts: number[] = [8220]; const getEsPort = (): T | number => { + if (isOpen) { + return 9220; + } + const esPort = parseInt(`92${Math.floor(Math.random() * 89) + 10}`, 10); if (esPorts.includes(esPort)) { return getEsPort(); diff --git a/x-pack/test/defend_workflows_cypress/config.ts b/x-pack/test/defend_workflows_cypress/config.ts index 35f54fb5b94e7..fc49ad2b3d7ad 100644 --- a/x-pack/test/defend_workflows_cypress/config.ts +++ b/x-pack/test/defend_workflows_cypress/config.ts @@ -7,7 +7,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { CA_CERT_PATH } from '@kbn/dev-utils'; -import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/localhost_services'; +import { getBridgeNetworkHostIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; import { services } from './services'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { @@ -18,7 +18,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('../functional/config.base.js') ); - const hostIp = getLocalhostRealIp(); + const hostIp = getBridgeNetworkHostIp(); return { ...kibanaCommonTestsConfig.getAll(), diff --git a/x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts b/x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts deleted file mode 100644 index ef7bda4d01d03..0000000000000 --- a/x-pack/test/defend_workflows_cypress/endpoint_serverless_config.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/localhost_services'; -import { FtrConfigProviderContext } from '@kbn/test'; - -import { ExperimentalFeatures } from '@kbn/security-solution-plugin/common/experimental_features'; -import { DefendWorkflowsCypressCliTestRunner } from './runner'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const defendWorkflowsCypressConfig = await readConfigFile(require.resolve('./config.ts')); - const svlSharedConfig = await readConfigFile( - require.resolve('../../test_serverless/shared/config.base.ts') - ); - - const hostIp = getLocalhostRealIp(); - - const enabledFeatureFlags: Array = []; - - return { - ...svlSharedConfig.getAll(), - esTestCluster: { - ...svlSharedConfig.get('esTestCluster'), - serverArgs: [ - ...svlSharedConfig.get('esTestCluster.serverArgs'), - // define custom es server here - // API Keys is enabled at the top level - ], - }, - servers: { - ...svlSharedConfig.get('servers'), - fleetserver: { - protocol: 'https', - hostname: hostIp, - port: 8220, - }, - }, - kbnTestServer: { - ...svlSharedConfig.get('kbnTestServer'), - serverArgs: [ - ...svlSharedConfig.get('kbnTestServer.serverArgs'), - '--csp.strict=false', - '--csp.warnLegacyBrowsers=false', - '--serverless=security', - '--xpack.encryptedSavedObjects.encryptionKey="abcdefghijklmnopqrstuvwxyz123456"', - - '--xpack.security.enabled=true', - `--xpack.fleet.agents.fleet_server.hosts=["https://${hostIp}:8220"]`, - `--xpack.fleet.agents.elasticsearch.host=http://${hostIp}:${defendWorkflowsCypressConfig.get( - 'servers.elasticsearch.port' - )}`, - - // set the packagerTaskInterval to 5s in order to speed up test executions when checking fleet artifacts - '--xpack.securitySolution.packagerTaskInterval=5s', - - `--xpack.securitySolution.enableExperimental=${JSON.stringify(enabledFeatureFlags)}`, - ], - }, - testRunner: DefendWorkflowsCypressCliTestRunner, - }; -} diff --git a/x-pack/test/defend_workflows_cypress/endpoint_config.ts b/x-pack/test/defend_workflows_cypress/serverless_config.ts similarity index 76% rename from x-pack/test/defend_workflows_cypress/endpoint_config.ts rename to x-pack/test/defend_workflows_cypress/serverless_config.ts index c2d9bb6909bd9..3063ab6d91876 100644 --- a/x-pack/test/defend_workflows_cypress/endpoint_config.ts +++ b/x-pack/test/defend_workflows_cypress/serverless_config.ts @@ -5,22 +5,31 @@ * 2.0. */ -import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/localhost_services'; +import { getBridgeNetworkHostIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; import { FtrConfigProviderContext } from '@kbn/test'; import { ExperimentalFeatures } from '@kbn/security-solution-plugin/common/experimental_features'; import { DefendWorkflowsCypressCliTestRunner } from './runner'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const defendWorkflowsCypressConfig = await readConfigFile(require.resolve('./config.ts')); + const defendWorkflowsCypressConfig = await readConfigFile( + require.resolve( + '../../test_serverless/functional/test_suites/security/cypress/security_config.base.ts' + ) + ); const config = defendWorkflowsCypressConfig.getAll(); - const hostIp = getLocalhostRealIp(); + const hostIp = getBridgeNetworkHostIp(); const enabledFeatureFlags: Array = []; return { ...config, + esTestCluster: { + ...config.esTestCluster, + serverArgs: [...config.esTestCluster.serverArgs, 'http.host=0.0.0.0'], + }, + servers: { ...config.servers, fleetserver: { From ede81cfdb0585a44536755213c6f7931d5dd4cb0 Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Wed, 4 Oct 2023 12:48:30 +0200 Subject: [PATCH 055/170] [Infra UI] Disable Osquery in serverless (#167233) closes https://github.com/elastic/kibana/issues/163280 ## Summary Disables OSquery in serverless. image image image Osquery is now only used in the Asset Details flyout/full-page view. The header component in the Asset Details now checks the feature flag object to show/hide the OSquery tab. ### How to test - Start a local es instance: `yarn es serverless --kill --clean --license trial --ssl` - Enable `infra` in the `serverless.oblt.dev.yml` file: - `xpack.infra.enabled: true` - Start a local kibana instance: `yarn serverless-oblt --ssl` and see if the side nav contains the Infrastructure item - Navigate to `https://0.0.0.0:5601/ftw/app/metrics` and open the Asset Details flyout from Inventory and Hosts View. Navigate to the details view and check that Osquery tab isn't present. - Confirm if OSquery tab is present in stateful. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../test_suites/core_plugins/rendering.ts | 5 ++++ .../infra/common/plugin_config_types.ts | 1 + .../asset_details/hooks/use_page_header.tsx | 27 +++++++++++++++++-- .../asset_details/tabs/osquery/osquery.tsx | 7 ++++- .../containers/plugin_config_context.test.tsx | 9 ++++--- .../metric_threshold_executor.test.ts | 1 + .../infra/server/lib/sources/sources.test.ts | 1 + x-pack/plugins/infra/server/plugin.ts | 4 +++ 8 files changed, 49 insertions(+), 6 deletions(-) diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index e01822be1d6c0..87e3b2077bcb5 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -256,6 +256,11 @@ export default function ({ getService }: PluginFunctionalProviderContext) { * and will resolve to (boolean) */ 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', + /** + * xpack.infra.featureFlags.osqueryEnabled is conditional based on traditional/serverless offering + * and will resolve to (boolean) + */ + 'xpack.infra.featureFlags.osqueryEnabled (any)', 'xpack.license_management.ui.enabled (boolean)', 'xpack.maps.preserveDrawingBuffer (boolean)', 'xpack.maps.showMapsInspectorAdapter (boolean)', diff --git a/x-pack/plugins/infra/common/plugin_config_types.ts b/x-pack/plugins/infra/common/plugin_config_types.ts index 89bbd1dbe4e5b..f3d3a04f3b4c4 100644 --- a/x-pack/plugins/infra/common/plugin_config_types.ts +++ b/x-pack/plugins/infra/common/plugin_config_types.ts @@ -27,6 +27,7 @@ export interface InfraConfig { }; featureFlags: { metricsExplorerEnabled: boolean; + osqueryEnabled: boolean; }; } diff --git a/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx b/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx index 987adf78c33dd..bff9cc1ea17e2 100644 --- a/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx @@ -18,6 +18,7 @@ import React, { useCallback, useMemo } from 'react'; import { capitalize } from 'lodash'; import { useHistory, useLocation } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; +import { usePluginConfig } from '../../../containers/plugin_config_context'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { APM_HOST_FILTER_FIELD } from '../constants'; import { LinkToAlertsRule, LinkToApmServices, LinkToNodeDetails } from '../links'; @@ -107,10 +108,32 @@ const useRightSideItems = (links?: LinkOptions[]) => { return { rightSideItems }; }; +const useFeatureFlagTabs = () => { + const { featureFlags } = usePluginConfig(); + const featureFlagControlledTabs: Partial> = useMemo( + () => ({ + [ContentTabIds.OSQUERY]: featureFlags.osqueryEnabled, + }), + [featureFlags.osqueryEnabled] + ); + + const isTabEnabled = useCallback( + (tabItem: Tab) => { + return featureFlagControlledTabs[tabItem.id] ?? true; + }, + [featureFlagControlledTabs] + ); + + return { + isTabEnabled, + }; +}; + const useTabs = (tabs: Tab[]) => { const { showTab, activeTabId } = useTabSwitcherContext(); const { asset } = useAssetDetailsRenderPropsContext(); const { euiTheme } = useEuiTheme(); + const { isTabEnabled } = useFeatureFlagTabs(); const onTabClick = useCallback( (tabId: TabIds) => { @@ -148,7 +171,7 @@ const useTabs = (tabs: Tab[]) => { const tabEntries: TabItem[] = useMemo( () => - tabs.map(({ name, ...tab }) => { + tabs.filter(isTabEnabled).map(({ name, ...tab }) => { if (tab.id === ContentTabIds.LINK_TO_APM) { return getTabToApmTraces(name); } @@ -161,7 +184,7 @@ const useTabs = (tabs: Tab[]) => { label: name, }; }), - [activeTabId, getTabToApmTraces, onTabClick, tabs] + [activeTabId, isTabEnabled, getTabToApmTraces, onTabClick, tabs] ); return { tabEntries }; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx index a71778cb98d19..b7ff3da85a077 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx @@ -7,10 +7,12 @@ import { EuiSkeletonText } from '@elastic/eui'; import React, { useMemo } from 'react'; +import { usePluginConfig } from '../../../../containers/plugin_config_context'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { useMetadataStateProviderContext } from '../../hooks/use_metadata_state'; export const Osquery = () => { + const { featureFlags } = usePluginConfig(); const { metadata, loading: metadataLoading } = useMetadataStateProviderContext(); const { @@ -22,13 +24,16 @@ export const Osquery = () => { // avoids component rerender when resizing the popover const content = useMemo(() => { + if (!featureFlags.osqueryEnabled) { + return null; + } // TODO: Add info when Osquery plugin is not available if (metadataLoading || !OsqueryAction) { return ; } return ; - }, [OsqueryAction, metadataLoading, metadata]); + }, [featureFlags.osqueryEnabled, metadataLoading, OsqueryAction, metadata?.info?.agent?.id]); return content; }; diff --git a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx index 2b89e4b996da2..e37e1b57a962a 100644 --- a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx +++ b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import type { InfraConfig } from '../../common/plugin_config_types'; import { renderHook } from '@testing-library/react-hooks'; import React from 'react'; import { PluginConfigProvider, usePluginConfig } from './plugin_config_context'; @@ -17,12 +18,14 @@ describe('usePluginConfig()', () => { }); it('returns the plugin config what was set through the provider', () => { - const config = { - featureFlags: { metricsExplorerEnabled: false }, + const config: Partial = { + featureFlags: { metricsExplorerEnabled: false, osqueryEnabled: false }, }; const { result } = renderHook(() => usePluginConfig(), { wrapper: ({ children }) => { - return {children}; + return ( + {children} + ); }, }); diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index c28245ececfef..517f4defeb52a 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -1900,6 +1900,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ }, featureFlags: { metricsExplorerEnabled: true, + osqueryEnabled: true, }, enabled: true, sources, diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index b149838c82b32..d730dde016b98 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -127,6 +127,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ }, featureFlags: { metricsExplorerEnabled: true, + osqueryEnabled: true, }, sources, enabled: true, diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index 50e0779928ecd..0a5f9a6982cbd 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -85,6 +85,10 @@ export const config: PluginConfigDescriptor = { traditional: schema.boolean({ defaultValue: true }), serverless: schema.boolean({ defaultValue: false }), }), + osqueryEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), }), }), deprecations: configDeprecations, From f37716494894cfb4813f9cbefec12ea53f33d7ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:11:00 +0100 Subject: [PATCH 056/170] [APM] Show Profiling data explanation callout (#167968) We want to make it clear to users that the Profiling data shown in the APM UI are filtered by host.names. Screenshot 2023-10-04 at 10 55 48 --- .../host_names_filter_warning.tsx | 3 +- .../app/profiling_overview/index.tsx | 81 +++++++++++++++++-- 2 files changed, 75 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/profiling_overview/host_names_filter_warning.tsx b/x-pack/plugins/apm/public/components/app/profiling_overview/host_names_filter_warning.tsx index 6e6fa196a986e..4d72591f5b871 100644 --- a/x-pack/plugins/apm/public/components/app/profiling_overview/host_names_filter_warning.tsx +++ b/x-pack/plugins/apm/public/components/app/profiling_overview/host_names_filter_warning.tsx @@ -34,7 +34,8 @@ export function HostnamesFilterWarning({ hostNames = [] }: Props) { {i18n.translate('xpack.apm.profiling.flamegraph.filteredLabel', { - defaultMessage: 'Displaying items from specific host names', + defaultMessage: + "Displaying profiling insights from the service's host(s)", })} 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 8cafb3e2beb17..6c6bd7a356d78 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 @@ -6,21 +6,30 @@ */ import { + EuiButton, + EuiCallOut, + EuiFlexGroup, + EuiFlexItem, + EuiLink, EuiSpacer, EuiTabbedContent, EuiTabbedContentProps, } from '@elastic/eui'; -import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import React, { useMemo } from 'react'; +import { ApmDocumentType } from '../../../../common/document_type'; import { useApmParams } from '../../../hooks/use_apm_params'; +import { useLocalStorage } from '../../../hooks/use_local_storage'; +import { usePreferredDataSourceAndBucketSize } from '../../../hooks/use_preferred_data_source_and_bucket_size'; import { useProfilingPlugin } from '../../../hooks/use_profiling_plugin'; import { useTimeRange } from '../../../hooks/use_time_range'; +import { ApmPluginStartDeps } from '../../../plugin'; import { ProfilingFlamegraph } from './profiling_flamegraph'; import { ProfilingTopNFunctions } from './profiling_top_functions'; -import { usePreferredDataSourceAndBucketSize } from '../../../hooks/use_preferred_data_source_and_bucket_size'; -import { ApmDocumentType } from '../../../../common/document_type'; export function ProfilingOverview() { + const { services } = useKibana(); const { path: { serviceName }, query: { rangeFrom, rangeTo, environment, kuery }, @@ -34,6 +43,13 @@ export function ProfilingOverview() { type: ApmDocumentType.TransactionMetric, numBuckets: 20, }); + const [ + apmUniversalProfilingShowCallout, + setAPMUniversalProfilingShowCallout, + ] = useLocalStorage('apmUniversalProfilingShowCallout', true); + + const baseUrl = + services.docLinks?.ELASTIC_WEBSITE_URL || 'https://www.elastic.co/'; const tabs = useMemo((): EuiTabbedContentProps['tabs'] => { return [ @@ -83,10 +99,59 @@ export function ProfilingOverview() { } return ( - + <> + {apmUniversalProfilingShowCallout && ( + <> + +

    + {i18n.translate('xpack.apm.profiling.callout.description', { + defaultMessage: + 'Universal Profiling provides unprecedented code visibility into the runtime behaviour of all applications. It profiles every line of code on the host(s) running your services, including not only your application code but also the kernel and third-party libraries.', + })} +

    + + + + {i18n.translate('xpack.apm.profiling.callout.learnMore', { + defaultMessage: 'Learn more', + })} + + + + { + setAPMUniversalProfilingShowCallout(false); + }} + > + {i18n.translate('xpack.apm.profiling.callout.dismiss', { + defaultMessage: 'Dismiss', + })} + + + +
    + + + )} + + ); } From f0125245ed78b0862f0f0534d48ea7e509420613 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:05:52 +0200 Subject: [PATCH 057/170] [Search] Create connectors page (#167804) ## Summary This adds the ability to create a connector to Serverless Search and edit its name, description and service type. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../lib/create_connector.ts | 5 +- .../update_connector_name_and_description.ts | 3 +- .../serverless_search/common/i18n_string.ts | 12 ++ .../components/connectors/edit_connector.tsx | 119 ++++++++++++++ .../connectors/edit_description.tsx | 134 ++++++++++++++++ .../components/connectors/edit_name.tsx | 132 ++++++++++++++++ .../connectors/edit_service_type.tsx | 88 +++++++++++ .../components/connectors_overview.tsx | 59 +++++-- .../components/connectors_router.tsx | 28 ++++ .../public/application/connectors.tsx | 7 +- .../hooks/api/use_connector_types.tsx | 21 +++ .../public/application/hooks/use_kibana.tsx | 3 +- .../public/application/routes.ts | 1 + .../serverless_search/public/plugin.ts | 8 +- .../server/routes/connectors_routes.ts | 148 +++++++++++++++++- .../plugins/serverless_search/tsconfig.json | 1 + 16 files changed, 744 insertions(+), 25 deletions(-) create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/edit_name.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/edit_service_type.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx diff --git a/packages/kbn-search-connectors/lib/create_connector.ts b/packages/kbn-search-connectors/lib/create_connector.ts index d4ff1230727c8..524fc3c195eac 100644 --- a/packages/kbn-search-connectors/lib/create_connector.ts +++ b/packages/kbn-search-connectors/lib/create_connector.ts @@ -21,8 +21,9 @@ export const createConnector = async ( isNative: boolean; language: string | null; name?: string; - pipeline: IngestPipelineParams; + pipeline?: IngestPipelineParams; serviceType?: string | null; + instant_response?: boolean; } ): Promise => { const document = createConnectorDocument({ @@ -33,7 +34,7 @@ export const createConnector = async ( const result = await client.index({ document, index: CURRENT_CONNECTORS_INDEX, - refresh: 'wait_for', + refresh: input.instant_response ? false : 'wait_for', }); return { ...document, id: result._id }; diff --git a/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts b/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts index 6323387c4259f..985ae8dd029a3 100644 --- a/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts +++ b/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { WriteResponseBase } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; @@ -17,7 +18,7 @@ export const updateConnectorNameAndDescription = async ( client: ElasticsearchClient, connectorId: string, connectorUpdates: Partial> -) => { +): Promise => { const connectorResult = await client.get({ id: connectorId, index: CONNECTORS_INDEX, diff --git a/x-pack/plugins/serverless_search/common/i18n_string.ts b/x-pack/plugins/serverless_search/common/i18n_string.ts index e01e7b6723028..58dbbd985d1d9 100644 --- a/x-pack/plugins/serverless_search/common/i18n_string.ts +++ b/x-pack/plugins/serverless_search/common/i18n_string.ts @@ -15,6 +15,14 @@ export const CANCEL_LABEL: string = i18n.translate('xpack.serverlessSearch.cance defaultMessage: 'Cancel', }); +export const EDIT_LABEL: string = i18n.translate('xpack.serverlessSearch.edit', { + defaultMessage: 'Edit', +}); + +export const SAVE_LABEL: string = i18n.translate('xpack.serverlessSearch.save', { + defaultMessage: 'Save', +}); + export const BACK_LABEL: string = i18n.translate('xpack.serverlessSearch.back', { defaultMessage: 'Back', }); @@ -45,3 +53,7 @@ export const INVALID_JSON_ERROR: string = i18n.translate( defaultMessage: 'Invalid JSON', } ); + +export const CONNECTOR_LABEL: string = i18n.translate('xpack.serverlessSearch.connector', { + defaultMessage: 'Connector', +}); diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx new file mode 100644 index 0000000000000..8fda25a56e658 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx @@ -0,0 +1,119 @@ +/* + * Copyright 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 { + EuiButton, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiPageTemplate, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { useQuery } from '@tanstack/react-query'; +import { Connector } from '@kbn/search-connectors'; +import React from 'react'; +import { useParams } from 'react-router-dom'; +import { i18n } from '@kbn/i18n'; +import { CONNECTOR_LABEL } from '../../../../common/i18n_string'; +import { useKibanaServices } from '../../hooks/use_kibana'; +import { BASE_CONNECTORS_PATH } from '../connectors_router'; +import { EditName } from './edit_name'; +import { EditServiceType } from './edit_service_type'; +import { EditDescription } from './edit_description'; + +export const EditConnector: React.FC = () => { + const { id } = useParams<{ id: string }>(); + const { + application: { navigateToUrl }, + http, + } = useKibanaServices(); + + const { data, isLoading, refetch } = useQuery({ + queryKey: [`fetchConnector${id}`], + queryFn: () => + http.fetch<{ connector: Connector }>(`/internal/serverless_search/connector/${id}`), + }); + + if (isLoading) { + + + {i18n.translate('xpack.serverlessSearch.connectors.loading', { + defaultMessage: 'Loading', + })} + + } + /> + ; + } + if (!data?.connector) { + return ( + + + {i18n.translate('xpack.serverlessSearch.connectors.notFound', { + defaultMessage: 'Could not find a connector with id {id}', + values: { id }, + })} + + } + actions={ + navigateToUrl(BASE_CONNECTORS_PATH)}> + {i18n.translate('xpack.serverlessSearch.connectors.goBack', { + defaultMessage: 'Go back', + })} + + } + /> + + ); + } + + const { connector } = data; + + return ( + + + {CONNECTOR_LABEL} + + + + + + + + + + + + + + + refetch()} + /> + + + + + + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx new file mode 100644 index 0000000000000..de88863059d12 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx @@ -0,0 +1,134 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/react'; +import React, { useEffect, useState } from 'react'; +import { + EuiFlexItem, + EuiFlexGroup, + EuiFieldText, + EuiForm, + EuiButton, + EuiSpacer, + EuiFormRow, + EuiText, + EuiButtonEmpty, +} from '@elastic/eui'; +import { useMutation } from '@tanstack/react-query'; +import { CANCEL_LABEL, EDIT_LABEL, SAVE_LABEL } from '../../../../common/i18n_string'; +import { useKibanaServices } from '../../hooks/use_kibana'; + +interface EditDescriptionProps { + connectorId: string; + description: string; + onSuccess: () => void; +} + +export const EditDescription: React.FC = ({ + connectorId, + description, + onSuccess, +}) => { + const [isEditing, setIsEditing] = useState(false); + const [newDescription, setNewDescription] = useState(description); + const { http } = useKibanaServices(); + + useEffect(() => setNewDescription(description), [description]); + + const { isLoading, isSuccess, mutate } = useMutation({ + mutationFn: async (inputDescription: string) => { + const body = { Description: inputDescription }; + const result = await http.post( + `/internal/serverless_search/connectors/${connectorId}/description`, + { + body: JSON.stringify(body), + } + ); + return result; + }, + }); + + useEffect(() => { + if (isSuccess) { + setIsEditing(false); + onSuccess(); + } + }, [isSuccess, onSuccess]); + + return ( + + + + setIsEditing(true)}> + {EDIT_LABEL} + + } + > + {isEditing ? ( + setNewDescription(event.target.value)} + value={newDescription} + /> + ) : ( + {description} + )} + + + {isEditing && ( + <> + + + + mutate(newDescription)} + type="submit" + size="s" + isLoading={isLoading} + > + {SAVE_LABEL} + + + + { + setNewDescription(description); + setIsEditing(false); + }} + > + {CANCEL_LABEL} + + + + + )} + + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_name.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_name.tsx new file mode 100644 index 0000000000000..a2e033dc8d885 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_name.tsx @@ -0,0 +1,132 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/react'; +import React, { useEffect, useState } from 'react'; +import { + EuiFlexItem, + EuiFlexGroup, + EuiTitle, + EuiButtonIcon, + EuiFieldText, + EuiForm, + EuiButton, + EuiFormLabel, + EuiSpacer, +} from '@elastic/eui'; +import { useMutation } from '@tanstack/react-query'; +import { CANCEL_LABEL, CONNECTOR_LABEL, SAVE_LABEL } from '../../../../common/i18n_string'; +import { useKibanaServices } from '../../hooks/use_kibana'; + +interface EditNameProps { + connectorId: string; + name: string; + onSuccess: () => void; +} + +export const EditName: React.FC = ({ connectorId, name, onSuccess }) => { + const [isEditing, setIsEditing] = useState(false); + const [newName, setNewName] = useState(name); + const { http } = useKibanaServices(); + + useEffect(() => setNewName(name), [name]); + + const { isLoading, isSuccess, mutate } = useMutation({ + mutationFn: async (inputName: string) => { + const body = { name: inputName }; + const result = await http.post(`/internal/serverless_search/connectors/${connectorId}/name`, { + body: JSON.stringify(body), + }); + return result; + }, + }); + + useEffect(() => { + if (isSuccess) { + setIsEditing(false); + onSuccess(); + } + }, [isSuccess, onSuccess]); + + return ( + + {!isEditing ? ( + <> + + +

    {name || CONNECTOR_LABEL}

    +
    +
    + + setIsEditing(true)} + /> + + + ) : ( + + + + {i18n.translate('xpack.serverlessSearch.connectors.nameLabel', { + defaultMessage: 'Name', + })} + + setNewName(event.target.value)} value={newName} /> + + + + + mutate(newName)} + size="s" + isLoading={isLoading} + > + {SAVE_LABEL} + + + + { + setNewName(name); + setIsEditing(false); + }} + > + {CANCEL_LABEL} + + + + + )} +
    + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_service_type.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_service_type.tsx new file mode 100644 index 0000000000000..d954d2df11d52 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_service_type.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import React, { useEffect } from 'react'; +import { + EuiFlexItem, + EuiFlexGroup, + EuiForm, + EuiFormLabel, + EuiIcon, + EuiSuperSelect, +} from '@elastic/eui'; +import { useMutation } from '@tanstack/react-query'; +import { useKibanaServices } from '../../hooks/use_kibana'; +import { useConnectorTypes } from '../../hooks/api/use_connector_types'; + +interface EditServiceTypeProps { + connectorId: string; + serviceType: string; + onSuccess: () => void; +} + +export const EditServiceType: React.FC = ({ + connectorId, + serviceType, + onSuccess, +}) => { + const { http } = useKibanaServices(); + const { data: connectorTypes } = useConnectorTypes(); + + const options = + connectorTypes?.connectors.map((connectorType) => ({ + inputDisplay: ( + + + + + {connectorType.name} + + ), + value: connectorType.serviceType, + })) || []; + + const { isLoading, isSuccess, mutate } = useMutation({ + mutationFn: async (inputServiceType: string) => { + const body = { service_type: inputServiceType }; + const result = await http.post( + `/internal/serverless_search/connectors/${connectorId}/service_type`, + { + body: JSON.stringify(body), + } + ); + return result; + }, + }); + + useEffect(() => { + if (isSuccess) { + onSuccess(); + } + }, [isSuccess, onSuccess]); + + return ( + + + {i18n.translate('xpack.serverlessSearch.connectors.serviceTypeLabel', { + defaultMessage: 'Connector type', + })} + + mutate(event)} + options={options} + valueOfSelected={serviceType ?? ''} + /> + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx index c46a43879622d..8ad239c020d01 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx @@ -17,18 +17,23 @@ import { EuiTitle, EuiToolTip, } from '@elastic/eui'; -import { Connector, ConnectorServerSideDefinition } from '@kbn/search-connectors'; +import { Connector } from '@kbn/search-connectors'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useQuery } from '@tanstack/react-query'; -import React from 'react'; +import { useMutation, useQuery } from '@tanstack/react-query'; +import React, { useEffect } from 'react'; import { LEARN_MORE_LABEL } from '../../../common/i18n_string'; import { PLUGIN_ID } from '../../../common'; import { useKibanaServices } from '../hooks/use_kibana'; +import { CREATE_CONNECTOR_PATH } from './connectors_router'; +import { useConnectorTypes } from '../hooks/api/use_connector_types'; export const ConnectorsOverview = () => { - const { http } = useKibanaServices(); + const { + application: { navigateToUrl }, + http, + } = useKibanaServices(); const assetBasePath = http.basePath.prepend(`/plugins/${PLUGIN_ID}/assets`); const connectorsPath = assetBasePath + '/connectors.svg'; @@ -39,19 +44,35 @@ export const ConnectorsOverview = () => { http.fetch<{ connectors: Connector[] }>('/internal/serverless_search/connectors'), }); - const { data: connectorTypes } = useQuery({ - queryKey: ['fetchConnectorTypes'], - queryFn: () => - http.fetch<{ connectors: ConnectorServerSideDefinition[] }>( - '/internal/serverless_search/connector_types' - ), + const { data: connectorTypes } = useConnectorTypes(); + + const { + data: connector, + isLoading, + isSuccess, + mutate, + } = useMutation({ + mutationFn: async () => { + const result = await http.post<{ connector: Connector }>( + '/internal/serverless_search/connectors' + ); + return result.connector; + }, }); + + useEffect(() => { + navigateToUrl(`${CREATE_CONNECTOR_PATH}/${connector?.id}`); + }, [connector, isSuccess, navigateToUrl]); + + const createConnector = () => mutate(); + return ( @@ -79,7 +100,12 @@ export const ConnectorsOverview = () => { - + createConnector()} + > {i18n.translate('xpack.serverlessSearch.connectors.createConnector', { defaultMessage: 'Create connector', })} @@ -107,7 +133,7 @@ export const ConnectorsOverview = () => { {(data?.connectors || []).length > 0 ? ( <> ) : ( - + @@ -248,7 +274,12 @@ export const ConnectorsOverview = () => { - + createConnector()} + > {i18n.translate('xpack.serverlessSearch.connectorsEmpty.createConnector', { defaultMessage: 'Create connector', })} @@ -269,7 +300,7 @@ export const ConnectorsOverview = () => { {connectorTypes?.connectors.map((connectorType) => ( - + { + return ( + + + + + + + + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/connectors.tsx b/x-pack/plugins/serverless_search/public/application/connectors.tsx index bcdd4d4168e44..fe78131ea4547 100644 --- a/x-pack/plugins/serverless_search/public/application/connectors.tsx +++ b/x-pack/plugins/serverless_search/public/application/connectors.tsx @@ -16,6 +16,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import ReactDOM from 'react-dom'; import React from 'react'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { Router } from '@kbn/shared-ux-router'; import { ServerlessSearchContext } from './hooks/use_kibana'; export async function renderApp( @@ -23,7 +24,7 @@ export async function renderApp( core: CoreStart, services: ServerlessSearchContext ) { - const { ConnectorsOverview } = await import('./components/connectors_overview'); + const { ConnectorsRouter } = await import('./components/connectors_router'); const queryClient = new QueryClient(); ReactDOM.render( @@ -31,7 +32,9 @@ export async function renderApp( - + + + diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx new file mode 100644 index 0000000000000..a848d9cb5e13e --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.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 { ConnectorServerSideDefinition } from '@kbn/search-connectors'; +import { useQuery } from '@tanstack/react-query'; +import { useKibanaServices } from '../use_kibana'; + +export const useConnectorTypes = () => { + const { http } = useKibanaServices(); + return useQuery({ + queryKey: ['fetchConnectorTypes'], + queryFn: () => + http.fetch<{ connectors: ConnectorServerSideDefinition[] }>( + '/internal/serverless_search/connector_types' + ), + }); +}; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/use_kibana.tsx b/x-pack/plugins/serverless_search/public/application/hooks/use_kibana.tsx index 48df795609213..6d3a37651bb35 100644 --- a/x-pack/plugins/serverless_search/public/application/hooks/use_kibana.tsx +++ b/x-pack/plugins/serverless_search/public/application/hooks/use_kibana.tsx @@ -6,13 +6,14 @@ */ import { CloudStart } from '@kbn/cloud-plugin/public'; -import type { CoreStart } from '@kbn/core/public'; +import type { AppMountParameters, CoreStart } from '@kbn/core/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import { useKibana as useKibanaBase } from '@kbn/kibana-react-plugin/public'; import { AuthenticatedUser } from '@kbn/security-plugin/common'; export interface ServerlessSearchContext { cloud: CloudStart; + history: AppMountParameters['history']; share: SharePluginStart; user?: AuthenticatedUser; } diff --git a/x-pack/plugins/serverless_search/public/application/routes.ts b/x-pack/plugins/serverless_search/public/application/routes.ts index bace5c55d54e2..2def1d368088c 100644 --- a/x-pack/plugins/serverless_search/public/application/routes.ts +++ b/x-pack/plugins/serverless_search/public/application/routes.ts @@ -10,3 +10,4 @@ export const MANAGEMENT_API_KEYS = '/app/management/security/api_keys'; // Server Routes export const CREATE_API_KEY_PATH = '/internal/security/api_key'; export const FETCH_INDICES_PATH = '/internal/serverless_search/indices'; +export const CREATE_CONNECTOR_PATH = '/internal/connectors'; diff --git a/x-pack/plugins/serverless_search/public/plugin.ts b/x-pack/plugins/serverless_search/public/plugin.ts index d8dfb1224de7b..6f1cb6465106c 100644 --- a/x-pack/plugins/serverless_search/public/plugin.ts +++ b/x-pack/plugins/serverless_search/public/plugin.ts @@ -45,7 +45,7 @@ export class ServerlessSearchPlugin euiIconType: 'logoElastic', category: DEFAULT_APP_CATEGORIES.enterpriseSearch, appRoute: '/app/elasticsearch', - async mount({ element }: AppMountParameters) { + async mount({ element, history }: AppMountParameters) { const { renderApp } = await import('./application/elasticsearch'); const [coreStart, services] = await core.getStartServices(); const { security } = services; @@ -58,7 +58,7 @@ export class ServerlessSearchPlugin user = undefined; } - return await renderApp(element, coreStart, { user, ...services }); + return await renderApp(element, coreStart, { history, user, ...services }); }, }); @@ -71,12 +71,12 @@ export class ServerlessSearchPlugin euiIconType: 'logoElastic', category: DEFAULT_APP_CATEGORIES.enterpriseSearch, searchable: false, - async mount({ element }: AppMountParameters) { + async mount({ element, history }: AppMountParameters) { const { renderApp } = await import('./application/connectors'); const [coreStart, services] = await core.getStartServices(); docLinks.setDocLinks(coreStart.docLinks.links); - return await renderApp(element, coreStart, { ...services }); + return await renderApp(element, coreStart, { history, ...services }); }, }); diff --git a/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts b/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts index 766564bb9eaa7..c1ee31f4326c9 100644 --- a/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts +++ b/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts @@ -5,7 +5,15 @@ * 2.0. */ -import { CONNECTOR_DEFINITIONS, fetchConnectors } from '@kbn/search-connectors'; +import { schema } from '@kbn/config-schema'; +import { + CONNECTOR_DEFINITIONS, + createConnector, + fetchConnectorById, + fetchConnectors, + updateConnectorNameAndDescription, + updateConnectorServiceType, +} from '@kbn/search-connectors'; import { RouteDependencies } from '../plugin'; export const registerConnectorsRoutes = ({ http, router }: RouteDependencies) => { @@ -27,6 +35,30 @@ export const registerConnectorsRoutes = ({ http, router }: RouteDependencies) => } ); + router.get( + { + path: '/internal/serverless_search/connector/{connectorId}', + validate: { + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await fetchConnectorById(client.asCurrentUser, request.params.connectorId); + + return result + ? response.ok({ + body: { + connector: result.value, + }, + headers: { 'content-type': 'application/json' }, + }) + : response.notFound(); + } + ); + router.get( { path: '/internal/serverless_search/connector_types', @@ -50,4 +82,118 @@ export const registerConnectorsRoutes = ({ http, router }: RouteDependencies) => }); } ); + + router.post( + { + path: '/internal/serverless_search/connectors', + validate: {}, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const connector = await createConnector(client.asCurrentUser, { + indexName: null, + instant_response: true, + isNative: false, + language: null, + }); + + return response.ok({ + body: { + connector, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); + + router.post( + { + path: '/internal/serverless_search/connectors/{connectorId}/name', + validate: { + body: schema.object({ + name: schema.string(), + }), + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await updateConnectorNameAndDescription( + client.asCurrentUser, + request.params.connectorId, + { + name: request.body.name, + } + ); + + return response.ok({ + body: { + result, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); + + router.post( + { + path: '/internal/serverless_search/connectors/{connectorId}/description', + validate: { + body: schema.object({ + description: schema.string(), + }), + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await updateConnectorNameAndDescription( + client.asCurrentUser, + request.params.connectorId, + { + description: request.body.description, + } + ); + + return response.ok({ + body: { + result, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); + + router.post( + { + path: '/internal/serverless_search/connectors/{connectorId}/service_type', + validate: { + body: schema.object({ + service_type: schema.string(), + }), + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await updateConnectorServiceType( + client.asCurrentUser, + request.params.connectorId, + request.body.service_type + ); + + return response.ok({ + body: { + result, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); }; diff --git a/x-pack/plugins/serverless_search/tsconfig.json b/x-pack/plugins/serverless_search/tsconfig.json index 925b1536baaae..6bd4d6c91525a 100644 --- a/x-pack/plugins/serverless_search/tsconfig.json +++ b/x-pack/plugins/serverless_search/tsconfig.json @@ -34,5 +34,6 @@ "@kbn/core-lifecycle-browser", "@kbn/react-kibana-context-theme", "@kbn/search-connectors", + "@kbn/shared-ux-router", ] } From 9063383a76a888a78f51300bfc156772a4435f2b Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 4 Oct 2023 14:44:56 +0200 Subject: [PATCH 058/170] Give @pheyos and @dmlemeshko permissions to create deploy tags (#167985) --- .github/workflows/create-deploy-tag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-deploy-tag.yml b/.github/workflows/create-deploy-tag.yml index 76bf21c0b723d..d7fc7b04a55a4 100644 --- a/.github/workflows/create-deploy-tag.yml +++ b/.github/workflows/create-deploy-tag.yml @@ -19,7 +19,7 @@ concurrency: jobs: create-deploy-tag: # Temporary, we need a way to limit this to a GitHub team instead of specific users - if: contains('["watson","clintandrewhall","kobelb","lukeelmers","thomasneirynck","jbudz","mistic","delanni","Ikuni17"]', github.triggering_actor) + if: contains('["watson","clintandrewhall","kobelb","lukeelmers","thomasneirynck","jbudz","mistic","delanni","Ikuni17","pheyos","dmlemeshko"]', github.triggering_actor) runs-on: ubuntu-latest permissions: contents: write From 0705e22d901c181ac3fc856043cb6803f5cee502 Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Wed, 4 Oct 2023 08:51:39 -0400 Subject: [PATCH 059/170] [Fleet] Fix TS expect-error in experimental features helper (#167875) ## Summary The rest of the ts-expect-error comments mentioned in the linked issue are no longer present. Closes #163376 Verified feature flags still work (I really hope TS type updates wouldn't break anything) just to be safe as well: ![image](https://github.com/elastic/kibana/assets/6766512/6bfe8d47-8014-4f98-bacc-e1c0be2eb034) --- x-pack/plugins/fleet/common/experimental_features.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index e9d7184928046..fec0a9ad045eb 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -11,7 +11,7 @@ export type ExperimentalFeatures = typeof allowedExperimentalValues; * A list of allowed values that can be used in `xpack.fleet.enableExperimental`. * This object is then used to validate and parse the value entered. */ -export const allowedExperimentalValues = Object.freeze({ +export const allowedExperimentalValues = Object.freeze>({ createPackagePolicyMultiPageLayout: true, packageVerification: true, showDevtoolsRequest: true, @@ -39,15 +39,14 @@ const allowedKeys = Object.keys(allowedExperimentalValues) as Readonly { - const enabledFeatures: Mutable> = {}; + const enabledFeatures: Mutable = {}; for (const value of configValue) { if (!isValidExperimentalValue(value)) { throw new FleetInvalidExperimentalValue(`[${value}] is not a supported experimental feature`); } - // @ts-expect-error ts upgrade v4.7.4 - enabledFeatures[value as keyof ExperimentalFeatures] = true; + enabledFeatures[value] = true; } return { @@ -57,7 +56,7 @@ export const parseExperimentalConfigValue = (configValue: string[]): Experimenta }; export const isValidExperimentalValue = (value: string) => { - return allowedKeys.includes(value as keyof ExperimentalFeatures); + return allowedKeys.includes(value); }; export const getExperimentalAllowedValues = (): string[] => [...allowedKeys]; From 48be97bea22de937219f89758f20b5850e85d6ab Mon Sep 17 00:00:00 2001 From: Mykola Harmash Date: Wed, 4 Oct 2023 15:06:55 +0200 Subject: [PATCH 060/170] [Infra UI] Add custom threshold alerts for serverless (#167639) Closes https://github.com/elastic/kibana/issues/166612 ## Summary - Adds a `customThresholdAlertsEnabled` feature flag - Based on the feature flag shows an additional menu item in the alerts dropdown - Adds flyout component for rendering the custom alerts flyout **Serverless** **Traditional** ![Traditional](https://github.com/elastic/kibana/assets/793851/b2c16478-a40d-4312-a41e-5e34c98daa47) ## How to test - Checkout locally and run in serverless mode (infra plugin on) - Make sure you see the "Create custom threshold alert" menu item in the "Alerts and rules" dropdown - Click on the item and make sure you can create an alert - Run Kibana in traditional mode and make sure the dropdown item is not there --- .../test_suites/core_plugins/rendering.ts | 5 +++ .../infra/common/plugin_config_types.ts | 1 + x-pack/plugins/infra/kibana.jsonc | 1 + .../components/metrics_alert_dropdown.tsx | 35 ++++++++++++---- .../components/alert_flyout.tsx | 34 +++++++++++++++ .../public/alerting/custom_threshold/index.ts | 8 ++++ .../components/alert_flyout.tsx | 2 +- .../containers/plugin_config_context.test.tsx | 6 ++- .../metric_threshold_executor.test.ts | 1 + .../infra/server/lib/sources/sources.test.ts | 1 + x-pack/plugins/infra/server/plugin.ts | 4 ++ .../test/functional/apps/infra/home_page.ts | 7 ++++ .../page_objects/infra_home_page.ts | 8 ++++ .../test_suites/observability/config.ts | 1 + .../test_suites/observability/index.ts | 1 + .../observability/infra/constants.ts | 8 ++++ .../observability/infra/header_menu.ts | 41 +++++++++++++++++++ .../test_suites/observability/infra/index.ts | 14 +++++++ 18 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx create mode 100644 x-pack/plugins/infra/public/alerting/custom_threshold/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/infra/constants.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/infra/header_menu.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/infra/index.ts diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 87e3b2077bcb5..9c6d933f2bd25 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -256,6 +256,11 @@ export default function ({ getService }: PluginFunctionalProviderContext) { * and will resolve to (boolean) */ 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', + /** + * xpack.infra.featureFlags.customThresholdAlertsEnabled is conditional based on traditional/serverless offering + * and will resolve to (boolean) + */ + 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', /** * xpack.infra.featureFlags.osqueryEnabled is conditional based on traditional/serverless offering * and will resolve to (boolean) diff --git a/x-pack/plugins/infra/common/plugin_config_types.ts b/x-pack/plugins/infra/common/plugin_config_types.ts index f3d3a04f3b4c4..17a08ab60ec94 100644 --- a/x-pack/plugins/infra/common/plugin_config_types.ts +++ b/x-pack/plugins/infra/common/plugin_config_types.ts @@ -27,6 +27,7 @@ export interface InfraConfig { }; featureFlags: { metricsExplorerEnabled: boolean; + customThresholdAlertsEnabled: boolean; osqueryEnabled: boolean; }; } diff --git a/x-pack/plugins/infra/kibana.jsonc b/x-pack/plugins/infra/kibana.jsonc index 60731cf699ccd..439ccd061f0a4 100644 --- a/x-pack/plugins/infra/kibana.jsonc +++ b/x-pack/plugins/infra/kibana.jsonc @@ -15,6 +15,7 @@ "charts", "data", "dataViews", + "dataViewEditor", "discover", "embeddable", "features", diff --git a/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx b/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx index f429a743250c8..e80da08fc082e 100644 --- a/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx +++ b/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx @@ -15,15 +15,17 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { usePluginConfig } from '../../../containers/plugin_config_context'; import { PrefilledInventoryAlertFlyout } from '../../inventory/components/alert_flyout'; -import { PrefilledThresholdAlertFlyout } from '../../metric_threshold/components/alert_flyout'; +import { PrefilledMetricThresholdAlertFlyout } from '../../metric_threshold/components/alert_flyout'; +import { AlertFlyout as CustomThresholdAlertFlyout } from '../../custom_threshold'; import { InfraClientStartDeps } from '../../../types'; -type VisibleFlyoutType = 'inventory' | 'threshold' | null; +type VisibleFlyoutType = 'inventory' | 'metricThreshold' | 'customThreshold'; export const MetricsAlertDropdown = () => { const [popoverOpen, setPopoverOpen] = useState(false); - const [visibleFlyoutType, setVisibleFlyoutType] = useState(null); + const [visibleFlyoutType, setVisibleFlyoutType] = useState(null); const uiCapabilities = useKibana().services.application?.capabilities; const { services: { observability }, @@ -32,6 +34,7 @@ export const MetricsAlertDropdown = () => { () => Boolean(uiCapabilities?.infrastructure?.save), [uiCapabilities] ); + const { featureFlags } = usePluginConfig(); const closeFlyout = useCallback(() => setVisibleFlyoutType(null), [setVisibleFlyoutType]); @@ -78,7 +81,7 @@ export const MetricsAlertDropdown = () => { }), onClick: () => { closePopover(); - setVisibleFlyoutType('threshold'); + setVisibleFlyoutType('metricThreshold'); }, }, ], @@ -117,10 +120,24 @@ export const MetricsAlertDropdown = () => { }), panel: 2, }, + ...(featureFlags.customThresholdAlertsEnabled + ? [ + { + 'data-test-subj': 'custom-threshold-alerts-menu-option', + name: i18n.translate('xpack.infra.alerting.customThresholdDropdownMenu', { + defaultMessage: 'Create custom threshold rule', + }), + onClick: () => { + closePopover(); + setVisibleFlyoutType('customThreshold'); + }, + }, + ] + : []), manageAlertsMenuItem, ] : [manageAlertsMenuItem], - [canCreateAlerts, manageAlertsMenuItem] + [canCreateAlerts, closePopover, featureFlags.customThresholdAlertsEnabled, manageAlertsMenuItem] ); const panels: EuiContextMenuPanelDescriptor[] = useMemo( @@ -167,7 +184,7 @@ export const MetricsAlertDropdown = () => { }; interface AlertFlyoutProps { - visibleFlyoutType: VisibleFlyoutType; + visibleFlyoutType: VisibleFlyoutType | null; onClose(): void; } @@ -175,8 +192,10 @@ const AlertFlyout = ({ visibleFlyoutType, onClose }: AlertFlyoutProps) => { switch (visibleFlyoutType) { case 'inventory': return ; - case 'threshold': - return ; + case 'metricThreshold': + return ; + case 'customThreshold': + return ; default: return null; } diff --git a/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx b/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx new file mode 100644 index 0000000000000..3e064d26159e4 --- /dev/null +++ b/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useContext, useMemo } from 'react'; +import type { RuleAddProps } from '@kbn/triggers-actions-ui-plugin/public/types'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { TriggerActionsContext } from '../../../utils/triggers_actions_context'; + +interface Props { + onClose: RuleAddProps['onClose']; +} + +export function AlertFlyout({ onClose }: Props) { + const { triggersActionsUI } = useContext(TriggerActionsContext); + + const addAlertFlyout = useMemo(() => { + if (!triggersActionsUI) { + return null; + } + + return triggersActionsUI.getAddRuleFlyout({ + consumer: 'infrastructure', + onClose, + canChangeTrigger: false, + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + }); + }, [onClose, triggersActionsUI]); + + return addAlertFlyout; +} diff --git a/x-pack/plugins/infra/public/alerting/custom_threshold/index.ts b/x-pack/plugins/infra/public/alerting/custom_threshold/index.ts new file mode 100644 index 0000000000000..1baf0836ff462 --- /dev/null +++ b/x-pack/plugins/infra/public/alerting/custom_threshold/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { AlertFlyout } from './components/alert_flyout'; diff --git a/x-pack/plugins/infra/public/alerting/metric_threshold/components/alert_flyout.tsx b/x-pack/plugins/infra/public/alerting/metric_threshold/components/alert_flyout.tsx index d4bf8a395d528..c68f3ad0f2bcf 100644 --- a/x-pack/plugins/infra/public/alerting/metric_threshold/components/alert_flyout.tsx +++ b/x-pack/plugins/infra/public/alerting/metric_threshold/components/alert_flyout.tsx @@ -43,7 +43,7 @@ export const AlertFlyout = (props: Props) => { return <>{visible && AddAlertFlyout}; }; -export const PrefilledThresholdAlertFlyout = ({ onClose }: { onClose(): void }) => { +export const PrefilledMetricThresholdAlertFlyout = ({ onClose }: { onClose(): void }) => { const { metricThresholdPrefill } = useAlertPrefillContext(); const { groupBy, filterQuery, metrics } = metricThresholdPrefill; diff --git a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx index e37e1b57a962a..e3d3c3f28de11 100644 --- a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx +++ b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx @@ -19,7 +19,11 @@ describe('usePluginConfig()', () => { it('returns the plugin config what was set through the provider', () => { const config: Partial = { - featureFlags: { metricsExplorerEnabled: false, osqueryEnabled: false }, + featureFlags: { + metricsExplorerEnabled: false, + osqueryEnabled: false, + customThresholdAlertsEnabled: true, + }, }; const { result } = renderHook(() => usePluginConfig(), { wrapper: ({ children }) => { diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 517f4defeb52a..0752c75b198c3 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -1900,6 +1900,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ }, featureFlags: { metricsExplorerEnabled: true, + customThresholdAlertsEnabled: false, osqueryEnabled: true, }, enabled: true, diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index d730dde016b98..53d7b8979de96 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -127,6 +127,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ }, featureFlags: { metricsExplorerEnabled: true, + customThresholdAlertsEnabled: false, osqueryEnabled: true, }, sources, diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index 0a5f9a6982cbd..4aeb0971dde8d 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -85,6 +85,10 @@ export const config: PluginConfigDescriptor = { traditional: schema.boolean({ defaultValue: true }), serverless: schema.boolean({ defaultValue: false }), }), + customThresholdAlertsEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: false }), + serverless: schema.boolean({ defaultValue: true }), + }), osqueryEnabled: offeringBasedSchema({ traditional: schema.boolean({ defaultValue: true }), serverless: schema.boolean({ defaultValue: false }), diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index e3fccf35090e2..74cc8a1951cb4 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -373,6 +373,13 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.infraHome.ensurePopoverClosed(); }); }); + + it('should not have an option to create custom threshold alert', async () => { + await pageObjects.infraHome.clickAlertsAndRules(); + await pageObjects.infraHome.ensurePopoverOpened(); + await pageObjects.infraHome.ensureCustomThresholdAlertMenuItemIsMissing(); + await pageObjects.infraHome.clickAlertsAndRules(); + }); }); describe('Saved Views', () => { diff --git a/x-pack/test/functional/page_objects/infra_home_page.ts b/x-pack/test/functional/page_objects/infra_home_page.ts index 31fb805b69d22..fed82fb94bd5c 100644 --- a/x-pack/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/test/functional/page_objects/infra_home_page.ts @@ -359,6 +359,14 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide await testSubjects.missingOrFail('metrics-alert-menu'); }, + async ensureCustomThresholdAlertMenuItemIsVisible() { + await testSubjects.existOrFail('custom-threshold-alerts-menu-option'); + }, + + async ensureCustomThresholdAlertMenuItemIsMissing() { + await testSubjects.missingOrFail('custom-threshold-alerts-menu-option'); + }, + async dismissDatePickerTooltip() { const isTooltipOpen = await testSubjects.exists(`waffleDatePickerIntervalTooltip`, { timeout: 1000, diff --git a/x-pack/test_serverless/functional/test_suites/observability/config.ts b/x-pack/test_serverless/functional/test_suites/observability/config.ts index 725c7df80c1cb..57e6894e3b892 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/config.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/config.ts @@ -18,4 +18,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml esServerArgs: ['xpack.ml.dfa.enabled=false', 'xpack.ml.nlp.enabled=false'], + kbnServerArgs: ['--xpack.infra.enabled=true'], }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/index.ts b/x-pack/test_serverless/functional/test_suites/observability/index.ts index cf624004cd3cb..b7447757fef28 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/index.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/index.ts @@ -18,6 +18,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./cases/create_case_form')); loadTestFile(require.resolve('./cases/list_view')); loadTestFile(require.resolve('./advanced_settings')); + loadTestFile(require.resolve('./infra')); loadTestFile(require.resolve('./ml')); }); } diff --git a/x-pack/test_serverless/functional/test_suites/observability/infra/constants.ts b/x-pack/test_serverless/functional/test_suites/observability/infra/constants.ts new file mode 100644 index 0000000000000..5dd9e6949fafa --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/infra/constants.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 HOSTS_VIEW_PATH = 'metrics/hosts'; diff --git a/x-pack/test_serverless/functional/test_suites/observability/infra/header_menu.ts b/x-pack/test_serverless/functional/test_suites/observability/infra/header_menu.ts new file mode 100644 index 0000000000000..4ac018e4bd912 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/infra/header_menu.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +import { HOSTS_VIEW_PATH } from './constants'; + +export default ({ getPageObjects, getService }: FtrProviderContext) => { + const esArchiver = getService('esArchiver'); + const pageObjects = getPageObjects(['svlCommonPage', 'common', 'infraHome', 'header']); + + describe('Header menu', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await pageObjects.svlCommonPage.login(); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await pageObjects.svlCommonPage.forceLogout(); + }); + + describe('Alerts dropdown', () => { + beforeEach(async () => { + await pageObjects.common.navigateToApp(HOSTS_VIEW_PATH); + await pageObjects.header.waitUntilLoadingHasFinished(); + }); + + it('should have menu item to create a custom threshold alert', async () => { + await pageObjects.infraHome.clickAlertsAndRules(); + await pageObjects.infraHome.ensurePopoverOpened(); + await pageObjects.infraHome.ensureCustomThresholdAlertMenuItemIsVisible(); + await pageObjects.infraHome.clickAlertsAndRules(); + }); + }); + }); +}; diff --git a/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts b/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts new file mode 100644 index 0000000000000..c7096467f71bc --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Observability Infra', function () { + loadTestFile(require.resolve('./header_menu')); + }); +} From 4c5c6de84e663d20fadc1d9376a116c250f587eb Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Wed, 4 Oct 2023 15:10:18 +0200 Subject: [PATCH 061/170] [Infra UI] Enable infra nav in serverless (#167049) ## Summary This PR adds the `Infrastructure` item to the serverless side-nav _infra enabled_ image _infra disabled_ image Stateful Kibana isn't affected by this change. ### How to test - Start a local es instance: `yarn es serverless --kill --clean --license trial --ssl` - Enable `infra` in the `serverless.oblt.dev.yml` file: - `xpack.infra.enabled: true` - Start a local kibana instance: `yarn serverless-oblt --ssl` and see if the side nav contains the Infrastructure item - Disable infra and check if the side nav does not contain the infrastructure item. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../deeplinks/observability/deep_links.ts | 2 +- x-pack/plugins/infra/public/plugin.ts | 21 ++++++++++------- .../components/side_navigation/index.tsx | 23 +++++++++++++++++++ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/packages/deeplinks/observability/deep_links.ts b/packages/deeplinks/observability/deep_links.ts index 1d405c1a20620..844d68fdb27cc 100644 --- a/packages/deeplinks/observability/deep_links.ts +++ b/packages/deeplinks/observability/deep_links.ts @@ -40,7 +40,7 @@ export type ObservabilityOverviewLinkId = | 'rules' | 'slos'; -export type MetricsLinkId = 'inventory' | 'metrics-explorer' | 'metrics-hosts' | 'settings'; +export type MetricsLinkId = 'inventory' | 'metrics-explorer' | 'hosts' | 'settings'; export type ApmLinkId = | 'services' diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index b5c719be216f7..fe6c42ab43248 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -6,9 +6,11 @@ */ import { - AppMountParameters, - AppUpdater, - CoreStart, + type AppMountParameters, + type AppUpdater, + type CoreStart, + type AppDeepLink, + AppNavLinkStatus, DEFAULT_APP_CATEGORIES, PluginInitializerContext, } from '@kbn/core/public'; @@ -17,7 +19,7 @@ import { enableInfrastructureHostsView } from '@kbn/observability-plugin/public' import { ObservabilityTriggerId } from '@kbn/observability-shared-plugin/common'; import { BehaviorSubject, combineLatest, from } from 'rxjs'; import { map } from 'rxjs/operators'; -import { InfraPublicConfig } from '../common/plugin_config_types'; +import type { InfraPublicConfig } from '../common/plugin_config_types'; import { createInventoryMetricRuleType } from './alerting/inventory'; import { createLogThresholdRuleType } from './alerting/log_threshold'; import { createMetricThresholdRuleType } from './alerting/metric_threshold'; @@ -27,7 +29,7 @@ import { createLazyPodMetricsTable } from './components/infrastructure_node_metr import { LOG_STREAM_EMBEDDABLE } from './components/log_stream/log_stream_embeddable'; import { LogStreamEmbeddableFactoryDefinition } from './components/log_stream/log_stream_embeddable_factory'; import { - InfraLocators, + type InfraLocators, LogsLocatorDefinition, NodeLogsLocatorDefinition, } from '../common/locators'; @@ -36,7 +38,7 @@ import { registerFeatures } from './register_feature'; import { InventoryViewsService } from './services/inventory_views'; import { MetricsExplorerViewsService } from './services/metrics_explorer_views'; import { TelemetryService } from './services/telemetry'; -import { +import type { InfraClientCoreSetup, InfraClientCoreStart, InfraClientPluginClass, @@ -220,20 +222,22 @@ export class Plugin implements InfraClientPluginClass { }); // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/metrics/index.tsx - const infraDeepLinks = [ + const infraDeepLinks: AppDeepLink[] = [ { id: 'inventory', title: i18n.translate('xpack.infra.homePage.inventoryTabTitle', { defaultMessage: 'Inventory', }), path: '/inventory', + navLinkStatus: AppNavLinkStatus.visible, }, { - id: 'metrics-hosts', + id: 'hosts', title: i18n.translate('xpack.infra.homePage.metricsHostsTabTitle', { defaultMessage: 'Hosts', }), path: '/hosts', + navLinkStatus: AppNavLinkStatus.visible, }, ...(this.config.featureFlags.metricsExplorerEnabled ? [ @@ -254,6 +258,7 @@ export class Plugin implements InfraClientPluginClass { path: '/settings', }, ]; + core.application.register({ id: 'metrics', title: i18n.translate('xpack.infra.metrics.pluginTitle', { diff --git a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx index f0c012c19f564..d65011200b90d 100644 --- a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx +++ b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx @@ -124,6 +124,29 @@ const navigationTree: NavigationTreeDefinition = { }, ], }, + { + id: 'metrics', + title: i18n.translate('xpack.serverlessObservability.nav.infrastructure', { + defaultMessage: 'Infrastructure', + }), + accordionProps: { + arrowProps: { css: { display: 'none' } }, + }, + children: [ + { + link: 'metrics:inventory', + getIsActive: ({ pathNameSerialized, prepend }) => { + return pathNameSerialized.startsWith(prepend('/app/metrics/inventory')); + }, + }, + { + link: 'metrics:hosts', + getIsActive: ({ pathNameSerialized, prepend }) => { + return pathNameSerialized.startsWith(prepend('/app/metrics/hosts')); + }, + }, + ], + }, { id: 'groups-spacer-2', isGroupTitle: true, From 4c233537ea8215125fe2747e758bc71e607c7f06 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Wed, 4 Oct 2023 08:12:29 -0600 Subject: [PATCH 062/170] [Event annotations] Cache annotation group metadata (#167822) ## Summary Fix https://github.com/elastic/kibana/issues/166855 Fix https://github.com/elastic/kibana/issues/167817 ### 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 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../annotation_editor_controls.tsx | 2 ++ .../components/color_picker.tsx | 6 ++++-- .../actions/revert_changes_action.tsx | 5 +++-- .../xy/annotations/actions/save_action.tsx | 14 +++++++++----- .../xy/annotations/actions/unlink_action.tsx | 3 ++- .../public/visualizations/xy/state_helpers.ts | 6 ++++++ .../lens/public/visualizations/xy/types.ts | 7 +++++++ .../visualizations/xy/visualization.test.tsx | 17 +++++++++++++++++ .../public/visualizations/xy/visualization.tsx | 3 ++- .../visualizations/xy/visualization_helpers.tsx | 17 +++++++++++++++++ .../xy/xy_config_panel/layer_header.test.tsx | 9 +++++++++ .../xy/xy_config_panel/layer_header.tsx | 4 ++-- 12 files changed, 80 insertions(+), 13 deletions(-) diff --git a/packages/kbn-event-annotation-components/components/annotation_editor_controls/annotation_editor_controls.tsx b/packages/kbn-event-annotation-components/components/annotation_editor_controls/annotation_editor_controls.tsx index e2a0dbdeae380..0dcd6da0c0576 100644 --- a/packages/kbn-event-annotation-components/components/annotation_editor_controls/annotation_editor_controls.tsx +++ b/packages/kbn-event-annotation-components/components/annotation_editor_controls/annotation_editor_controls.tsx @@ -322,6 +322,8 @@ const AnnotationEditorControls = ({ )} void; label?: string; disableHelpTooltip?: boolean; @@ -93,14 +95,14 @@ export const ColorPicker = ({ fullWidth data-test-subj="indexPattern-dimension-colorPicker" compressed - isClearable={Boolean(overwriteColor)} + isClearable={typeof isClearable !== 'undefined' ? isClearable : Boolean(overwriteColor)} onChange={handleColor} color={isDisabled ? '' : colorText} disabled={isDisabled} placeholder={' '} onBlur={() => { if (!colorText) { - setColorText(overwriteColor ?? defaultColor); + setColorText(validatedColor ?? defaultColor); } }} aria-label={inputLabel} diff --git a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx index f7512ec4fd7c7..e39b3f945e4e0 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx @@ -25,6 +25,7 @@ import { IToasts } from '@kbn/core-notifications-browser'; import type { LayerAction, StateSetter } from '../../../../types'; import type { XYState, XYByReferenceAnnotationLayerConfig } from '../../types'; import { annotationLayerHasUnsavedChanges } from '../../state_helpers'; +import { getAnnotationLayerTitle } from '../../visualization_helpers'; export const getRevertChangesAction = ({ state, @@ -50,7 +51,7 @@ export const getRevertChangesAction = ({ modal.close()} onConfirm={() => { @@ -111,7 +112,7 @@ export const revert = ({ toasts.addSuccess({ title: i18n.translate('xpack.lens.xyChart.annotations.notificationReverted', { defaultMessage: `Reverted "{title}"`, - values: { title: layer.__lastSaved.title }, + values: { title: getAnnotationLayerTitle(layer) }, }), text: i18n.translate('xpack.lens.xyChart.annotations.notificationRevertedExplanation', { defaultMessage: 'The most recently saved version of this annotation group has been restored.', diff --git a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx index a86cf9617d082..b99badee88917 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx @@ -28,7 +28,11 @@ import type { StateSetter, } from '../../../../types'; import { XYByReferenceAnnotationLayerConfig, XYAnnotationLayerConfig, XYState } from '../../types'; -import { isByReferenceAnnotationsLayer } from '../../visualization_helpers'; +import { + getAnnotationLayerTitle, + getGroupMetadataFromAnnotationLayer, + isByReferenceAnnotationsLayer, +} from '../../visualization_helpers'; type ModalOnSaveProps = SavedObjectOnSaveProps & { newTags: string[]; closeModal: () => void }; @@ -194,7 +198,7 @@ export const onSave = async ({ }) => { const shouldStop = await shouldStopBecauseDuplicateTitle( newTitle, - isByReferenceAnnotationsLayer(layer) ? layer.__lastSaved.title : '', + getAnnotationLayerTitle(layer), newCopyOnSave, onTitleDuplicate, isTitleDuplicateConfirmed, @@ -326,6 +330,8 @@ export const getSaveLayerAction = ({ ), execute: async (domElement) => { if (domElement) { + const metadata = getGroupMetadataFromAnnotationLayer(layer); + render( @@ -345,9 +351,7 @@ export const getSaveLayerAction = ({ goToAnnotationLibrary, }); }} - title={neverSaved ? '' : layer.__lastSaved.title} - description={neverSaved ? '' : layer.__lastSaved.description} - tags={neverSaved ? [] : layer.__lastSaved.tags} + {...metadata} showCopyOnSave={!neverSaved} /> diff --git a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/unlink_action.tsx b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/unlink_action.tsx index 4da04568b7daf..93ee1c8b1b5bc 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/unlink_action.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/unlink_action.tsx @@ -13,6 +13,7 @@ import { XYByValueAnnotationLayerConfig, XYState, } from '../../types'; +import { getAnnotationLayerTitle } from '../../visualization_helpers'; export const getUnlinkLayerAction = ({ state, @@ -45,7 +46,7 @@ export const getUnlinkLayerAction = ({ toasts.addSuccess( i18n.translate('xpack.lens.xyChart.annotations.notificationUnlinked', { defaultMessage: `Unlinked "{title}"`, - values: { title: layer.__lastSaved.title }, + values: { title: getAnnotationLayerTitle(layer) }, }) ); }, diff --git a/x-pack/plugins/lens/public/visualizations/xy/state_helpers.ts b/x-pack/plugins/lens/public/visualizations/xy/state_helpers.ts index 0385a34a57102..620c1c2e5f6df 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/state_helpers.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/state_helpers.ts @@ -187,6 +187,11 @@ export function getPersistableState(state: XYState) { } else { const persistableLayer: XYPersistedLinkedByValueAnnotationLayerConfig = { persistanceType: 'linked', + cachedMetadata: layer.cachedMetadata || { + title: layer.__lastSaved.title, + description: layer.__lastSaved.description, + tags: layer.__lastSaved.tags, + }, layerId: layer.layerId, layerType: layer.layerType, annotationGroupRef: referenceName, @@ -298,6 +303,7 @@ export function injectReferences( ignoreGlobalFilters: persistedLayer.ignoreGlobalFilters, indexPatternId: getIndexPatternIdFromReferences(persistedLayer.layerId), annotations: cloneDeep(persistedLayer.annotations), + cachedMetadata: persistedLayer.cachedMetadata, }; } } diff --git a/x-pack/plugins/lens/public/visualizations/xy/types.ts b/x-pack/plugins/lens/public/visualizations/xy/types.ts index 8961c38b1582a..9ffb59ec0a4d5 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/types.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/types.ts @@ -119,6 +119,13 @@ export interface XYByValueAnnotationLayerConfig { annotations: EventAnnotationConfig[]; indexPatternId: string; ignoreGlobalFilters: boolean; + // populated only when the annotation has been forked from the + // version saved in the library (persisted as XYPersistedLinkedByValueAnnotationLayerConfig) + cachedMetadata?: { + title: string; + description: string; + tags: string[]; + }; } export type XYPersistedByValueAnnotationLayerConfig = Omit< diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx index 9024e43292939..962766ee9c5d7 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx @@ -460,6 +460,11 @@ describe('xy_visualization', () => { annotations: [], // different from the persisted group }, { + cachedMetadata: { + title: 'Local title', + description: '', + tags: [], + }, layerId: 'annotation', layerType: layerTypes.ANNOTATIONS, persistanceType: 'linked', @@ -501,6 +506,7 @@ describe('xy_visualization', () => { { layerId: 'annotation', layerType: layerTypes.ANNOTATIONS, + cachedMetadata: persistedAnnotationLayers[1].cachedMetadata, annotationGroupId: annotationGroupId2, ignoreGlobalFilters: persistedAnnotationLayers[1].ignoreGlobalFilters, annotations: persistedAnnotationLayers[1].annotations, @@ -3718,6 +3724,12 @@ describe('xy_visualization', () => { layerId: 'layer-id', layerType: 'annotations', persistanceType: 'linked', + // stores "cached" or "local" metadata + cachedMetadata: { + description: 'some description', + tags: [], + title: 'My saved object title', + }, annotations: layers[0].annotations, ignoreGlobalFilters: layers[0].ignoreGlobalFilters, }, @@ -3726,6 +3738,11 @@ describe('xy_visualization', () => { layerId: 'layer-id2', layerType: 'annotations', persistanceType: 'linked', + cachedMetadata: { + description: 'some description', + tags: [], + title: 'My saved object title', + }, annotations: layers[1].annotations, ignoreGlobalFilters: layers[1].ignoreGlobalFilters, }, diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx index 07ebec4c47b58..e1b453b7e9f52 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx @@ -85,6 +85,7 @@ import { import { checkXAccessorCompatibility, defaultSeriesType, + getAnnotationLayerTitle, getAnnotationsLayers, getAxisName, getDataLayers, @@ -334,7 +335,7 @@ export const getXyVisualization = ({ const layerIndex = state.layers.findIndex((l) => l.layerId === layerId); const layer = state.layers[layerIndex]; if (layer && isByReferenceAnnotationsLayer(layer)) { - return { title: `Delete "${layer.__lastSaved.title}"` }; + return { title: `Delete "${getAnnotationLayerTitle(layer)}"` }; } }, diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx index c9bd442301596..581c4a8e083cd 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization_helpers.tsx @@ -178,6 +178,23 @@ export const isPersistedLinkedByValueAnnotationsLayer = ( export const getAnnotationsLayers = (layers: Array>) => (layers || []).filter((layer): layer is XYAnnotationLayerConfig => isAnnotationsLayer(layer)); +export const getGroupMetadataFromAnnotationLayer = ( + layer: XYAnnotationLayerConfig +): { title: string; description: string; tags: string[] } => { + if (layer.cachedMetadata) { + return layer.cachedMetadata; + } + if (isByReferenceAnnotationsLayer(layer)) { + const { title, description, tags } = layer.__lastSaved; + return { title, description, tags }; + } + return { title: '', description: '', tags: [] }; +}; + +export const getAnnotationLayerTitle = (layer: XYAnnotationLayerConfig): string => { + return getGroupMetadataFromAnnotationLayer(layer).title; +}; + export interface LayerTypeToLayer { [layerTypes.DATA]: (layer: XYDataLayerConfig) => XYDataLayerConfig; [layerTypes.REFERENCELINE]: (layer: XYReferenceLineLayerConfig) => XYReferenceLineLayerConfig; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.test.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.test.tsx index 1a2587859e390..a6271fc868db1 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.test.tsx @@ -71,6 +71,15 @@ describe('layer header', () => { .text() .trim() ).toBe(byRefGroupTitle); + + const cachedMetadata = { title: 'A cached title', description: '', tags: [] }; + expect( + mountWithIntl( + + ) + .text() + .trim() + ).toBe(cachedMetadata.title); }); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.tsx index e695477d25d78..941b6d01e6b40 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/layer_header.tsx @@ -35,8 +35,8 @@ import { import { ChangeIndexPattern, StaticHeader } from '../../../shared_components'; import { updateLayer } from '.'; import { + getAnnotationLayerTitle, isAnnotationsLayer, - isByReferenceAnnotationsLayer, isDataLayer, isReferenceLayer, } from '../visualization_helpers'; @@ -52,7 +52,7 @@ export function LayerHeader(props: VisualizationLayerWidgetProps) { if (isAnnotationsLayer(layer)) { return ( ); From be7f34ebbb99cfa2b09c11250aa06e2600433667 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:17:12 -0500 Subject: [PATCH 063/170] [ML] Unskip Transform continuous creation test (#167829) --- .../creation/index_pattern/continuous_transform.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts b/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts index 4364e386b8637..e56d06e15a625 100644 --- a/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts +++ b/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts @@ -25,9 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const security = getService('security'); const pageObjects = getPageObjects(['discover']); - // Failing: See https://github.com/elastic/kibana/issues/165146 - // Failing: See https://github.com/elastic/kibana/issues/165144 - describe.skip('creation_continuous_transform', function () { + describe('creation_continuous_transform', function () { before(async () => { // installing the sample data with test user with super user role and then switching roles with limited privileges await security.testUser.setRoles(['superuser'], { skipBrowserRefresh: true }); @@ -516,9 +514,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await transform.wizard.assertCopyToClipboardButtonEnabled(true); }); - // FLAKY: https://github.com/elastic/kibana/issues/158612 - // FLAKY: https://github.com/elastic/kibana/issues/158613 - it.skip('runs the transform and displays it correctly in the job list', async () => { + it('runs the transform and displays it correctly in the job list', async () => { await transform.testExecution.logTestStep('creates the transform'); await transform.wizard.createTransform(); From 6393a9125be44f3f46078a51a5ec2fa58857c530 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Wed, 4 Oct 2023 16:21:34 +0200 Subject: [PATCH 064/170] [Security Solution] Integrate default shared-ux left navigation (#167127) ## Summary Main ticket: https://github.com/elastic/kibana/issues/166545 This PR integrates the shared-ux `DefaultNavigation` component in the Security Solution project for serverless. These changes do not replace the original Security left navigation yet, which is still the navigation component displayed by default. In order to render the shared-ux `DefaultNavigation` this experimental flag should be enabled: `xpack.securitySolutionServerless.enableExperimental: ['platformNavEnabled']` Captura de pantalla 2023-09-25 a les 14 00 49 ## Implementation - Security navigation is still the default. Please enable the `platformNavEnabled` experimental flag to render the shared navigation. - We have two different formatters from the security navigation links config to the navigation tree required in serverless: - ChromeNavigationTree: registered directly to the serverless plugin for the breadcrumbs to work when the navigation is customized with the Security-specific nav. It will be removed after the migration to the shared nav. - NavigationTree: the format the shared nav uses, it already registers the chromeNavigationTree for the breadcrumbs to the serverless plugin by itself. - Security plugin `deepLinks` needed to be formatted differently to make this shared navigation work, since the `navLinkStatus: hidden` prevents the links from being processed and displayed, this has been solved via the `setDeepLinksFormatter` exposed on the plugin setup contract. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-optimizer/limits.yml | 2 +- .../security-solution/side_nav/panel.ts | 8 + .../public/common/links/deep_links.ts | 13 +- .../plugins/security_solution/public/mocks.ts | 3 + .../security_solution/public/plugin.tsx | 6 +- .../public/plugin_contract.ts | 9 +- .../plugins/security_solution/public/types.ts | 4 + .../app_features_service.ts | 2 +- .../server/lib/app_features_service/types.ts | 3 +- .../security_solution/server/plugin.ts | 1 + .../server/plugin_contract.ts | 5 + .../security_app_features_config.ts | 6 +- .../common/config.ts | 23 ++ .../common/experimental_features.ts | 70 +++++ .../services/__mocks__/services.mock.tsx | 3 + .../public/common/services/create_services.ts | 18 +- .../public/common/services/types.ts | 2 + .../public/navigation/default_navigation.tsx | 47 ++++ .../public/navigation/index.ts | 45 ++- .../public/navigation/links/app_links.ts | 59 ++-- .../public/navigation/links/deep_links.ts | 24 ++ .../public/navigation/links/nav.links.test.ts | 26 +- .../public/navigation/links/nav_links.ts | 19 +- .../public/navigation/navigation_tree.test.ts | 265 ------------------ .../chrome_navigation_tree.test.ts | 245 ++++++++++++++++ .../chrome_navigation_tree.ts} | 49 +--- .../navigation/navigation_tree/index.ts | 44 +++ .../navigation_tree/navigation_tree.test.ts | 209 ++++++++++++++ .../navigation_tree/navigation_tree.ts | 182 ++++++++++++ .../navigation/navigation_tree/utils.ts | 34 +++ .../public/plugin.ts | 25 +- .../public/types.ts | 10 +- .../server/app_features/index.ts | 9 +- .../security_app_features_config.ts | 7 +- .../server/config.ts | 66 ++++- .../server/plugin.ts | 14 +- .../tsconfig.json | 3 +- 37 files changed, 1156 insertions(+), 404 deletions(-) create mode 100644 x-pack/packages/security-solution/side_nav/panel.ts create mode 100644 x-pack/plugins/security_solution_serverless/common/experimental_features.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/default_navigation.tsx create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/links/deep_links.ts delete mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.test.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.test.ts rename x-pack/plugins/security_solution_serverless/public/navigation/{navigation_tree.ts => navigation_tree/chrome_navigation_tree.ts} (62%) create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/index.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.test.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/utils.ts diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index d29d129097f21..1bbc4d08247a2 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -124,7 +124,7 @@ pageLoadAssetSize: security: 81771 securitySolution: 66738 securitySolutionEss: 16573 - securitySolutionServerless: 45000 + securitySolutionServerless: 62488 serverless: 16573 serverlessObservability: 68747 serverlessSearch: 71995 diff --git a/x-pack/packages/security-solution/side_nav/panel.ts b/x-pack/packages/security-solution/side_nav/panel.ts new file mode 100644 index 0000000000000..a0341cd000812 --- /dev/null +++ b/x-pack/packages/security-solution/side_nav/panel.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { SolutionSideNavPanel } from './src/solution_side_nav_panel'; diff --git a/x-pack/plugins/security_solution/public/common/links/deep_links.ts b/x-pack/plugins/security_solution/public/common/links/deep_links.ts index c8b38042ddd7e..a85a250104816 100644 --- a/x-pack/plugins/security_solution/public/common/links/deep_links.ts +++ b/x-pack/plugins/security_solution/public/common/links/deep_links.ts @@ -11,7 +11,9 @@ import type { AppDeepLink, AppUpdater } from '@kbn/core/public'; import { appLinks$ } from './links'; import type { AppLinkItems } from './types'; -const formatDeepLinks = (appLinks: AppLinkItems): AppDeepLink[] => +export type DeepLinksFormatter = (appLinks: AppLinkItems) => AppDeepLink[]; + +const defaultDeepLinksFormatter: DeepLinksFormatter = (appLinks) => appLinks.map((appLink) => ({ id: appLink.id, path: appLink.path, @@ -23,7 +25,7 @@ const formatDeepLinks = (appLinks: AppLinkItems): AppDeepLink[] => ...(appLink.globalSearchKeywords != null ? { keywords: appLink.globalSearchKeywords } : {}), ...(appLink.links && appLink.links?.length ? { - deepLinks: formatDeepLinks(appLink.links), + deepLinks: defaultDeepLinksFormatter(appLink.links), } : {}), })); @@ -31,11 +33,14 @@ const formatDeepLinks = (appLinks: AppLinkItems): AppDeepLink[] => /** * Registers any change in appLinks to be updated in app deepLinks */ -export const registerDeepLinksUpdater = (appUpdater$: Subject): Subscription => { +export const registerDeepLinksUpdater = ( + appUpdater$: Subject, + formatter: DeepLinksFormatter = defaultDeepLinksFormatter +): Subscription => { return appLinks$.subscribe((appLinks) => { appUpdater$.next(() => ({ navLinkStatus: AppNavLinkStatus.hidden, // needed to prevent main security link to switch to visible after update - deepLinks: formatDeepLinks(appLinks), + deepLinks: formatter(appLinks), })); }); }; diff --git a/x-pack/plugins/security_solution/public/mocks.ts b/x-pack/plugins/security_solution/public/mocks.ts index ad129977e7a79..cab7df450eecc 100644 --- a/x-pack/plugins/security_solution/public/mocks.ts +++ b/x-pack/plugins/security_solution/public/mocks.ts @@ -9,6 +9,7 @@ import { BehaviorSubject, of } from 'rxjs'; import { UpsellingService } from '@kbn/security-solution-upselling/service'; import type { BreadcrumbsNav } from './common/breadcrumbs'; import type { NavigationLink } from './common/links/types'; +import { allowedExperimentalValues } from '../common/experimental_features'; import type { PluginStart, PluginSetup, ContractStartServices } from './types'; const upselling = new UpsellingService(); @@ -23,7 +24,9 @@ export const contractStartServicesMock: ContractStartServices = { const setupMock = (): PluginSetup => ({ resolver: jest.fn(), + experimentalFeatures: allowedExperimentalValues, // default values setAppLinksSwitcher: jest.fn(), + setDeepLinksFormatter: jest.fn(), setDataQualityPanelConfig: jest.fn(), }); diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 65453e37d686b..7d6d95a266596 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -95,7 +95,7 @@ export class Plugin implements IPlugin; public appLinksSwitcher: AppLinksSwitcher; + public deepLinksFormatter?: DeepLinksFormatter; public dataQualityPanelConfig?: DataQualityPanelConfig; - constructor() { + constructor(private readonly experimentalFeatures: ExperimentalFeatures) { this.extraRoutes$ = new BehaviorSubject([]); this.isSidebarEnabled$ = new BehaviorSubject(true); this.componentsService = new ContractComponentsService(); @@ -44,9 +47,13 @@ export class PluginContract { public getSetupContract(): PluginSetup { return { resolver: lazyResolver, + experimentalFeatures: { ...this.experimentalFeatures }, setAppLinksSwitcher: (appLinksSwitcher) => { this.appLinksSwitcher = appLinksSwitcher; }, + setDeepLinksFormatter: (deepLinksFormatter) => { + this.deepLinksFormatter = deepLinksFormatter; + }, setDataQualityPanelConfig: (dataQualityPanelConfig) => { this.dataQualityPanelConfig = dataQualityPanelConfig; }, diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts index 019b6ec13a39c..45d96af860e1e 100644 --- a/x-pack/plugins/security_solution/public/types.ts +++ b/x-pack/plugins/security_solution/public/types.ts @@ -79,6 +79,8 @@ import type { TelemetryClientStart } from './common/lib/telemetry'; import type { Dashboards } from './dashboards'; import type { BreadcrumbsNav } from './common/breadcrumbs/types'; import type { TopValuesPopoverService } from './app/components/top_values_popover/top_values_popover_service'; +import type { ExperimentalFeatures } from '../common/experimental_features'; +import type { DeepLinksFormatter } from './common/links/deep_links'; import type { DataQualityPanelConfig } from './overview/types'; import type { SetComponents, GetComponent$ } from './contract_components'; @@ -176,7 +178,9 @@ export type StartServices = CoreStart & export interface PluginSetup { resolver: () => Promise; + experimentalFeatures: ExperimentalFeatures; setAppLinksSwitcher: (appLinksSwitcher: AppLinksSwitcher) => void; + setDeepLinksFormatter: (deepLinksFormatter: DeepLinksFormatter) => void; setDataQualityPanelConfig: (dataQualityPanelConfig: DataQualityPanelConfig) => void; } diff --git a/x-pack/plugins/security_solution/server/lib/app_features_service/app_features_service.ts b/x-pack/plugins/security_solution/server/lib/app_features_service/app_features_service.ts index 97fcf6cf67ed6..fb8947f5cc47b 100644 --- a/x-pack/plugins/security_solution/server/lib/app_features_service/app_features_service.ts +++ b/x-pack/plugins/security_solution/server/lib/app_features_service/app_features_service.ts @@ -75,7 +75,7 @@ export class AppFeaturesService { } public setAppFeaturesConfigurator(configurator: AppFeaturesConfigurator) { - const securityAppFeaturesConfig = configurator.security(this.experimentalFeatures); + const securityAppFeaturesConfig = configurator.security(); this.securityAppFeatures.setConfig(securityAppFeaturesConfig); const casesAppFeaturesConfig = configurator.cases(); diff --git a/x-pack/plugins/security_solution/server/lib/app_features_service/types.ts b/x-pack/plugins/security_solution/server/lib/app_features_service/types.ts index b2d1054985c4c..a8c8f7582ac42 100644 --- a/x-pack/plugins/security_solution/server/lib/app_features_service/types.ts +++ b/x-pack/plugins/security_solution/server/lib/app_features_service/types.ts @@ -11,10 +11,9 @@ import type { CasesSubFeatureId, AssistantSubFeatureId, } from '@kbn/security-solution-features/keys'; -import type { ExperimentalFeatures } from '../../../common'; export interface AppFeaturesConfigurator { - security: (experimentalFlags: ExperimentalFeatures) => AppFeaturesConfig; + security: () => AppFeaturesConfig; cases: () => AppFeaturesConfig; securityAssistant: () => AppFeaturesConfig; } diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index c1c2e00e8bfd0..fdc4f9f92816d 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -456,6 +456,7 @@ export class Plugin implements ISecuritySolutionPlugin { return { setAppFeaturesConfigurator: appFeaturesService.setAppFeaturesConfigurator.bind(appFeaturesService), + experimentalFeatures: { ...config.experimentalFeatures }, }; } diff --git a/x-pack/plugins/security_solution/server/plugin_contract.ts b/x-pack/plugins/security_solution/server/plugin_contract.ts index 0c34bede016f1..a02b3ebbc5384 100644 --- a/x-pack/plugins/security_solution/server/plugin_contract.ts +++ b/x-pack/plugins/security_solution/server/plugin_contract.ts @@ -42,6 +42,7 @@ import type { SharePluginStart } from '@kbn/share-plugin/server'; import type { GuidedOnboardingPluginSetup } from '@kbn/guided-onboarding-plugin/server'; import type { PluginSetup as UnifiedSearchServerPluginSetup } from '@kbn/unified-search-plugin/server'; import type { AppFeaturesService } from './lib/app_features_service/app_features_service'; +import type { ExperimentalFeatures } from '../common'; export interface SecuritySolutionPluginSetupDependencies { alerting: AlertingPluginSetup; @@ -87,6 +88,10 @@ export interface SecuritySolutionPluginSetup { * Sets the configurations for app features that are available to the Security Solution */ setAppFeaturesConfigurator: AppFeaturesService['setAppFeaturesConfigurator']; + /** + * The security solution generic experimental features + */ + experimentalFeatures: ExperimentalFeatures; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/x-pack/plugins/security_solution_ess/server/app_features/security_app_features_config.ts b/x-pack/plugins/security_solution_ess/server/app_features/security_app_features_config.ts index 6badb63d30ed1..18da55a377746 100644 --- a/x-pack/plugins/security_solution_ess/server/app_features/security_app_features_config.ts +++ b/x-pack/plugins/security_solution_ess/server/app_features/security_app_features_config.ts @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { ExperimentalFeatures } from '@kbn/security-solution-plugin/common'; import type { AppFeatureKeys, AppFeatureKibanaConfig, @@ -24,10 +23,7 @@ import { } from '@kbn/security-solution-features/privileges'; export const getSecurityAppFeaturesConfigurator = - (enabledAppFeatureKeys: AppFeatureKeys) => - ( - _: ExperimentalFeatures // currently un-used, but left here as a convenience for possible future use - ): AppFeaturesSecurityConfig => { + (enabledAppFeatureKeys: AppFeatureKeys) => (): AppFeaturesSecurityConfig => { return createEnabledAppFeaturesConfigMap(securityAppFeaturesConfig, enabledAppFeatureKeys); }; diff --git a/x-pack/plugins/security_solution_serverless/common/config.ts b/x-pack/plugins/security_solution_serverless/common/config.ts index 50bfc71c7ec7d..b1aaef412fcb1 100644 --- a/x-pack/plugins/security_solution_serverless/common/config.ts +++ b/x-pack/plugins/security_solution_serverless/common/config.ts @@ -51,3 +51,26 @@ export const developerConfigSchema = schema.object({ }); export type DeveloperConfig = TypeOf; + +export const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: false }), + developer: developerConfigSchema, + productTypes, + /** + * For internal use. A list of string values (comma delimited) that will enable experimental + * type of functionality that is not yet released. Valid values for this settings need to + * be defined in: + * `x-pack/plugins/security_solution_serverless/common/experimental_features.ts` + * under the `allowedExperimentalValues` object + * + * @example + * xpack.securitySolutionServerless.enableExperimental: + * - someCrazyFeature + * - someEvenCrazierFeature + */ + enableExperimental: schema.arrayOf(schema.string(), { + defaultValue: () => [], + }), +}); + +export type ServerlessSecurityConfigSchema = TypeOf; diff --git a/x-pack/plugins/security_solution_serverless/common/experimental_features.ts b/x-pack/plugins/security_solution_serverless/common/experimental_features.ts new file mode 100644 index 0000000000000..500bad2a0483d --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/common/experimental_features.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { ExperimentalFeatures as GenericExperimentalFeatures } from '@kbn/security-solution-plugin/common'; + +export type ServerlessExperimentalFeatures = Record< + keyof typeof allowedExperimentalValues, + boolean +>; + +/** + * A list of allowed values that can be used in `xpack.securitySolutionServerless.enableExperimental`. + * This object is then used to validate and parse the value entered. + */ +export const allowedExperimentalValues = Object.freeze({ + /** + * Enables the use of the of the product navigation from shared-ux package in the Security Solution app + */ + platformNavEnabled: false, +}); + +type ServerlessExperimentalConfigKeys = Array; +type Mutable = { -readonly [P in keyof T]: T[P] }; + +const allowedKeys = Object.keys( + allowedExperimentalValues +) as Readonly; + +export type ExperimentalFeatures = ServerlessExperimentalFeatures & GenericExperimentalFeatures; +/** + * Parses the string value used in `xpack.securitySolutionServerless.enableExperimental` kibana configuration, + * which should be a string of values delimited by a comma (`,`) + * The generic experimental features are merged with the serverless values to ensure they are available + * + * @param configValue + * @throws SecuritySolutionInvalidExperimentalValue + */ +export const parseExperimentalConfigValue = ( + configValue: string[], + genericExperimentalFeatures: GenericExperimentalFeatures +): { features: ExperimentalFeatures; invalid: string[]; duplicated: string[] } => { + const enabledFeatures: Mutable> = {}; + const invalidKeys: string[] = []; + const duplicatedKeys: string[] = []; + + for (const value of configValue) { + if (genericExperimentalFeatures[value as keyof GenericExperimentalFeatures] != null) { + duplicatedKeys.push(value); + } else if (!allowedKeys.includes(value as keyof ServerlessExperimentalFeatures)) { + invalidKeys.push(value); + } else { + enabledFeatures[value as keyof ServerlessExperimentalFeatures] = true; + } + } + + return { + features: { + ...genericExperimentalFeatures, + ...allowedExperimentalValues, + ...enabledFeatures, + }, + invalid: invalidKeys, + duplicated: duplicatedKeys, + }; +}; + +export const getExperimentalAllowedValues = (): string[] => [...allowedKeys]; diff --git a/x-pack/plugins/security_solution_serverless/public/common/services/__mocks__/services.mock.tsx b/x-pack/plugins/security_solution_serverless/public/common/services/__mocks__/services.mock.tsx index 87e22e80a59b1..de3d846253d13 100644 --- a/x-pack/plugins/security_solution_serverless/public/common/services/__mocks__/services.mock.tsx +++ b/x-pack/plugins/security_solution_serverless/public/common/services/__mocks__/services.mock.tsx @@ -13,11 +13,14 @@ import { managementPluginMock } from '@kbn/management-plugin/public/mocks'; import { cloudMock } from '@kbn/cloud-plugin/public/mocks'; import type { ProjectNavigationLink } from '../../../navigation/links/types'; import type { Services } from '..'; +import { allowedExperimentalValues as genericAllowedExperimentalValues } from '@kbn/security-solution-plugin/common'; +import { allowedExperimentalValues } from '../../../../common/experimental_features'; export const mockProjectNavLinks = jest.fn((): ProjectNavigationLink[] => []); export const mockServices: Services = { ...coreMock.createStart(), + experimentalFeatures: { ...allowedExperimentalValues, ...genericAllowedExperimentalValues }, serverless: serverlessMock.createStart(), security: securityMock.createStart(), securitySolution: securitySolutionMock.createStart(), diff --git a/x-pack/plugins/security_solution_serverless/public/common/services/create_services.ts b/x-pack/plugins/security_solution_serverless/public/common/services/create_services.ts index 9a16ebe31ff08..7967f8d00d6fb 100644 --- a/x-pack/plugins/security_solution_serverless/public/common/services/create_services.ts +++ b/x-pack/plugins/security_solution_serverless/public/common/services/create_services.ts @@ -6,6 +6,7 @@ */ import type { CoreStart } from '@kbn/core/public'; +import type { ExperimentalFeatures } from '../../../common/experimental_features'; import { createProjectNavLinks$ } from '../../navigation/links/nav_links'; import type { SecuritySolutionServerlessPluginStartDeps } from '../../types'; import type { Services } from './types'; @@ -16,9 +17,20 @@ import type { Services } from './types'; * */ export const createServices = ( core: CoreStart, - pluginsStart: SecuritySolutionServerlessPluginStartDeps + pluginsStart: SecuritySolutionServerlessPluginStartDeps, + experimentalFeatures: ExperimentalFeatures ): Services => { const { securitySolution, cloud } = pluginsStart; - const projectNavLinks$ = createProjectNavLinks$(securitySolution.getNavLinks$(), core, cloud); - return { ...core, ...pluginsStart, getProjectNavLinks$: () => projectNavLinks$ }; + const projectNavLinks$ = createProjectNavLinks$( + securitySolution.getNavLinks$(), + core, + cloud, + experimentalFeatures + ); + return { + ...core, + ...pluginsStart, + experimentalFeatures, + getProjectNavLinks$: () => projectNavLinks$, + }; }; diff --git a/x-pack/plugins/security_solution_serverless/public/common/services/types.ts b/x-pack/plugins/security_solution_serverless/public/common/services/types.ts index c655f7db6898d..317319c32b4d6 100644 --- a/x-pack/plugins/security_solution_serverless/public/common/services/types.ts +++ b/x-pack/plugins/security_solution_serverless/public/common/services/types.ts @@ -6,10 +6,12 @@ */ import type { CoreStart } from '@kbn/core/public'; +import type { ExperimentalFeatures } from '../../../common/experimental_features'; import type { ProjectNavLinks } from '../../navigation/links/types'; import type { SecuritySolutionServerlessPluginStartDeps } from '../../types'; export interface InternalServices { + experimentalFeatures: ExperimentalFeatures; getProjectNavLinks$: () => ProjectNavLinks; } export type Services = CoreStart & SecuritySolutionServerlessPluginStartDeps & InternalServices; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/default_navigation.tsx b/x-pack/plugins/security_solution_serverless/public/navigation/default_navigation.tsx new file mode 100644 index 0000000000000..74f3d0e3afd3d --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/default_navigation.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 React, { Suspense } from 'react'; +import { EuiLoadingSpinner } from '@elastic/eui'; +import type { NavigationTreeDefinition } from '@kbn/shared-ux-chrome-navigation'; +import type { SideNavComponent } from '@kbn/core-chrome-browser'; +import type { Services } from '../common/services'; + +const SecurityDefaultNavigationLazy = React.lazy(() => + import('@kbn/shared-ux-chrome-navigation').then( + ({ DefaultNavigation, NavigationKibanaProvider }) => ({ + default: React.memo<{ + navigationTree: NavigationTreeDefinition; + services: Services; + }>(function SecurityDefaultNavigation({ navigationTree, services }) { + return ( + + + + ); + }), + }) + ) +); + +export const getDefaultNavigationComponent = ( + navigationTree: NavigationTreeDefinition, + services: Services +): SideNavComponent => + function SecuritySideNavComponent() { + return ( + }> + + + ); + }; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/index.ts b/x-pack/plugins/security_solution_serverless/public/navigation/index.ts index 19684479e7dd6..0a5f08261eb24 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/index.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/index.ts @@ -6,32 +6,55 @@ */ import { APP_PATH, SecurityPageName } from '@kbn/security-solution-plugin/common'; -import type { ServerlessSecurityPublicConfig } from '../types'; +import type { CoreSetup } from '@kbn/core/public'; +import type { + SecuritySolutionServerlessPluginSetupDeps, + ServerlessSecurityPublicConfig, +} from '../types'; import type { Services } from '../common/services'; import { subscribeBreadcrumbs } from './breadcrumbs'; import { SecurityPagePath } from './links/constants'; -import { subscribeNavigationTree } from './navigation_tree'; +import { ProjectNavigationTree } from './navigation_tree'; import { getSecuritySideNavComponent } from './side_navigation'; +import { getDefaultNavigationComponent } from './default_navigation'; +import { getProjectAppLinksSwitcher } from './links/app_links'; +import { formatProjectDeepLinks } from './links/deep_links'; +import type { ExperimentalFeatures } from '../../common/experimental_features'; const SECURITY_PROJECT_SETTINGS_PATH = `${APP_PATH}${ SecurityPagePath[SecurityPageName.projectSettings] }`; -export const configureNavigation = ( - services: Services, - serverConfig: ServerlessSecurityPublicConfig +export const setupNavigation = ( + _core: CoreSetup, + { securitySolution }: SecuritySolutionServerlessPluginSetupDeps, + experimentalFeatures: ExperimentalFeatures ) => { + securitySolution.setAppLinksSwitcher(getProjectAppLinksSwitcher(experimentalFeatures)); + securitySolution.setDeepLinksFormatter(formatProjectDeepLinks); +}; + +export const startNavigation = (services: Services, config: ServerlessSecurityPublicConfig) => { const { serverless, securitySolution, management } = services; securitySolution.setIsSidebarEnabled(false); + serverless.setProjectHome(APP_PATH); - if (!serverConfig.developer.disableManagementUrlRedirect) { - management.setLandingPageRedirect(SECURITY_PROJECT_SETTINGS_PATH); + const projectNavigationTree = new ProjectNavigationTree(services); + + if (services.experimentalFeatures.platformNavEnabled) { + projectNavigationTree.getNavigationTree$().subscribe((navigationTree) => { + serverless.setSideNavComponent(getDefaultNavigationComponent(navigationTree, services)); + }); + } else { + if (!config.developer.disableManagementUrlRedirect) { + management.setLandingPageRedirect(SECURITY_PROJECT_SETTINGS_PATH); + } + projectNavigationTree.getChromeNavigationTree$().subscribe((chromeNavigationTree) => { + serverless.setNavigation({ navigationTree: chromeNavigationTree }); + }); + serverless.setSideNavComponent(getSecuritySideNavComponent(services)); } management.setIsSidebarEnabled(false); - serverless.setProjectHome(APP_PATH); - serverless.setSideNavComponent(getSecuritySideNavComponent(services)); - - subscribeNavigationTree(services); subscribeBreadcrumbs(services); }; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/app_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/app_links.ts index 49c79ac12d8f6..4cb0cc4a7fd7c 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/app_links.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/app_links.ts @@ -15,35 +15,38 @@ import { createInvestigationsLinkFromTimeline } from './sections/investigations_ import { mlAppLink } from './sections/ml_links'; import { createAssetsLinkFromManage } from './sections/assets_links'; import { createProjectSettingsLinkFromManage } from './sections/project_settings_links'; +import type { ExperimentalFeatures } from '../../../common/experimental_features'; // This function is called by the security_solution plugin to alter the app links // that will be registered to the Security Solution application on Serverless projects. // The capabilities filtering is done after this function is called by the security_solution plugin. -export const projectAppLinksSwitcher: AppLinksSwitcher = (appLinks) => { - const projectAppLinks = cloneDeep(appLinks) as LinkItem[]; - - // Remove timeline link - const [timelineLinkItem] = remove(projectAppLinks, { id: SecurityPageName.timelines }); - if (timelineLinkItem) { - // Add investigations link - projectAppLinks.push(createInvestigationsLinkFromTimeline(timelineLinkItem)); - } - - // Remove manage link - const [manageLinkItem] = remove(projectAppLinks, { id: SecurityPageName.administration }); - - if (manageLinkItem) { - // Add assets link - projectAppLinks.push(createAssetsLinkFromManage(manageLinkItem)); - } - - // Add ML link - projectAppLinks.push(mlAppLink); - - if (manageLinkItem) { - // Add project settings link - projectAppLinks.push(createProjectSettingsLinkFromManage(manageLinkItem)); - } - - return projectAppLinks; -}; +export const getProjectAppLinksSwitcher = + (experimentalFeatures: ExperimentalFeatures): AppLinksSwitcher => + (appLinks) => { + const projectAppLinks = cloneDeep(appLinks) as LinkItem[]; + + // Remove timeline link + const [timelineLinkItem] = remove(projectAppLinks, { id: SecurityPageName.timelines }); + if (timelineLinkItem) { + // Add investigations link + projectAppLinks.push(createInvestigationsLinkFromTimeline(timelineLinkItem)); + } + + // Remove manage link + const [manageLinkItem] = remove(projectAppLinks, { id: SecurityPageName.administration }); + + if (manageLinkItem) { + // Add assets link + projectAppLinks.push(createAssetsLinkFromManage(manageLinkItem)); + } + + // Add ML link + projectAppLinks.push(mlAppLink); + + if (!experimentalFeatures.platformNavEnabled && manageLinkItem) { + // Add project settings link + projectAppLinks.push(createProjectSettingsLinkFromManage(manageLinkItem)); + } + + return projectAppLinks; + }; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/deep_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/deep_links.ts new file mode 100644 index 0000000000000..9ae7bf5553216 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/deep_links.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DeepLinksFormatter } from '@kbn/security-solution-plugin/public/common/links/deep_links'; +import { AppNavLinkStatus } from '@kbn/core/public'; + +export const formatProjectDeepLinks: DeepLinksFormatter = (appLinks) => + appLinks.map((appLink) => ({ + id: appLink.id, + path: appLink.path, + title: appLink.title, + searchable: !appLink.globalSearchDisabled, + navLinkStatus: appLink.sideNavDisabled ? AppNavLinkStatus.hidden : AppNavLinkStatus.visible, + ...(appLink.globalSearchKeywords != null ? { keywords: appLink.globalSearchKeywords } : {}), + ...(appLink.links && appLink.links?.length + ? { + deepLinks: formatProjectDeepLinks(appLink.links), + } + : {}), + })); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts index 11764c5a5aea3..0a20899462c20 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts @@ -21,6 +21,7 @@ import { projectSettingsNavLinks, } from './sections/project_settings_links'; import { isCloudLink } from './util'; +import type { ExperimentalFeatures } from '../../../common/experimental_features'; const mockCloudStart = mockServices.cloud; const mockChromeNavLinks = jest.fn((): ChromeNavLink[] => []); @@ -39,6 +40,7 @@ const testServices = { }, }, }; +const experimentalFeatures = { platformNavEnabled: false } as ExperimentalFeatures; const link1Id = 'link-1' as SecurityPageName; const link2Id = 'link-2' as SecurityPageName; @@ -86,7 +88,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); expect(value).toEqual([link1, link2]); @@ -99,7 +102,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -113,7 +117,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -131,7 +136,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -155,7 +161,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -178,7 +185,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -201,7 +209,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); @@ -233,7 +242,8 @@ describe('getProjectNavLinks', () => { const projectNavLinks$ = createProjectNavLinks$( testSecurityNavLinks$, testServices, - mockCloudStart + mockCloudStart, + experimentalFeatures ); const value = await firstValueFrom(projectNavLinks$.pipe(take(1))); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts index acef7c10d8ca5..2da3279562191 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts @@ -10,6 +10,7 @@ import type { ChromeNavLinks, CoreStart } from '@kbn/core/public'; import { SecurityPageName, type NavigationLink } from '@kbn/security-solution-navigation'; import { isSecurityId } from '@kbn/security-solution-navigation/links'; import type { CloudStart } from '@kbn/cloud-plugin/public'; +import { remove } from 'lodash'; import { assetsNavLinks } from './sections/assets_links'; import { mlNavCategories, mlNavLinks } from './sections/ml_links'; import { @@ -20,11 +21,14 @@ import { devToolsNavLink } from './sections/dev_tools_links'; import type { ProjectNavigationLink } from './types'; import { getCloudLinkKey, getCloudUrl, getNavLinkIdFromProjectPageName, isCloudLink } from './util'; import { investigationsNavLinks } from './sections/investigations_links'; +import { ExternalPageName } from './constants'; +import type { ExperimentalFeatures } from '../../../common/experimental_features'; export const createProjectNavLinks$ = ( securityNavLinks$: Observable>>, core: CoreStart, - cloud: CloudStart + cloud: CloudStart, + experimentalFeatures: ExperimentalFeatures ): Observable => { const { chrome } = core; return combineLatest([securityNavLinks$, chrome.navLinks.getNavLinks$()]).pipe( @@ -33,7 +37,9 @@ export const createProjectNavLinks$ = ( ([securityNavLinks, chromeNavLinks]) => securityNavLinks.length === 0 || chromeNavLinks.length === 0 // skip if not initialized ), - map(([securityNavLinks]) => processNavLinks(securityNavLinks, chrome.navLinks, cloud)) + map(([securityNavLinks]) => + processNavLinks(securityNavLinks, chrome.navLinks, cloud, experimentalFeatures) + ) ); }; @@ -44,7 +50,8 @@ export const createProjectNavLinks$ = ( const processNavLinks = ( securityNavLinks: Array>, chromeNavLinks: ChromeNavLinks, - cloud: CloudStart + cloud: CloudStart, + experimentalFeatures: ExperimentalFeatures ): ProjectNavigationLink[] => { const projectNavLinks: ProjectNavigationLink[] = [...securityNavLinks]; @@ -96,6 +103,12 @@ const processNavLinks = ( // Dev Tools. just pushing it projectNavLinks.push(devToolsNavLink); + if (experimentalFeatures.platformNavEnabled) { + remove(projectNavLinks, { id: SecurityPageName.landing }); + remove(projectNavLinks, { id: ExternalPageName.devTools }); + remove(projectNavLinks, { id: SecurityPageName.projectSettings }); + } + return processCloudLinks(filterDisabled(projectNavLinks, chromeNavLinks), cloud); }; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.test.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.test.ts deleted file mode 100644 index 56a0abacd4d94..0000000000000 --- a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.test.ts +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import type { ChromeNavLink } from '@kbn/core/public'; -import { APP_UI_ID } from '@kbn/security-solution-plugin/common'; -import { SecurityPageName } from '@kbn/security-solution-navigation'; -import { subscribeNavigationTree } from './navigation_tree'; -import { mockServices, mockProjectNavLinks } from '../common/services/__mocks__/services.mock'; -import type { ProjectNavigationLink } from './links/types'; -import type { ExternalPageName } from './links/constants'; -import * as ml from '@kbn/default-nav-ml'; - -jest.mock('@kbn/default-nav-ml'); - -const link1Id = 'link-1' as SecurityPageName; -const link2Id = 'link-2' as SecurityPageName; -const link3Id = 'externalAppId:link-1' as ExternalPageName; - -const link1: ProjectNavigationLink = { id: link1Id, title: 'link 1' }; -const link2: ProjectNavigationLink = { id: link2Id, title: 'link 2' }; -const link3: ProjectNavigationLink = { id: link3Id, title: 'link 3' }; - -const chromeNavLink1: ChromeNavLink = { - id: `${APP_UI_ID}:${link1.id}`, - title: link1.title, - href: '/link1', - url: '/link1', - baseUrl: '', -}; -const chromeNavLink2: ChromeNavLink = { - id: `${APP_UI_ID}:${link2.id}`, - title: link2.title, - href: '/link2', - url: '/link2', - baseUrl: '', -}; -const chromeNavLink3: ChromeNavLink = { - id: link3.id, - title: link3.title, - href: '/link3', - url: '/link3', - baseUrl: '', -}; -const chromeNavLinkMl1: ChromeNavLink = { - id: 'ml:subLink-1', - title: 'ML subLink 1', - href: '/ml/link1', - url: '/ml/link1', - baseUrl: '', -}; -const chromeNavLinkMl2: ChromeNavLink = { - id: 'ml:subLink-2', - title: 'ML subLink 2', - href: '/ml/link2', - url: '/ml/link2', - baseUrl: '', -}; -const defaultNavCategory1 = { - id: 'category_one', - title: 'ML Category1', -}; - -(ml as { defaultNavigation: unknown }).defaultNavigation = { - children: [ - { - id: 'root', - children: [ - { - link: chromeNavLinkMl1.id, - }, - ], - }, - { - ...defaultNavCategory1, - children: [ - { - title: 'Overridden ML SubLink 2', - link: chromeNavLinkMl2.id, - }, - ], - }, - ], -}; - -let chromeNavLinks: ChromeNavLink[] = []; -const mockChromeNavLinksGet = jest.fn((id: string): ChromeNavLink | undefined => - chromeNavLinks.find((link) => link.id === id) -); -const mockChromeNavLinksHas = jest.fn((id: string): boolean => - chromeNavLinks.some((link) => link.id === id) -); - -const testServices = { - ...mockServices, - chrome: { - ...mockServices.chrome, - navLinks: { - ...mockServices.chrome.navLinks, - get: mockChromeNavLinksGet, - has: mockChromeNavLinksHas, - }, - }, -}; - -describe('subscribeNavigationTree', () => { - beforeEach(() => { - jest.clearAllMocks(); - chromeNavLinks = [chromeNavLink1, chromeNavLink2, chromeNavLink3]; - }); - - it('should call serverless setNavigation', async () => { - mockProjectNavLinks.mockReturnValueOnce([link1]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLink1.id, - title: link1.title, - path: [chromeNavLink1.id], - deepLink: chromeNavLink1, - }, - ], - }); - }); - - it('should call serverless setNavigation with external link', async () => { - mockProjectNavLinks.mockReturnValueOnce([link3]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLink3.id, - title: chromeNavLink3.title, - path: [chromeNavLink3.id], - deepLink: chromeNavLink3, - }, - ], - }); - }); - - it('should call serverless setNavigation with nested children', async () => { - mockProjectNavLinks.mockReturnValueOnce([{ ...link1, links: [link2] }]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLink1.id, - title: link1.title, - path: [chromeNavLink1.id], - deepLink: chromeNavLink1, - children: [ - { - id: chromeNavLink2.id, - title: link2.title, - path: [chromeNavLink1.id, chromeNavLink2.id], - deepLink: chromeNavLink2, - }, - ], - }, - ], - }); - }); - - it('should add default nav for ML page', async () => { - const chromeNavLinkTest = { - ...chromeNavLink1, - id: `${APP_UI_ID}:${SecurityPageName.mlLanding}`, - }; - chromeNavLinks = [chromeNavLinkTest, chromeNavLinkMl1, chromeNavLinkMl2]; - mockProjectNavLinks.mockReturnValueOnce([{ ...link1, id: SecurityPageName.mlLanding }]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLinkTest.id, - title: link1.title, - path: [chromeNavLinkTest.id], - deepLink: chromeNavLinkTest, - children: [ - { - id: chromeNavLinkMl1.id, - title: chromeNavLinkMl1.title, - path: [chromeNavLinkTest.id, chromeNavLinkMl1.id], - deepLink: chromeNavLinkMl1, - }, - { - id: defaultNavCategory1.id, - title: defaultNavCategory1.title, - path: [chromeNavLinkTest.id, defaultNavCategory1.id], - children: [ - { - id: chromeNavLinkMl2.id, - title: 'Overridden ML SubLink 2', - path: [chromeNavLinkTest.id, defaultNavCategory1.id, chromeNavLinkMl2.id], - deepLink: chromeNavLinkMl2, - }, - ], - }, - ], - }, - ], - }); - }); - - it('should not include links that are not in the chrome navLinks', async () => { - chromeNavLinks = [chromeNavLink2]; - mockProjectNavLinks.mockReturnValueOnce([link1, link2]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLink2.id, - title: link2.title, - path: [chromeNavLink2.id], - deepLink: chromeNavLink2, - }, - ], - }); - }); - - it('should set hidden breadcrumb for blacklisted links', async () => { - const chromeNavLinkTest = { - ...chromeNavLink1, - id: `${APP_UI_ID}:${SecurityPageName.usersEvents}`, // userEvents link is blacklisted - }; - chromeNavLinks = [chromeNavLinkTest, chromeNavLink2]; - mockProjectNavLinks.mockReturnValueOnce([ - { ...link1, id: SecurityPageName.usersEvents }, - link2, - ]); - - subscribeNavigationTree(testServices); - - expect(testServices.serverless.setNavigation).toHaveBeenCalledWith({ - navigationTree: [ - { - id: chromeNavLinkTest.id, - title: link1.title, - path: [chromeNavLinkTest.id], - deepLink: chromeNavLinkTest, - breadcrumbStatus: 'hidden', - }, - { - id: chromeNavLink2.id, - title: link2.title, - path: [chromeNavLink2.id], - deepLink: chromeNavLink2, - }, - ], - }); - }); -}); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.test.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.test.ts new file mode 100644 index 0000000000000..5b3502225e769 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.test.ts @@ -0,0 +1,245 @@ +/* + * Copyright 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 { ChromeNavLink } from '@kbn/core/public'; +import { APP_UI_ID } from '@kbn/security-solution-plugin/common'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { getFormatChromeProjectNavNodes } from './chrome_navigation_tree'; +import { mockServices } from '../../common/services/__mocks__/services.mock'; +import type { ProjectNavigationLink } from '../links/types'; +import type { ExternalPageName } from '../links/constants'; +import * as ml from '@kbn/default-nav-ml'; + +jest.mock('@kbn/default-nav-ml'); + +const link1Id = 'link-1' as SecurityPageName; +const link2Id = 'link-2' as SecurityPageName; +const link3Id = 'externalAppId:link-1' as ExternalPageName; + +const link1: ProjectNavigationLink = { id: link1Id, title: 'link 1' }; +const link2: ProjectNavigationLink = { id: link2Id, title: 'link 2' }; +const link3: ProjectNavigationLink = { id: link3Id, title: 'link 3' }; + +const chromeNavLink1: ChromeNavLink = { + id: `${APP_UI_ID}:${link1.id}`, + title: link1.title, + href: '/link1', + url: '/link1', + baseUrl: '', +}; +const chromeNavLink2: ChromeNavLink = { + id: `${APP_UI_ID}:${link2.id}`, + title: link2.title, + href: '/link2', + url: '/link2', + baseUrl: '', +}; +const chromeNavLink3: ChromeNavLink = { + id: link3.id, + title: link3.title, + href: '/link3', + url: '/link3', + baseUrl: '', +}; +const chromeNavLinkMl1: ChromeNavLink = { + id: 'ml:subLink-1', + title: 'ML subLink 1', + href: '/ml/link1', + url: '/ml/link1', + baseUrl: '', +}; +const chromeNavLinkMl2: ChromeNavLink = { + id: 'ml:subLink-2', + title: 'ML subLink 2', + href: '/ml/link2', + url: '/ml/link2', + baseUrl: '', +}; +const defaultNavCategory1 = { + id: 'category_one', + title: 'ML Category1', +}; + +(ml as { defaultNavigation: unknown }).defaultNavigation = { + children: [ + { + id: 'root', + children: [ + { + link: chromeNavLinkMl1.id, + }, + ], + }, + { + ...defaultNavCategory1, + children: [ + { + title: 'Overridden ML SubLink 2', + link: chromeNavLinkMl2.id, + }, + ], + }, + ], +}; + +let chromeNavLinks: ChromeNavLink[] = []; +const mockChromeNavLinksGet = jest.fn((id: string): ChromeNavLink | undefined => + chromeNavLinks.find((link) => link.id === id) +); +const mockChromeNavLinksHas = jest.fn((id: string): boolean => + chromeNavLinks.some((link) => link.id === id) +); + +const testServices = { + ...mockServices, + chrome: { + ...mockServices.chrome, + navLinks: { + ...mockServices.chrome.navLinks, + get: mockChromeNavLinksGet, + has: mockChromeNavLinksHas, + }, + }, +}; + +describe('formatChromeProjectNavNodes', () => { + const formatChromeProjectNavNodes = getFormatChromeProjectNavNodes(testServices); + + beforeEach(() => { + jest.clearAllMocks(); + chromeNavLinks = [chromeNavLink1, chromeNavLink2, chromeNavLink3]; + }); + + it('should format regular chrome nav nodes', async () => { + const chromeNavNodes = formatChromeProjectNavNodes([link1]); + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLink1.id, + title: link1.title, + path: [chromeNavLink1.id], + deepLink: chromeNavLink1, + }, + ]); + }); + + it('should format external chrome nav nodes', async () => { + const chromeNavNodes = formatChromeProjectNavNodes([link3]); + + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLink3.id, + title: chromeNavLink3.title, + path: [chromeNavLink3.id], + deepLink: chromeNavLink3, + }, + ]); + }); + + it('should format nested links to chrome nav nodes', async () => { + const chromeNavNodes = formatChromeProjectNavNodes([{ ...link1, links: [link2] }]); + + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLink1.id, + title: link1.title, + path: [chromeNavLink1.id], + deepLink: chromeNavLink1, + children: [ + { + id: chromeNavLink2.id, + title: link2.title, + path: [chromeNavLink1.id, chromeNavLink2.id], + deepLink: chromeNavLink2, + }, + ], + }, + ]); + }); + + it('should use the preset nav for ML lings', async () => { + const chromeNavLinkTest = { + ...chromeNavLink1, + id: `${APP_UI_ID}:${SecurityPageName.mlLanding}`, + }; + chromeNavLinks = [chromeNavLinkTest, chromeNavLinkMl1, chromeNavLinkMl2]; + const chromeNavNodes = formatChromeProjectNavNodes([ + { ...link1, id: SecurityPageName.mlLanding }, + ]); + + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLinkTest.id, + title: link1.title, + path: [chromeNavLinkTest.id], + deepLink: chromeNavLinkTest, + children: [ + { + id: chromeNavLinkMl1.id, + title: chromeNavLinkMl1.title, + path: [chromeNavLinkTest.id, chromeNavLinkMl1.id], + deepLink: chromeNavLinkMl1, + }, + { + id: defaultNavCategory1.id, + title: defaultNavCategory1.title, + path: [chromeNavLinkTest.id, defaultNavCategory1.id], + children: [ + { + id: chromeNavLinkMl2.id, + title: 'Overridden ML SubLink 2', + path: [chromeNavLinkTest.id, defaultNavCategory1.id, chromeNavLinkMl2.id], + deepLink: chromeNavLinkMl2, + }, + ], + }, + ], + }, + ]); + }); + + it('should not include links that are not in the chrome navLinks', async () => { + chromeNavLinks = [chromeNavLink2]; + const chromeNavNodes = formatChromeProjectNavNodes([link1, link2]); + + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLink2.id, + title: link2.title, + path: [chromeNavLink2.id], + deepLink: chromeNavLink2, + }, + ]); + }); + + it('should set hidden breadcrumb for blacklisted links', async () => { + const chromeNavLinkTest = { + ...chromeNavLink1, + id: `${APP_UI_ID}:${SecurityPageName.usersEvents}`, // userEvents link is blacklisted + }; + chromeNavLinks = [chromeNavLinkTest, chromeNavLink2]; + + const chromeNavNodes = formatChromeProjectNavNodes([ + { ...link1, id: SecurityPageName.usersEvents }, + link2, + ]); + + expect(chromeNavNodes).toEqual([ + { + id: chromeNavLinkTest.id, + title: link1.title, + path: [chromeNavLinkTest.id], + deepLink: chromeNavLinkTest, + breadcrumbStatus: 'hidden', + }, + { + id: chromeNavLink2.id, + title: link2.title, + path: [chromeNavLink2.id], + deepLink: chromeNavLink2, + }, + ]); + }); +}); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.ts similarity index 62% rename from x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts rename to x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.ts index 55b82759e6a02..16a676e34dd90 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/chrome_navigation_tree.ts @@ -9,55 +9,20 @@ import type { ChromeProjectNavigationNode, NodeDefinition } from '@kbn/core-chro import { defaultNavigation as mlDefaultNav } from '@kbn/default-nav-ml'; import { defaultNavigation as devToolsDefaultNav } from '@kbn/default-nav-devtools'; import { SecurityPageName } from '@kbn/security-solution-navigation'; -import type { Services } from '../common/services'; -import type { ProjectNavigationLink, ProjectPageName } from './links/types'; -import { getNavLinkIdFromProjectPageName } from './links/util'; -import { ExternalPageName } from './links/constants'; +import type { Services } from '../../common/services'; +import type { ProjectNavigationLink, ProjectPageName } from '../links/types'; +import { getNavLinkIdFromProjectPageName } from '../links/util'; +import { ExternalPageName } from '../links/constants'; +import { isBreadcrumbHidden } from './utils'; -// We need to hide breadcrumbs for some pages (tabs) because they appear duplicated. -// These breadcrumbs are incorrectly processed as trailing breadcrumbs in SecuritySolution, because of `SpyRoute` architecture limitations. -// They are navLinks tree with a SecurityPageName, so they should be treated as leading breadcrumbs in ESS as well. -// TODO: Improve the breadcrumbs logic in `use_breadcrumbs_nav` to avoid this workaround. -const HIDDEN_BREADCRUMBS = new Set([ - SecurityPageName.networkDns, - SecurityPageName.networkHttp, - SecurityPageName.networkTls, - SecurityPageName.networkAnomalies, - SecurityPageName.networkEvents, - SecurityPageName.usersAuthentications, - SecurityPageName.usersAnomalies, - SecurityPageName.usersRisk, - SecurityPageName.usersEvents, - SecurityPageName.uncommonProcesses, - SecurityPageName.hostsAnomalies, - SecurityPageName.hostsEvents, - SecurityPageName.hostsRisk, - SecurityPageName.sessions, -]); - -const isBreadcrumbHidden = (id: ProjectPageName): boolean => - HIDDEN_BREADCRUMBS.has(id) || - id.startsWith('management:'); /* management sub-pages set their breadcrumbs themselves */ - -export const subscribeNavigationTree = (services: Services): void => { - const { serverless, getProjectNavLinks$ } = services; - - const formatChromeProjectNavNodes = getFormatChromeProjectNavNodes(services); - - // projectNavLinks$ updates when chrome.navLinks changes, no need to subscribe chrome.navLinks.getNavLinks$() again. - getProjectNavLinks$().subscribe((projectNavLinks) => { - const navigationTree = formatChromeProjectNavNodes(projectNavLinks); - serverless.setNavigation({ navigationTree }); - }); -}; - -// Closure to access the up to date chrome.navLinks from services +// Closure to access the "up-to-date" chrome.navLinks from services export const getFormatChromeProjectNavNodes = (services: Services) => { const formatChromeProjectNavNodes = ( projectNavLinks: ProjectNavigationLink[], path: string[] = [] ): ChromeProjectNavigationNode[] => { const { chrome } = services; + return projectNavLinks.reduce((navNodes, navLink) => { const { id, title, links } = navLink; const navLinkId = getNavLinkIdFromProjectPageName(id); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/index.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/index.ts new file mode 100644 index 0000000000000..4653756dc435c --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/index.ts @@ -0,0 +1,44 @@ +/* + * Copyright 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 { Observable } from 'rxjs'; +import { map } from 'rxjs'; +import type { NavigationTreeDefinition } from '@kbn/shared-ux-chrome-navigation'; +import type { ChromeProjectNavigationNode } from '@kbn/core-chrome-browser'; +import type { LinkCategory } from '@kbn/security-solution-navigation'; +import type { Services } from '../../common/services'; +import type { ProjectNavLinks, ProjectPageName } from '../links/types'; +import { getFormatChromeProjectNavNodes } from './chrome_navigation_tree'; +import { formatNavigationTree } from './navigation_tree'; +import { CATEGORIES } from '../side_navigation/categories'; + +const projectCategories = CATEGORIES as Array>; + +/** + * This class is temporary until we can remove the chrome navigation tree and use only the formatNavigationTree + */ +export class ProjectNavigationTree { + private projectNavLinks$: ProjectNavLinks; + + constructor(private readonly services: Services) { + const { getProjectNavLinks$ } = this.services; + this.projectNavLinks$ = getProjectNavLinks$(); + } + + public getNavigationTree$(): Observable { + return this.projectNavLinks$.pipe( + map((projectNavLinks) => formatNavigationTree(projectNavLinks, projectCategories)) + ); + } + + public getChromeNavigationTree$(): Observable { + const formatChromeProjectNavNodes = getFormatChromeProjectNavNodes(this.services); + return this.projectNavLinks$.pipe( + map((projectNavLinks) => formatChromeProjectNavNodes(projectNavLinks)) + ); + } +} diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.test.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.test.ts new file mode 100644 index 0000000000000..f4971a271d7fb --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.test.ts @@ -0,0 +1,209 @@ +/* + * Copyright 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 { ChromeNavLink } from '@kbn/core/public'; +import { APP_UI_ID } from '@kbn/security-solution-plugin/common'; +import { SecurityPageName, LinkCategoryType } from '@kbn/security-solution-navigation'; +import { formatNavigationTree } from './navigation_tree'; +import type { ProjectNavigationLink } from '../links/types'; +import type { ExternalPageName } from '../links/constants'; +import type { GroupDefinition } from '@kbn/shared-ux-chrome-navigation'; + +const link1Id = 'link-1' as SecurityPageName; +const link2Id = 'link-2' as SecurityPageName; +const link3Id = 'externalAppId:link-1' as ExternalPageName; + +const link1: ProjectNavigationLink = { id: link1Id, title: 'link 1' }; +const link2: ProjectNavigationLink = { id: link2Id, title: 'link 2' }; +const link3: ProjectNavigationLink = { id: link3Id, title: 'link 3' }; + +const chromeNavLink1: ChromeNavLink = { + id: `${APP_UI_ID}:${link1.id}`, + title: link1.title, + href: '/link1', + url: '/link1', + baseUrl: '', +}; +const chromeNavLink2: ChromeNavLink = { + id: `${APP_UI_ID}:${link2.id}`, + title: link2.title, + href: '/link2', + url: '/link2', + baseUrl: '', +}; +const chromeNavLink3: ChromeNavLink = { + id: link3.id, + title: link3.title, + href: '/link3', + url: '/link3', + baseUrl: '', +}; + +describe('formatNavigationTree', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should format flat nav nodes', async () => { + const navigationTree = formatNavigationTree([link1]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + link: chromeNavLink1.id, + title: link1.title, + }, + ]); + }); + + it('should format nested nav nodes with categories', async () => { + const category = { + label: 'Category 1', + type: LinkCategoryType.title, + linkIds: [link1Id], + }; + const navigationTree = formatNavigationTree([link1], [category]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + title: category.label, + id: expect.any(String), + children: [ + { + link: chromeNavLink1.id, + title: link1.title, + }, + ], + }, + ]); + }); + + it('should format flat nav nodes with separator categories', async () => { + const category = { + label: 'Category 1', + type: LinkCategoryType.separator, + linkIds: [link1Id, link2Id], + }; + const navigationTree = formatNavigationTree([link1, link2], [category]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + link: chromeNavLink1.id, + title: link1.title, + }, + { + link: chromeNavLink2.id, + title: link2.title, + }, + ]); + }); + + it('should not format missing nav nodes in the category', async () => { + const category = { + label: 'Category 1', + type: LinkCategoryType.title, + linkIds: [link1Id, link2Id], + }; + const navigationTree = formatNavigationTree([link1], [category]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + title: category.label, + id: expect.any(String), + children: [ + { + link: chromeNavLink1.id, + title: link1.title, + }, + ], + }, + ]); + }); + + it('should format only nav nodes in the category', async () => { + const category = { + label: 'Category 1', + type: LinkCategoryType.title, + linkIds: [link1Id], + }; + const navigationTree = formatNavigationTree([link1, link2], [category]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + title: category.label, + id: expect.any(String), + children: [ + { + link: chromeNavLink1.id, + title: link1.title, + }, + ], + }, + ]); + }); + + it('should format external chrome nav nodes', async () => { + const navigationTree = formatNavigationTree([link3]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + link: chromeNavLink3.id, + title: link3.title, + }, + ]); + }); + + it('should set nested links', async () => { + const navigationTree = formatNavigationTree([ + { ...link1, links: [{ ...link2, links: [link3] }] }, + ]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + link: chromeNavLink1.id, + title: link1.title, + children: [ + { + link: chromeNavLink2.id, + title: link2.title, + children: [{ link: chromeNavLink3.id, title: link3.title }], + }, + ], + }, + ]); + }); + + it('should set hidden breadcrumb for blacklisted links', async () => { + const chromeNavLinkTest = { + ...chromeNavLink1, + id: `${APP_UI_ID}:${SecurityPageName.usersEvents}`, // userEvents link is blacklisted + }; + + const navigationTree = formatNavigationTree([ + { ...link1, id: SecurityPageName.usersEvents }, + link2, + ]); + const securityNode = navigationTree.body?.[0] as GroupDefinition; + + expect(securityNode?.children).toEqual([ + { + link: chromeNavLinkTest.id, + title: link1.title, + breadcrumbStatus: 'hidden', + }, + { + link: chromeNavLink2.id, + title: link2.title, + }, + ]); + }); +}); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.ts new file mode 100644 index 0000000000000..0db77598e7032 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/navigation_tree.ts @@ -0,0 +1,182 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import type { NavigationTreeDefinition } from '@kbn/shared-ux-chrome-navigation'; +import type { AppDeepLinkId, NodeDefinition } from '@kbn/core-chrome-browser'; +import type { NonEmptyArray } from '@kbn/shared-ux-chrome-navigation/src/ui/types'; +import type { LinkCategory } from '@kbn/security-solution-navigation'; +import { + SecurityPageName, + isSeparatorLinkCategory, + isTitleLinkCategory, +} from '@kbn/security-solution-navigation'; +import type { ProjectNavigationLink, ProjectPageName } from '../links/types'; +import { getNavLinkIdFromProjectPageName } from '../links/util'; +import { isBreadcrumbHidden } from './utils'; + +const SECURITY_TITLE = i18n.translate('xpack.securitySolutionServerless.nav.solution.title', { + defaultMessage: 'Security', +}); +const GET_STARTED_TITLE = i18n.translate('xpack.securitySolutionServerless.nav.getStarted.title', { + defaultMessage: 'Get Started', +}); +const DEV_TOOLS_TITLE = i18n.translate('xpack.securitySolutionServerless.nav.devTools.title', { + defaultMessage: 'Developer tools', +}); +const PROJECT_SETTINGS_TITLE = i18n.translate( + 'xpack.securitySolutionServerless.nav.projectSettings.title', + { + defaultMessage: 'Project settings', + } +); + +export const formatNavigationTree = ( + projectNavLinks: ProjectNavigationLink[], + categories?: Readonly>> +): NavigationTreeDefinition => ({ + body: [ + { + type: 'navGroup', + id: 'security_project_nav', + title: SECURITY_TITLE, + icon: 'logoSecurity', + breadcrumbStatus: 'hidden', + defaultIsCollapsed: false, + children: formatNodesFromLinks(projectNavLinks, categories), + }, + ], + footer: [ + { + type: 'navGroup', + id: 'getStarted', + title: GET_STARTED_TITLE, + link: getNavLinkIdFromProjectPageName(SecurityPageName.landing) as AppDeepLinkId, + icon: 'launch', + }, + { + type: 'navGroup', + id: 'devTools', + title: DEV_TOOLS_TITLE, + link: 'dev_tools', + icon: 'editorCodeBlock', + }, + { + type: 'navGroup', + id: 'project_settings_project_nav', + title: PROJECT_SETTINGS_TITLE, + icon: 'gear', + breadcrumbStatus: 'hidden', + children: [ + { + id: 'settings', + children: [ + { + link: 'management', + title: 'Management', + }, + { + link: 'integrations', + }, + { + link: 'fleet', + }, + { + id: 'cloudLinkUserAndRoles', + cloudLink: 'userAndRoles', + }, + { + id: 'cloudLinkBilling', + cloudLink: 'billingAndSub', + }, + ], + }, + ], + }, + ], +}); + +const formatNodesFromLinks = ( + projectNavLinks: ProjectNavigationLink[], + parentCategories?: Readonly>> +): NonEmptyArray | undefined => { + if (projectNavLinks.length === 0) { + return undefined; + } + const nodes: NodeDefinition[] = []; + if (parentCategories?.length) { + parentCategories.forEach((category) => { + nodes.push(...formatNodesFromLinksWithCategory(projectNavLinks, category)); + }, []); + } else { + nodes.push(...formatNodesFromLinksWithoutCategory(projectNavLinks)); + } + if (nodes.length === 0) { + return undefined; + } + return nodes as NonEmptyArray; +}; + +const formatNodesFromLinksWithCategory = ( + projectNavLinks: ProjectNavigationLink[], + category: LinkCategory +): NodeDefinition[] => { + if (!category?.linkIds) { + return []; + } + if (isTitleLinkCategory(category)) { + const children = category.linkIds.reduce((acc, linkId) => { + const projectNavLink = projectNavLinks.find(({ id }) => id === linkId); + if (projectNavLink != null) { + acc.push(createNodeFromProjectNavLink(projectNavLink)); + } + return acc; + }, []); + if (children.length === 0) { + return []; + } + return [ + { + id: `category-${category.label.toLowerCase().replace(' ', '_')}`, + title: category.label, + children: children as NonEmptyArray, + }, + ]; + } else if (isSeparatorLinkCategory(category)) { + // TODO: Add separator support when implemented in the shared-ux navigation + const categoryProjectNavLinks = category.linkIds.reduce( + (acc, linkId) => { + const projectNavLink = projectNavLinks.find(({ id }) => id === linkId); + if (projectNavLink != null) { + acc.push(projectNavLink); + } + return acc; + }, + [] + ); + return formatNodesFromLinksWithoutCategory(categoryProjectNavLinks); + } + return []; +}; + +const formatNodesFromLinksWithoutCategory = (projectNavLinks: ProjectNavigationLink[]) => + projectNavLinks.map((projectNavLink) => + createNodeFromProjectNavLink(projectNavLink) + ) as NonEmptyArray; + +const createNodeFromProjectNavLink = (projectNavLink: ProjectNavigationLink): NodeDefinition => { + const { id, title, links, categories } = projectNavLink; + const link = getNavLinkIdFromProjectPageName(id); + const node: NodeDefinition = { + link: link as AppDeepLinkId, + title, + ...(isBreadcrumbHidden(id) && { breadcrumbStatus: 'hidden' }), + }; + if (links?.length) { + node.children = formatNodesFromLinks(links, categories); + } + return node; +}; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/utils.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/utils.ts new file mode 100644 index 0000000000000..3a908b9913060 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree/utils.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import type { ProjectPageName } from '../links/types'; + +// We need to hide breadcrumbs for some pages (tabs) because they appear duplicated. +// These breadcrumbs are incorrectly processed as trailing breadcrumbs in SecuritySolution, because of `SpyRoute` architecture limitations. +// They are navLinks tree with a SecurityPageName, so they should be treated as leading breadcrumbs in ESS as well. +// TODO: Improve the breadcrumbs logic in `use_breadcrumbs_nav` to avoid this workaround. +const HIDDEN_BREADCRUMBS = new Set([ + SecurityPageName.networkDns, + SecurityPageName.networkHttp, + SecurityPageName.networkTls, + SecurityPageName.networkAnomalies, + SecurityPageName.networkEvents, + SecurityPageName.usersAuthentications, + SecurityPageName.usersAnomalies, + SecurityPageName.usersRisk, + SecurityPageName.usersEvents, + SecurityPageName.uncommonProcesses, + SecurityPageName.hostsAnomalies, + SecurityPageName.hostsEvents, + SecurityPageName.hostsRisk, + SecurityPageName.sessions, +]); + +export const isBreadcrumbHidden = (id: ProjectPageName): boolean => + HIDDEN_BREADCRUMBS.has(id) || + id.startsWith('management:'); /* management sub-pages set their breadcrumbs themselves */ diff --git a/x-pack/plugins/security_solution_serverless/public/plugin.ts b/x-pack/plugins/security_solution_serverless/public/plugin.ts index cbdff908b7b70..3f11cf02cd5b3 100644 --- a/x-pack/plugins/security_solution_serverless/public/plugin.ts +++ b/x-pack/plugins/security_solution_serverless/public/plugin.ts @@ -18,9 +18,12 @@ import type { } from './types'; import { registerUpsellings } from './upselling'; import { createServices } from './common/services/create_services'; -import { configureNavigation } from './navigation'; +import { setupNavigation, startNavigation } from './navigation'; import { setRoutes } from './pages/routes'; -import { projectAppLinksSwitcher } from './navigation/links/app_links'; +import { + parseExperimentalConfigValue, + type ExperimentalFeatures, +} from '../common/experimental_features'; export class SecuritySolutionServerlessPlugin implements @@ -32,19 +35,25 @@ export class SecuritySolutionServerlessPlugin > { private config: ServerlessSecurityPublicConfig; + private experimentalFeatures: ExperimentalFeatures; constructor(private readonly initializerContext: PluginInitializerContext) { this.config = this.initializerContext.config.get(); + this.experimentalFeatures = {} as ExperimentalFeatures; } public setup( - _core: CoreSetup, + core: CoreSetup, setupDeps: SecuritySolutionServerlessPluginSetupDeps ): SecuritySolutionServerlessPluginSetup { const { securitySolution } = setupDeps; - securitySolution.setAppLinksSwitcher(projectAppLinksSwitcher); - securitySolution.setDataQualityPanelConfig({ isILMAvailable: false }); + this.experimentalFeatures = parseExperimentalConfigValue( + this.config.enableExperimental, + securitySolution.experimentalFeatures + ).features; + + setupNavigation(core, setupDeps, this.experimentalFeatures); return {}; } @@ -55,16 +64,16 @@ export class SecuritySolutionServerlessPlugin const { securitySolution } = startDeps; const { productTypes } = this.config; - const services = createServices(core, startDeps); + const services = createServices(core, startDeps, this.experimentalFeatures); - registerUpsellings(securitySolution.getUpselling(), this.config.productTypes, services); + registerUpsellings(securitySolution.getUpselling(), productTypes, services); securitySolution.setComponents({ getStarted: getSecurityGetStartedComponent(services, productTypes), dashboardsLandingCallout: getDashboardsLandingCallout(services), }); - configureNavigation(services, this.config); + startNavigation(services, this.config); setRoutes(services); return {}; diff --git a/x-pack/plugins/security_solution_serverless/public/types.ts b/x-pack/plugins/security_solution_serverless/public/types.ts index 51d335d5fd3cf..cb34701fe6feb 100644 --- a/x-pack/plugins/security_solution_serverless/public/types.ts +++ b/x-pack/plugins/security_solution_serverless/public/types.ts @@ -13,7 +13,7 @@ import type { import type { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/public'; import type { ManagementSetup, ManagementStart } from '@kbn/management-plugin/public'; import type { CloudStart } from '@kbn/cloud-plugin/public'; -import type { SecurityProductTypes, DeveloperConfig } from '../common/config'; +import type { ServerlessSecurityConfigSchema } from '../common/config'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SecuritySolutionServerlessPluginSetup {} @@ -36,7 +36,7 @@ export interface SecuritySolutionServerlessPluginStartDeps { cloud: CloudStart; } -export interface ServerlessSecurityPublicConfig { - productTypes: SecurityProductTypes; - developer: DeveloperConfig; -} +export type ServerlessSecurityPublicConfig = Pick< + ServerlessSecurityConfigSchema, + 'productTypes' | 'developer' | 'enableExperimental' +>; diff --git a/x-pack/plugins/security_solution_serverless/server/app_features/index.ts b/x-pack/plugins/security_solution_serverless/server/app_features/index.ts index 95c5bea8f05df..52569aa016da4 100644 --- a/x-pack/plugins/security_solution_serverless/server/app_features/index.ts +++ b/x-pack/plugins/security_solution_serverless/server/app_features/index.ts @@ -7,15 +7,20 @@ import type { AppFeatureKeys } from '@kbn/security-solution-features'; import type { AppFeaturesConfigurator } from '@kbn/security-solution-plugin/server/lib/app_features_service/types'; +import type { ServerlessSecurityConfig } from '../config'; import { getCasesAppFeaturesConfigurator } from './cases_app_features_config'; import { getSecurityAppFeaturesConfigurator } from './security_app_features_config'; import { getSecurityAssistantAppFeaturesConfigurator } from './security_assistant_app_features_config'; export const getProductAppFeaturesConfigurator = ( - enabledAppFeatureKeys: AppFeatureKeys + enabledAppFeatureKeys: AppFeatureKeys, + config: ServerlessSecurityConfig ): AppFeaturesConfigurator => { return { - security: getSecurityAppFeaturesConfigurator(enabledAppFeatureKeys), + security: getSecurityAppFeaturesConfigurator( + enabledAppFeatureKeys, + config.experimentalFeatures + ), cases: getCasesAppFeaturesConfigurator(enabledAppFeatureKeys), securityAssistant: getSecurityAssistantAppFeaturesConfigurator(enabledAppFeatureKeys), }; diff --git a/x-pack/plugins/security_solution_serverless/server/app_features/security_app_features_config.ts b/x-pack/plugins/security_solution_serverless/server/app_features/security_app_features_config.ts index a18e9c39d2f5a..9c85e4eb3290d 100644 --- a/x-pack/plugins/security_solution_serverless/server/app_features/security_app_features_config.ts +++ b/x-pack/plugins/security_solution_serverless/server/app_features/security_app_features_config.ts @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { ExperimentalFeatures } from '@kbn/security-solution-plugin/common'; import type { AppFeatureKeys, AppFeatureKibanaConfig, @@ -15,12 +14,14 @@ import { createEnabledAppFeaturesConfigMap, } from '@kbn/security-solution-features/config'; import { AppFeatureSecurityKey, SecuritySubFeatureId } from '@kbn/security-solution-features/keys'; +import type { ExperimentalFeatures } from '../../common/experimental_features'; export const getSecurityAppFeaturesConfigurator = - (enabledAppFeatureKeys: AppFeatureKeys) => ( + enabledAppFeatureKeys: AppFeatureKeys, _: ExperimentalFeatures // currently un-used, but left here as a convenience for possible future use - ): AppFeaturesSecurityConfig => { + ) => + (): AppFeaturesSecurityConfig => { return createEnabledAppFeaturesConfigMap(securityAppFeaturesConfig, enabledAppFeatureKeys); }; diff --git a/x-pack/plugins/security_solution_serverless/server/config.ts b/x-pack/plugins/security_solution_serverless/server/config.ts index 0ea82d1d70004..551fd5976a761 100644 --- a/x-pack/plugins/security_solution_serverless/server/config.ts +++ b/x-pack/plugins/security_solution_serverless/server/config.ts @@ -6,18 +6,37 @@ */ import { schema, type TypeOf } from '@kbn/config-schema'; -import type { PluginConfigDescriptor } from '@kbn/core/server'; +import type { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; +import type { SecuritySolutionPluginSetup } from '@kbn/security-solution-plugin/server/plugin_contract'; import { developerConfigSchema, productTypes } from '../common/config'; +import type { ExperimentalFeatures } from '../common/experimental_features'; +import { parseExperimentalConfigValue } from '../common/experimental_features'; export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), developer: developerConfigSchema, productTypes, + /** + * For internal use. A list of string values (comma delimited) that will enable experimental + * type of functionality that is not yet released. Valid values for this settings need to + * be defined in: + * `x-pack/plugins/security_solution_serverless/common/experimental_features.ts` + * under the `allowedExperimentalValues` object + * + * @example + * xpack.securitySolutionServerless.enableExperimental: + * - someCrazyServerlessFeature + * - someEvenCrazierServerlessFeature + */ + enableExperimental: schema.arrayOf(schema.string(), { + defaultValue: () => [], + }), }); -export type ServerlessSecurityConfig = TypeOf; +export type ServerlessSecuritySchema = TypeOf; -export const config: PluginConfigDescriptor = { +export const config: PluginConfigDescriptor = { exposeToBrowser: { + enableExperimental: true, productTypes: true, developer: true, }, @@ -30,3 +49,44 @@ export const config: PluginConfigDescriptor = { ), ], }; + +export type ServerlessSecurityConfig = Omit & { + experimentalFeatures: ExperimentalFeatures; +}; + +export const createConfig = ( + context: PluginInitializerContext, + securitySolution: SecuritySolutionPluginSetup +): ServerlessSecurityConfig => { + const { enableExperimental, ...pluginConfig } = context.config.get(); + const logger = context.logger.get('config'); + + const { + invalid, + duplicated, + features: experimentalFeatures, + } = parseExperimentalConfigValue(enableExperimental, securitySolution.experimentalFeatures); + + if (invalid.length) { + logger.warn(`Unsupported "xpack.securitySolutionServerless.enableExperimental" values detected. +The following configuration values are not supported and should be removed from the configuration: + + xpack.securitySolutionServerless.enableExperimental: +${invalid.map((key) => ` - ${key}`).join('\n')} +`); + } + + if (duplicated.length) { + logger.warn(`Duplicated "xpack.securitySolutionServerless.enableExperimental" values detected. +The following configuration values are should only be defined using the generic "xpack.securitySolution.enableExperimental": + + xpack.securitySolutionServerless.enableExperimental: +${duplicated.map((key) => ` - ${key}`).join('\n')} +`); + } + + return { + ...pluginConfig, + experimentalFeatures, + }; +}; diff --git a/x-pack/plugins/security_solution_serverless/server/plugin.ts b/x-pack/plugins/security_solution_serverless/server/plugin.ts index e960d6743942c..fc77d2829d9f4 100644 --- a/x-pack/plugins/security_solution_serverless/server/plugin.ts +++ b/x-pack/plugins/security_solution_serverless/server/plugin.ts @@ -17,6 +17,7 @@ import { SECURITY_PROJECT_SETTINGS } from '@kbn/serverless-security-settings'; import { getProductAppFeatures } from '../common/pli/pli_features'; import type { ServerlessSecurityConfig } from './config'; +import { createConfig } from './config'; import type { SecuritySolutionServerlessPluginSetup, SecuritySolutionServerlessPluginStart, @@ -52,15 +53,18 @@ export class SecuritySolutionServerlessPlugin } public setup(coreSetup: CoreSetup, pluginsSetup: SecuritySolutionServerlessPluginSetupDeps) { + this.config = createConfig(this.initializerContext, pluginsSetup.securitySolution); + // securitySolutionEss plugin should always be disabled when securitySolutionServerless is enabled. // This check is an additional layer of security to prevent double registrations when - // `plugins.forceEnableAllPlugins` flag is enabled). + // `plugins.forceEnableAllPlugins` flag is enabled. Should never happen in real scenarios. const shouldRegister = pluginsSetup.securitySolutionEss == null; if (shouldRegister) { const productTypesStr = JSON.stringify(this.config.productTypes, null, 2); this.logger.info(`Security Solution running with product types:\n${productTypesStr}`); const appFeaturesConfigurator = getProductAppFeaturesConfigurator( - getProductAppFeatures(this.config.productTypes) + getProductAppFeatures(this.config.productTypes), + this.config ); pluginsSetup.securitySolution.setAppFeaturesConfigurator(appFeaturesConfigurator); } @@ -97,9 +101,9 @@ export class SecuritySolutionServerlessPlugin return {}; } - public start(_coreStart: CoreStart, pluginsSetup: SecuritySolutionServerlessPluginStartDeps) { - const internalESClient = _coreStart.elasticsearch.client.asInternalUser; - const internalSOClient = _coreStart.savedObjects.createInternalRepository(); + public start(coreStart: CoreStart, pluginsSetup: SecuritySolutionServerlessPluginStartDeps) { + const internalESClient = coreStart.elasticsearch.client.asInternalUser; + const internalSOClient = coreStart.savedObjects.createInternalRepository(); this.cloudSecurityUsageReportingTask?.start({ taskManager: pluginsSetup.taskManager, diff --git a/x-pack/plugins/security_solution_serverless/tsconfig.json b/x-pack/plugins/security_solution_serverless/tsconfig.json index 2aa2b979180f5..77481caa489fb 100644 --- a/x-pack/plugins/security_solution_serverless/tsconfig.json +++ b/x-pack/plugins/security_solution_serverless/tsconfig.json @@ -43,6 +43,7 @@ "@kbn/core-elasticsearch-server", "@kbn/usage-collection-plugin", "@kbn/cloud-defend-plugin", - "@kbn/core-logging-server-mocks" + "@kbn/core-logging-server-mocks", + "@kbn/shared-ux-chrome-navigation" ] } From 8b89c940c2048a238d1bcf51109be19ccfd9efd6 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 4 Oct 2023 08:29:00 -0600 Subject: [PATCH 065/170] =?UTF-8?q?Unskip=20flaky=20test=20functional/apps?= =?UTF-8?q?/dashboard/group2/dashboard=5Ffilter=5Fbar=C2=B7ts=20(#167825)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/kibana/issues/167175 flaky test runner https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3292 Test failing because actions buttons are not visible. Screen shot from failed test shows cell did not get selected. PR adds retry around getting action button logic to ensure cell is clicked again in the event the action button is not found Notice how cell is not selected in screen shot below. Screenshot 2023-10-03 at 10 57 23 AM --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../dashboard/group2/dashboard_filter_bar.ts | 7 +--- .../discover/group2/_data_grid_doc_table.ts | 18 ++------ .../management/data_views/_scripted_fields.ts | 4 +- test/functional/services/data_grid.ts | 41 +++++++++++++++++++ 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts index 044339930ae16..276a3f29e8fd5 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts @@ -193,8 +193,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/167175 - describe.skip('saved search filtering', function () { + describe('saved search filtering', function () { before(async () => { await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); @@ -209,9 +208,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (isLegacyDefault) { await testSubjects.click('docTableCellFilter'); } else { - const documentCell = await dataGrid.getCellElement(1, 3); - await documentCell.click(); - await testSubjects.click('filterForButton'); + await dataGrid.clickCellFilterForButton(1, 3); } const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(1); diff --git a/test/functional/apps/discover/group2/_data_grid_doc_table.ts b/test/functional/apps/discover/group2/_data_grid_doc_table.ts index 5aedb67b6d5e7..b8b892afce306 100644 --- a/test/functional/apps/discover/group2/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2/_data_grid_doc_table.ts @@ -83,14 +83,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(`row document timestamp: ${text}`); return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - const docCell = await dataGrid.getCellElement(0, 3); - await docCell.click(); - const expandCellContentButton = await docCell.findByTestSubject( - 'euiDataGridCellExpandButton' - ); - await expandCellContentButton.click(); - let expandDocId = ''; + await dataGrid.clickCellExpandButton(0, 3); + + let expandDocId = ''; await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { const text = await monacoEditor.getCodeEditorValue(); const flyoutJson = JSON.parse(text); @@ -132,15 +128,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(`row document timestamp: ${text}`); return text === 'Sep 22, 2015 @ 23:50:13.253'; }); - const docCell = await dataGrid.getCellElement(0, 3); - await docCell.click(); - const expandCellContentButton = await docCell.findByTestSubject( - 'euiDataGridCellExpandButton' - ); - await expandCellContentButton.click(); + await dataGrid.clickCellExpandButton(0, 3); let expandDocId = ''; - await retry.waitForWithTimeout('expandDocId to be valid', 5000, async () => { const text = await monacoEditor.getCodeEditorValue(); return (expandDocId = JSON.parse(text)._id) === 'AU_x3_g4GFA8no6QjkYX'; diff --git a/test/functional/apps/management/data_views/_scripted_fields.ts b/test/functional/apps/management/data_views/_scripted_fields.ts index e49eb11310504..2c70161a3bc43 100644 --- a/test/functional/apps/management/data_views/_scripted_fields.ts +++ b/test/functional/apps/management/data_views/_scripted_fields.ts @@ -496,9 +496,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should filter by scripted field value in Discover', async function () { await PageObjects.header.waitUntilLoadingHasFinished(); - const documentCell = await dataGrid.getCellElement(0, 3); - await documentCell.click(); - await testSubjects.click('filterForButton'); + await dataGrid.clickCellFilterForButton(0, 3); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async function () { diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index 1bdc1b070dc33..4bda8d2e4881d 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -93,6 +93,47 @@ export class DataGridService extends FtrService { return await this.find.byCssSelector(this.getCellElementSelector(rowIndex, columnIndex)); } + private async getCellActionButton( + rowIndex: number = 0, + columnIndex: number = 0, + selector: string + ): Promise { + let actionButton: WebElementWrapper | undefined; + await this.retry.try(async () => { + const cell = await this.getCellElement(rowIndex, columnIndex); + await cell.click(); + actionButton = await cell.findByTestSubject(selector); + if (!actionButton) { + throw new Error(`Unable to find cell action button ${selector}`); + } + }); + return actionButton!; + } + + /** + * Clicks grid cell 'expand' action button + * @param rowIndex data row index starting from 0 (0 means 1st row) + * @param columnIndex column index starting from 0 (0 means 1st column) + */ + public async clickCellExpandButton(rowIndex: number = 0, columnIndex: number = 0) { + const actionButton = await this.getCellActionButton( + rowIndex, + columnIndex, + 'euiDataGridCellExpandButton' + ); + await actionButton.click(); + } + + /** + * Clicks grid cell 'filter for' action button + * @param rowIndex data row index starting from 0 (0 means 1st row) + * @param columnIndex column index starting from 0 (0 means 1st column) + */ + public async clickCellFilterForButton(rowIndex: number = 0, columnIndex: number = 0) { + const actionButton = await this.getCellActionButton(rowIndex, columnIndex, 'filterForButton'); + await actionButton.click(); + } + /** * The same as getCellElement, but useful when multiple data grids are on the page. */ From 9e304027e5d7c4b1aff023e9f548295c679a59de Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 4 Oct 2023 08:29:28 -0600 Subject: [PATCH 066/170] =?UTF-8?q?unskip=20Failing=20test:=20Chrome=20X-P?= =?UTF-8?q?ack=20UI=20Functional=20Tests.x-pack/test/functional/apps/maps/?= =?UTF-8?q?group2/embeddable/add=5Fto=5Fdashboard=C2=B7js=20(#167566)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/kibana/issues/167320 flaky test runner https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3278 Flakiness caused by https://github.com/elastic/kibana/pull/166991. Cause of flakiness is not waiting for dashboard-picker to finish loading options after setting the search value. Flaky test highlights 3 other problems with `SavedObjectSaveModalDashboard` component that are resolved in this PR: 1) Dashboard select not disabled when "New" or "None" is selected. Regression from https://github.com/elastic/kibana/pull/166991 2) There is no form validation message giving visual feedback when users click "Save" with "Existing" and no selected dashboard. 3) https://github.com/elastic/kibana/pull/166991 switched dashboard selector from `EuiComboBox` to `EuiSelectable`. This changed the behavior of selecting the same item. With the `EuiComboBox` implemenation, selecting the same item retained the selection while selecting the same item with the `EuiSelectable` implementation unselected the item. Screenshot 2023-09-29 at 12 51 29 PM --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../dashboard_picker/dashboard_picker.tsx | 12 ++++-------- .../saved_object_save_modal_dashboard.tsx | 18 +++++++++++++++--- ...t_save_modal_dashboard_selector.stories.tsx | 2 ++ ...ed_object_save_modal_dashboard_selector.tsx | 14 ++++++++++++++ .../page_objects/time_to_visualize_page.ts | 3 +++ .../maps/group2/embeddable/add_to_dashboard.js | 3 +-- 6 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/plugins/presentation_util/public/components/dashboard_picker/dashboard_picker.tsx b/src/plugins/presentation_util/public/components/dashboard_picker/dashboard_picker.tsx index ee72f9e03c40e..b2d8a576ebae8 100644 --- a/src/plugins/presentation_util/public/components/dashboard_picker/dashboard_picker.tsx +++ b/src/plugins/presentation_util/public/components/dashboard_picker/dashboard_picker.tsx @@ -117,6 +117,7 @@ export function DashboardPicker({ isDisabled, onChange, idsToOmit }: DashboardPi panelPaddingSize="none" input={ { setIsPopoverOpen(false); - const nextSelectedDashboard: DashboardOption | null = - selected.value === selectedDashboard?.value ? null : selected; - setSelectedDashboard(nextSelectedDashboard); - onChange( - nextSelectedDashboard - ? { name: nextSelectedDashboard.label, id: nextSelectedDashboard.value } - : null - ); + if (!selected || selected.value === selectedDashboard?.value) return; + setSelectedDashboard(selected); + onChange({ name: selected.label, id: selected.value }); }} renderOption={(option) => {option.label}} > diff --git a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx index 032bd022afd3c..8425454d35968 100644 --- a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx +++ b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx @@ -10,7 +10,11 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { OnSaveProps, SavedObjectSaveModal } from '@kbn/saved-objects-plugin/public'; +import { + OnSaveProps, + SavedObjectSaveModal, + type SaveModalState, +} from '@kbn/saved-objects-plugin/public'; import { pluginServices } from '../services'; import { SaveModalDashboardProps } from './types'; @@ -39,7 +43,7 @@ function SavedObjectSaveModalDashboard(props: SaveModalDashboardProps) { const [copyOnSave, setCopyOnSave] = useState(initialCopyOnSave); const rightOptions = !disableDashboardOptions - ? () => ( + ? ({ hasAttemptedSubmit }: SaveModalState) => ( { setSelectedDashboard(dash); @@ -48,7 +52,15 @@ function SavedObjectSaveModalDashboard(props: SaveModalDashboardProps) { setDashboardOption(option); }} canSaveByReference={canSaveByReference} - {...{ copyOnSave, documentId, dashboardOption, setAddToLibrary, isAddToLibrarySelected }} + {...{ + copyOnSave, + documentId, + dashboardOption, + setAddToLibrary, + isAddToLibrarySelected, + hasAttemptedSubmit, + hasSelectedDashboard: Boolean(selectedDashboard), + }} /> ) : null; diff --git a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.stories.tsx b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.stories.tsx index 6f4edc1bd2853..24598c49f98ae 100644 --- a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.stories.tsx +++ b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.stories.tsx @@ -62,6 +62,8 @@ export function Example({ documentId={hasDocumentId ? 'abc' : undefined} isAddToLibrarySelected={isAddToLibrarySelected} setAddToLibrary={setAddToLibrary} + hasAttemptedSubmit={false} + hasSelectedDashboard={false} /> ); } diff --git a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.tsx b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.tsx index ce9d82ddf1db9..3a96fc148aff7 100644 --- a/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.tsx +++ b/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard_selector.tsx @@ -33,6 +33,8 @@ export interface SaveModalDashboardSelectorProps { isAddToLibrarySelected: boolean; dashboardOption: 'new' | 'existing' | null; onChange: (dashboardOption: 'new' | 'existing' | null) => void; + hasAttemptedSubmit: boolean; + hasSelectedDashboard: boolean; } export function SaveModalDashboardSelector(props: SaveModalDashboardSelectorProps) { @@ -45,6 +47,8 @@ export function SaveModalDashboardSelector(props: SaveModalDashboardSelectorProp dashboardOption, onChange, copyOnSave, + hasAttemptedSubmit, + hasSelectedDashboard, } = props; const isDisabled = !copyOnSave && !!documentId; @@ -81,6 +85,16 @@ export function SaveModalDashboardSelector(props: SaveModalDashboardSelectorProp isDisabled={dashboardOption !== 'existing'} onChange={onSelectDashboard} /> + {hasAttemptedSubmit && dashboardOption === 'existing' && !hasSelectedDashboard ? ( +
    + {i18n.translate( + 'presentationUtil.saveModalDashboard.existingDashboardRequiredMessage', + { + defaultMessage: 'Dashboard is required', + } + )} +
    + ) : null}
    diff --git a/test/functional/page_objects/time_to_visualize_page.ts b/test/functional/page_objects/time_to_visualize_page.ts index 3b51e98029016..9ff567fcb4ef3 100644 --- a/test/functional/page_objects/time_to_visualize_page.ts +++ b/test/functional/page_objects/time_to_visualize_page.ts @@ -75,8 +75,11 @@ export class TimeToVisualizePageObject extends FtrService { await label.click(); if (dashboardId) { + await this.testSubjects.waitForEnabled('open-dashboard-picker'); await this.testSubjects.click('open-dashboard-picker'); await this.testSubjects.setValue('dashboard-picker-search', dashboardId); + await this.common.sleep(150); // wait for input debounce so loading starts + await this.testSubjects.waitForEnabled('open-dashboard-picker'); await this.testSubjects.click( `dashboard-picker-option-${dashboardId.replaceAll(' ', '-')}` ); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js index dbe4513b1d7ee..fcd3d06115508 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js @@ -21,8 +21,7 @@ export default function ({ getPageObjects, getService }) { const testSubjects = getService('testSubjects'); const security = getService('security'); - // Failing: See https://github.com/elastic/kibana/issues/167320 - describe.skip('maps add-to-dashboard save flow', () => { + describe('maps add-to-dashboard save flow', () => { before(async () => { await security.testUser.setRoles( [ From ad0c38d75d641a235783cd37bfd2b147adb75733 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 4 Oct 2023 16:35:27 +0200 Subject: [PATCH 067/170] [Search] Add connectors table (#167900) ## Summary This adds a connectors table to the Serverless Search plugin. Actions for the table will be added after [this related PR](https://github.com/elastic/kibana/pull/167804) has merged. Screenshot 2023-10-03 at 17 24 22 --- packages/kbn-search-connectors/utils/index.ts | 1 + .../utils/sync_status_to_text.test.ts | 7 +- .../utils/sync_status_to_text.ts | 29 ++- .../sync_jobs/sync_jobs_history_table.tsx | 7 +- .../serverless_search/common/i18n_string.ts | 3 + .../connectors/connectors_table.tsx | 234 ++++++++++++++++++ .../connectors/edit_description.tsx | 4 +- .../connectors/empty_connectors_prompt.tsx | 196 +++++++++++++++ .../components/connectors_overview.tsx | 212 +--------------- .../components/connectors_router.tsx | 3 +- .../hooks/api/use_connector_types.tsx | 1 + .../application/hooks/api/use_connectors.tsx | 21 ++ .../application/hooks/use_asset_base_path.tsx | 14 ++ .../translations/translations/fr-FR.json | 9 - .../translations/translations/ja-JP.json | 9 - .../translations/translations/zh-CN.json | 9 - 16 files changed, 510 insertions(+), 249 deletions(-) rename {x-pack/plugins/enterprise_search/public/applications/enterprise_search_content => packages/kbn-search-connectors}/utils/sync_status_to_text.test.ts (91%) rename {x-pack/plugins/enterprise_search/public/applications/enterprise_search_content => packages/kbn-search-connectors}/utils/sync_status_to_text.ts (62%) create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/hooks/api/use_connectors.tsx create mode 100644 x-pack/plugins/serverless_search/public/application/hooks/use_asset_base_path.tsx diff --git a/packages/kbn-search-connectors/utils/index.ts b/packages/kbn-search-connectors/utils/index.ts index ae2bbe2a818aa..d10c59857cb7d 100644 --- a/packages/kbn-search-connectors/utils/index.ts +++ b/packages/kbn-search-connectors/utils/index.ts @@ -7,3 +7,4 @@ */ export * from './is_category_entry'; +export * from './sync_status_to_text'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts b/packages/kbn-search-connectors/utils/sync_status_to_text.test.ts similarity index 91% rename from x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts rename to packages/kbn-search-connectors/utils/sync_status_to_text.test.ts index 5f11fabe1bc48..6c448ea241dd2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.test.ts +++ b/packages/kbn-search-connectors/utils/sync_status_to_text.test.ts @@ -1,11 +1,12 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ -import { SyncStatus } from '@kbn/search-connectors'; +import { SyncStatus } from '..'; import { syncStatusToColor, syncStatusToText } from './sync_status_to_text'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts b/packages/kbn-search-connectors/utils/sync_status_to_text.ts similarity index 62% rename from x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts rename to packages/kbn-search-connectors/utils/sync_status_to_text.ts index 83b3245999dfc..b00e873bd52e0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/sync_status_to_text.ts +++ b/packages/kbn-search-connectors/utils/sync_status_to_text.ts @@ -1,44 +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. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import { i18n } from '@kbn/i18n'; -import { SyncJobType, SyncStatus } from '@kbn/search-connectors'; +import { SyncJobType, SyncStatus } from '..'; export function syncStatusToText(status: SyncStatus): string { switch (status) { case SyncStatus.COMPLETED: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.completed', { + return i18n.translate('searchConnectors.syncStatus.completed', { defaultMessage: 'Sync complete', }); case SyncStatus.ERROR: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.error', { + return i18n.translate('searchConnectors.syncStatus.error', { defaultMessage: 'Sync failure', }); case SyncStatus.IN_PROGRESS: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.inProgress', { + return i18n.translate('searchConnectors.syncStatus.inProgress', { defaultMessage: 'Sync in progress', }); case SyncStatus.CANCELED: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.canceling', { + return i18n.translate('searchConnectors.syncStatus.canceling', { defaultMessage: 'Sync canceled', }); case SyncStatus.CANCELING: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.canceled', { + return i18n.translate('searchConnectors.syncStatus.canceled', { defaultMessage: 'Canceling sync', }); case SyncStatus.PENDING: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.pending', { + return i18n.translate('searchConnectors.syncStatus.pending', { defaultMessage: 'Sync pending', }); case SyncStatus.SUSPENDED: - return i18n.translate('xpack.enterpriseSearch.content.syncStatus.suspended', { + return i18n.translate('searchConnectors.syncStatus.suspended', { defaultMessage: 'Sync suspended', }); + default: + return status; } } @@ -54,17 +57,19 @@ export function syncStatusToColor(status: SyncStatus): string { case SyncStatus.SUSPENDED: case SyncStatus.CANCELING: return 'warning'; + default: + return 'default'; } } export const syncJobTypeToText = (syncType: SyncJobType): string => { switch (syncType) { case SyncJobType.FULL: - return i18n.translate('xpack.enterpriseSearch.content.syncJobType.full', { + return i18n.translate('searchConnectors.syncJobType.full', { defaultMessage: 'Full content', }); case SyncJobType.INCREMENTAL: - return i18n.translate('xpack.enterpriseSearch.content.syncJobType.incremental', { + return i18n.translate('searchConnectors.syncJobType.incremental', { defaultMessage: 'Incremental content', }); default: diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs_history_table.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs_history_table.tsx index c659320614c6c..2c7120147e62f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs_history_table.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs_history_table.tsx @@ -15,15 +15,12 @@ import { i18n } from '@kbn/i18n'; import { SyncJobType, SyncStatus } from '@kbn/search-connectors'; +import { syncJobTypeToText, syncStatusToColor, syncStatusToText } from '@kbn/search-connectors'; + import { FormattedDateTime } from '../../../../shared/formatted_date_time'; import { pageToPagination } from '../../../../shared/pagination/page_to_pagination'; import { durationToText } from '../../../utils/duration_to_text'; -import { - syncJobTypeToText, - syncStatusToColor, - syncStatusToText, -} from '../../../utils/sync_status_to_text'; import { IndexViewLogic } from '../index_view_logic'; diff --git a/x-pack/plugins/serverless_search/common/i18n_string.ts b/x-pack/plugins/serverless_search/common/i18n_string.ts index 58dbbd985d1d9..37bd8f0ff51b4 100644 --- a/x-pack/plugins/serverless_search/common/i18n_string.ts +++ b/x-pack/plugins/serverless_search/common/i18n_string.ts @@ -54,6 +54,9 @@ export const INVALID_JSON_ERROR: string = i18n.translate( } ); +export const CONNECTORS_LABEL: string = i18n.translate('xpack.serverlessSearch.connectors', { + defaultMessage: 'Connectors', +}); export const CONNECTOR_LABEL: string = i18n.translate('xpack.serverlessSearch.connector', { defaultMessage: 'Connector', }); diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx new file mode 100644 index 0000000000000..6262cc8a12e38 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx @@ -0,0 +1,234 @@ +/* + * Copyright 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 { + Criteria, + EuiBadge, + EuiBasicTable, + EuiBasicTableColumn, + EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiI18nNumber, + EuiIcon, + EuiLink, + EuiSearchBar, + EuiSelect, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + Connector, + ConnectorStatus, + SyncStatus, + syncStatusToColor, + syncStatusToText, +} from '@kbn/search-connectors'; +import React, { useEffect, useState } from 'react'; +import { generatePath } from 'react-router-dom'; +import { CONNECTORS_LABEL } from '../../../../common/i18n_string'; +import { useConnectors } from '../../hooks/api/use_connectors'; +import { useConnectorTypes } from '../../hooks/api/use_connector_types'; +import { EDIT_CONNECTOR_PATH } from '../connectors_router'; + +export const ConnectorsTable: React.FC = () => { + const [pageIndex, setPageIndex] = useState(0); + const [pageSize, setPageSize] = useState(10); + const [query, setQuery] = useState(''); + + const { data, isError } = useConnectors(); + const { data: connectorTypes } = useConnectorTypes(); + + type Filter = 'service_type' | 'name' | 'last_sync_status' | 'description' | 'service_type'; + const [filter, setFilter] = useState('name'); + + useEffect(() => { + if (query) { + setPageIndex(0); + } + }, [query, filter]); + + if (isError) { + return ( + + {i18n.translate('xpack.serverlessSearch.connectors.errorFetchingConnectors', { + defaultMessage: 'We encountered an error fetching your connectors.', + })} + + ); + } + + const connectedLabel = i18n.translate('xpack.serverlessSearch.connectors.connected', { + defaultMessage: 'Connected', + }); + + const configuredLabel = i18n.translate('xpack.serverlessSearch.connectors.configuredLabel', { + defaultMessage: 'Configured', + }); + + const typeLabel = i18n.translate('xpack.serverlessSearch.connectors.typeLabel', { + defaultMessage: 'Type', + }); + + const nameLabel = i18n.translate('xpack.serverlessSearch.connectors.nameLabel', { + defaultMessage: 'Name', + }); + + const syncStatusLabel = i18n.translate('xpack.serverlessSearch.connectors.syncStatusLabel', { + defaultMessage: 'Sync status', + }); + + const filterOptions: Array<{ text: string; value: Filter }> = [ + { text: nameLabel, value: 'name' }, + { text: typeLabel, value: 'service_type' }, + { + text: i18n.translate('xpack.serverlessSearch.connectors.descriptionLabel', { + defaultMessage: 'Description', + }), + value: 'description', + }, + { text: syncStatusLabel, value: 'last_sync_status' }, + ]; + + const columns: Array> = [ + { + field: 'name', + name: nameLabel, + render: (name: string, connector: Connector) => ( + + {name || connector.id} + + ), + truncateText: true, + }, + { + field: 'service_type', + name: typeLabel, + render: (serviceType: string | null) => { + const typeData = (connectorTypes?.connectors || []).find( + (connector) => connector.serviceType === (serviceType ?? '') + ); + if (!typeData) { + return <>; + } + return ( + + + + + + {typeData.name} + + + ); + }, + }, + { + field: 'status', + name: connectedLabel, + render: (status: ConnectorStatus) => + status === ConnectorStatus.CONNECTED ? ( + + ) : ( + + {i18n.translate('xpack.serverlessSearch.connectors.notConnectedLabel', { + defaultMessage: 'Not connected', + })} + + ), + }, + { + field: 'status', + name: configuredLabel, + render: (status: ConnectorStatus) => + [ConnectorStatus.CONNECTED, ConnectorStatus.CONFIGURED].includes(status) ? ( + + ) : ( + + {i18n.translate('xpack.serverlessSearch.connectors.notConfiguredLabel', { + defaultMessage: 'Not configured', + })} + + ), + }, + { + field: 'last_sync_status', + name: syncStatusLabel, + render: (syncStatus: SyncStatus | null) => + syncStatus ? ( + {syncStatusToText(syncStatus)} + ) : ( + + {i18n.translate('xpack.serverlessSearch.connectors.notSyncedLabel', { + defaultMessage: 'Not synced', + })} + + ), + }, + ]; + + const items = + data?.connectors + .filter((connector) => + filter ? `${connector[filter]}`.toLowerCase().includes(query.toLowerCase()) : true + ) + .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize) ?? []; + + return ( + <> + + + setQuery(queryText ?? '')} query={query} /> + + + setFilter(e.currentTarget.value as Filter)} + options={filterOptions} + /> + + + + + {CONNECTORS_LABEL}, + items: ( + + - + + + ), + count: , + }} + /> + + + + ) => { + if (page) { + const { index, size } = page; + setPageIndex(index); + setPageSize(size); + } + }} + pagination={{ + pageIndex, + pageSize, + totalItemCount: data?.connectors.length ?? 0, + }} + /> + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx index de88863059d12..5e4ea906fec62 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_description.tsx @@ -42,7 +42,7 @@ export const EditDescription: React.FC = ({ const { isLoading, isSuccess, mutate } = useMutation({ mutationFn: async (inputDescription: string) => { - const body = { Description: inputDescription }; + const body = { description: inputDescription }; const result = await http.post( `/internal/serverless_search/connectors/${connectorId}/description`, { @@ -83,7 +83,7 @@ export const EditDescription: React.FC = ({ value={newDescription} /> ) : ( - {description} + {description} )}
    diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx new file mode 100644 index 0000000000000..6496b6c357150 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/empty_connectors_prompt.tsx @@ -0,0 +1,196 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiIcon, + EuiTitle, + EuiText, + EuiLink, + EuiButton, + EuiToolTip, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { PLUGIN_ID } from '../../../../common'; +import { useConnectorTypes } from '../../hooks/api/use_connector_types'; +import { useKibanaServices } from '../../hooks/use_kibana'; + +export const EmptyConnectorsPrompt: React.FC = () => { + const { http } = useKibanaServices(); + const { data: connectorTypes } = useConnectorTypes(); + const assetBasePath = http.basePath.prepend(`/plugins/${PLUGIN_ID}/assets`); + const connectorsPath = assetBasePath + '/connectors.svg'; + return ( + + + + + + + + + +

    + {i18n.translate('xpack.serverlessSearch.connectorsEmpty.title', { + defaultMessage: 'Create a connector', + })} +

    +
    +
    + + +

    + {i18n.translate('xpack.serverlessSearch.connectorsEmpty.description', { + defaultMessage: + "To set up and deploy a connector you'll be working between the third-party data source, your terminal, and the Kibana UI. The high level process looks like this:", + })} +

    +
    +
    + + + + + + + + + + +

    + {i18n.translate( + 'xpack.serverlessSearch.connectorsEmpty.guideOneDescription', + { + defaultMessage: "Choose a data source you'd like to sync", + } + )} +

    +
    +
    +
    +
    + + + + + + + +

    + + {i18n.translate( + 'xpack.serverlessSearch.connectorsEmpty.sourceLabel', + { defaultMessage: 'source' } + )} + + ), + docker: ( + + {i18n.translate( + 'xpack.serverlessSearch.connectorsEmpty.dockerLabel', + { defaultMessage: 'Docker' } + )} + + ), + }} + /> +

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +

    + {i18n.translate( + 'xpack.serverlessSearch.connectorsEmpty.guideThreeDescription', + { + defaultMessage: + 'Enter access and connection details for your data source and run your first sync', + } + )} +

    +
    +
    +
    +
    +
    +
    +
    + + + {i18n.translate('xpack.serverlessSearch.connectorsEmpty.createConnector', { + defaultMessage: 'Create connector', + })} + + +
    +
    +
    + + +

    + {i18n.translate('xpack.serverlessSearch.connectorsEmpty.availableConnectors', { + defaultMessage: 'Available connectors', + })} +

    +
    +
    + + + {connectorTypes?.connectors.map((connectorType) => ( + + + + + + ))} + + +
    + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx index 8ad239c020d01..cd8fefc649c4a 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx @@ -12,40 +12,29 @@ import { EuiIcon, EuiLink, EuiPageTemplate, - EuiPanel, EuiText, - EuiTitle, - EuiToolTip, } from '@elastic/eui'; import { Connector } from '@kbn/search-connectors'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useMutation, useQuery } from '@tanstack/react-query'; +import { useMutation } from '@tanstack/react-query'; import React, { useEffect } from 'react'; import { LEARN_MORE_LABEL } from '../../../common/i18n_string'; import { PLUGIN_ID } from '../../../common'; +import { useConnectors } from '../hooks/api/use_connectors'; import { useKibanaServices } from '../hooks/use_kibana'; +import { EmptyConnectorsPrompt } from './connectors/empty_connectors_prompt'; +import { ConnectorsTable } from './connectors/connectors_table'; import { CREATE_CONNECTOR_PATH } from './connectors_router'; -import { useConnectorTypes } from '../hooks/api/use_connector_types'; export const ConnectorsOverview = () => { + const { data } = useConnectors(); const { application: { navigateToUrl }, http, } = useKibanaServices(); - const assetBasePath = http.basePath.prepend(`/plugins/${PLUGIN_ID}/assets`); - const connectorsPath = assetBasePath + '/connectors.svg'; - - const { data } = useQuery({ - queryKey: ['fetchConnectors'], - queryFn: () => - http.fetch<{ connectors: Connector[] }>('/internal/serverless_search/connectors'), - }); - - const { data: connectorTypes } = useConnectorTypes(); - const { data: connector, isLoading, @@ -61,7 +50,9 @@ export const ConnectorsOverview = () => { }); useEffect(() => { - navigateToUrl(`${CREATE_CONNECTOR_PATH}/${connector?.id}`); + if (isSuccess) { + navigateToUrl(`${CREATE_CONNECTOR_PATH}/${connector?.id}`); + } }, [connector, isSuccess, navigateToUrl]); const createConnector = () => mutate(); @@ -131,189 +122,12 @@ export const ConnectorsOverview = () => { {(data?.connectors || []).length > 0 ? ( - <> + + + ) : ( - - - - - - - - - - -

    - {i18n.translate('xpack.serverlessSearch.connectorsEmpty.title', { - defaultMessage: 'Create a connector', - })} -

    -
    -
    - - -

    - {i18n.translate('xpack.serverlessSearch.connectorsEmpty.description', { - defaultMessage: - "To set up and deploy a connector you'll be working between the third-party data source, your terminal, and the Kibana UI. The high level process looks like this:", - })} -

    -
    -
    - - - - - - - - - - -

    - {i18n.translate( - 'xpack.serverlessSearch.connectorsEmpty.guideOneDescription', - { - defaultMessage: "Choose a data source you'd like to sync", - } - )} -

    -
    -
    -
    -
    - - - - - - - -

    - - {i18n.translate( - 'xpack.serverlessSearch.connectorsEmpty.sourceLabel', - { defaultMessage: 'source' } - )} - - ), - docker: ( - - {i18n.translate( - 'xpack.serverlessSearch.connectorsEmpty.dockerLabel', - { defaultMessage: 'Docker' } - )} - - ), - }} - /> -

    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -

    - {i18n.translate( - 'xpack.serverlessSearch.connectorsEmpty.guideThreeDescription', - { - defaultMessage: - 'Enter access and connection details for your data source and run your first sync', - } - )} -

    -
    -
    -
    -
    -
    -
    -
    - - createConnector()} - > - {i18n.translate('xpack.serverlessSearch.connectorsEmpty.createConnector', { - defaultMessage: 'Create connector', - })} - - -
    -
    -
    - - -

    - {i18n.translate('xpack.serverlessSearch.connectorsEmpty.availableConnectors', { - defaultMessage: 'Available connectors', - })} -

    -
    -
    - - - {connectorTypes?.connectors.map((connectorType) => ( - - - - - - ))} - - -
    + + )} diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx index 0d03219842123..ef61b200835ad 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx @@ -12,7 +12,8 @@ import { ConnectorsOverview } from './connectors_overview'; export const BASE_CONNECTORS_PATH = 'connectors'; export const CREATE_CONNECTOR_SLUG = `create_connector`; -export const CREATE_CONNECTOR_PATH = `${BASE_CONNECTORS_PATH}/${CREATE_CONNECTOR_SLUG}`; +export const EDIT_CONNECTOR_PATH = `${CREATE_CONNECTOR_SLUG}/:id`; +export const CREATE_CONNECTOR_PATH = `${CREATE_CONNECTOR_SLUG}`; export const ConnectorsRouter: React.FC = () => { return ( diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx index a848d9cb5e13e..22cff4f411bff 100644 --- a/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connector_types.tsx @@ -11,6 +11,7 @@ import { useKibanaServices } from '../use_kibana'; export const useConnectorTypes = () => { const { http } = useKibanaServices(); + return useQuery({ queryKey: ['fetchConnectorTypes'], queryFn: () => diff --git a/x-pack/plugins/serverless_search/public/application/hooks/api/use_connectors.tsx b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connectors.tsx new file mode 100644 index 0000000000000..c0708a0ace022 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/api/use_connectors.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 { Connector } from '@kbn/search-connectors'; +import { useQuery } from '@tanstack/react-query'; +import { useKibanaServices } from '../use_kibana'; + +export const useConnectors = (from: number = 0, size: number = 10) => { + const { http } = useKibanaServices(); + return useQuery({ + queryKey: ['fetchConnectors', from, size], + queryFn: () => + http.fetch<{ connectors: Connector[] }>('/internal/serverless_search/connectors', { + query: { from, size }, + }), + }); +}; diff --git a/x-pack/plugins/serverless_search/public/application/hooks/use_asset_base_path.tsx b/x-pack/plugins/serverless_search/public/application/hooks/use_asset_base_path.tsx new file mode 100644 index 0000000000000..0c0567770111b --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/hooks/use_asset_base_path.tsx @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PLUGIN_ID } from '../../../common'; +import { useKibanaServices } from './use_kibana'; + +export const useAssetBasePath = () => { + const { http } = useKibanaServices(); + return http.basePath.prepend(`/plugins/${PLUGIN_ID}/assets`); +}; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 884507b4372a1..ef7278d8c1eb5 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -13818,15 +13818,6 @@ "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.legend": "Sélectionnez le type de tâche de synchronisation à afficher.", "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.name": "Type de tâche de synchronisation", "xpack.enterpriseSearch.content.syncJobs.syncDuration.columnTitle": "Durée de synchronisation", - "xpack.enterpriseSearch.content.syncJobType.full": "Contenu entier", - "xpack.enterpriseSearch.content.syncJobType.incremental": "Contenu progressif", - "xpack.enterpriseSearch.content.syncStatus.canceled": "Annulation de la synchronisation", - "xpack.enterpriseSearch.content.syncStatus.canceling": "Synchronisation annulée", - "xpack.enterpriseSearch.content.syncStatus.completed": "Synchronisation terminée", - "xpack.enterpriseSearch.content.syncStatus.error": "Échec de la synchronisation", - "xpack.enterpriseSearch.content.syncStatus.inProgress": "Synchronisation en cours", - "xpack.enterpriseSearch.content.syncStatus.pending": "Synchronisation en attente", - "xpack.enterpriseSearch.content.syncStatus.suspended": "Synchronisation suspendue", "xpack.enterpriseSearch.crawler.addDomainFlyout.description": "Vous pouvez ajouter plusieurs domaines au robot d'indexation de cet index. Ajoutez un autre domaine ici et modifiez les points d'entrée et les règles d'indexation à partir de la page \"Gérer\".", "xpack.enterpriseSearch.crawler.addDomainFlyout.openButtonLabel": "Ajouter un domaine", "xpack.enterpriseSearch.crawler.addDomainFlyout.title": "Ajouter un nouveau domaine", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 4319709c23bea..f0756cb129d3b 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -13832,15 +13832,6 @@ "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.legend": "表示する同期ジョブタイプを選択します。", "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.name": "同期ジョブタイプ", "xpack.enterpriseSearch.content.syncJobs.syncDuration.columnTitle": "同期時間", - "xpack.enterpriseSearch.content.syncJobType.full": "完全なコンテンツ", - "xpack.enterpriseSearch.content.syncJobType.incremental": "増分コンテンツ", - "xpack.enterpriseSearch.content.syncStatus.canceled": "同期のキャンセル中", - "xpack.enterpriseSearch.content.syncStatus.canceling": "同期がキャンセルされました", - "xpack.enterpriseSearch.content.syncStatus.completed": "同期完了", - "xpack.enterpriseSearch.content.syncStatus.error": "同期失敗", - "xpack.enterpriseSearch.content.syncStatus.inProgress": "同期は実行中です", - "xpack.enterpriseSearch.content.syncStatus.pending": "同期は保留中です", - "xpack.enterpriseSearch.content.syncStatus.suspended": "同期が一時停止されました", "xpack.enterpriseSearch.crawler.addDomainFlyout.description": "複数のドメインをこのインデックスのWebクローラーに追加できます。ここで別のドメインを追加して、[管理]ページからエントリポイントとクロールルールを変更します。", "xpack.enterpriseSearch.crawler.addDomainFlyout.openButtonLabel": "ドメインを追加", "xpack.enterpriseSearch.crawler.addDomainFlyout.title": "新しいドメインを追加", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index fdb3d3ac3d227..6c8f2752a3122 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -13832,15 +13832,6 @@ "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.legend": "选择要显示的同步作业类型。", "xpack.enterpriseSearch.content.syncJobs.lastSync.tableSelector.name": "同步作业类型", "xpack.enterpriseSearch.content.syncJobs.syncDuration.columnTitle": "同步持续时间", - "xpack.enterpriseSearch.content.syncJobType.full": "完整内容", - "xpack.enterpriseSearch.content.syncJobType.incremental": "增量同步", - "xpack.enterpriseSearch.content.syncStatus.canceled": "正在取消同步", - "xpack.enterpriseSearch.content.syncStatus.canceling": "同步已取消", - "xpack.enterpriseSearch.content.syncStatus.completed": "同步已完成", - "xpack.enterpriseSearch.content.syncStatus.error": "同步失败", - "xpack.enterpriseSearch.content.syncStatus.inProgress": "同步进行中", - "xpack.enterpriseSearch.content.syncStatus.pending": "同步待处理", - "xpack.enterpriseSearch.content.syncStatus.suspended": "同步已挂起", "xpack.enterpriseSearch.crawler.addDomainFlyout.description": "可以将多个域添加到此索引的网络爬虫。在此添加其他域并从“管理”页面修改入口点和爬网规则。", "xpack.enterpriseSearch.crawler.addDomainFlyout.openButtonLabel": "添加域", "xpack.enterpriseSearch.crawler.addDomainFlyout.title": "添加新域", From 8a2843e2816301ccc1b45e8a397e7e9d0b17b608 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 4 Oct 2023 16:35:45 +0200 Subject: [PATCH 068/170] [AO] Add testing action variables to the Custom threshold rule API integration tests (#167757) Closes #162950 Closes #161237 ## Summary This PR adds testing action variables to the Custom threshold rule API integration tests. --- .../src/data_sources/fake_hosts/index.ts | 4 +- .../custom_threshold_rule/avg_pct_fired.ts | 33 +++++++++++++++- .../custom_threshold_rule/avg_pct_no_data.ts | 38 +++++++++++++++++-- .../custom_threshold_rule/avg_us_fired.ts | 8 +--- .../custom_eq_avg_bytes_fired.ts | 32 +++++++++++++++- .../documents_count_fired.ts | 32 +++++++++++++++- .../custom_threshold_rule/group_by_fired.ts | 20 ++-------- .../custom_threshold_rule/typings.ts | 15 ++++++++ 8 files changed, 152 insertions(+), 30 deletions(-) create mode 100644 x-pack/test/alerting_api_integration/observability/custom_threshold_rule/typings.ts diff --git a/x-pack/packages/kbn-infra-forge/src/data_sources/fake_hosts/index.ts b/x-pack/packages/kbn-infra-forge/src/data_sources/fake_hosts/index.ts index fe969726499b4..e134cc21a0796 100644 --- a/x-pack/packages/kbn-infra-forge/src/data_sources/fake_hosts/index.ts +++ b/x-pack/packages/kbn-infra-forge/src/data_sources/fake_hosts/index.ts @@ -51,10 +51,10 @@ export const generateEvent = (index: number, timestamp: Moment, interval: number }, }, user: { - pct: randomBetween(1, 4), + pct: 2.5, }, system: { - pct: randomBetween(1, 4), + pct: 3, }, }, }, diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts index b36a0bcd86010..91b767ca8087a 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts @@ -5,6 +5,7 @@ * 2.0. */ +import moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; import { Aggregators, @@ -15,8 +16,13 @@ import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; -import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; +import { + waitForAlertInIndex, + waitForDocumentInIndex, + waitForRuleStatus, +} from '../helpers/alerting_wait_for_helpers'; import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { @@ -35,6 +41,8 @@ export default function ({ getService }: FtrProviderContext) { let infraDataIndex: string; let actionId: string; let ruleId: string; + let alertId: string; + let startedAt: string; before(async () => { infraDataIndex = await generate({ esClient, lookback: 'now-15m', logger }); @@ -110,6 +118,10 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', + host: '{{context.host}}', }, ], }, @@ -140,6 +152,8 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; + startedAt = (resp.hits.hits[0]._source as any)['kibana.alert.start']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -186,6 +200,23 @@ export default function ({ getService }: FtrProviderContext) { searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, }); }); + + it('should set correct action variables', async () => { + const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + 'Custom equation is 2.5 in the last 5 mins. Alert when > 0.5.' + ); + expect(resp.hits.hits[0]._source?.value).eql('2.5'); + }); }); }); } diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts index 9eba55d60743a..949a74480382b 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -5,23 +5,30 @@ * 2.0. */ +import moment from 'moment'; import { Aggregators, Comparator, } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; +import { NO_DATA_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; -import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; +import { + waitForAlertInIndex, + waitForDocumentInIndex, + waitForRuleStatus, +} from '../helpers/alerting_wait_for_helpers'; import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); const supertest = getService('supertest'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('Custom Threshold rule - AVG - PCT - NoData', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; @@ -29,6 +36,8 @@ export default function ({ getService }: FtrProviderContext) { const DATA_VIEW_ID = 'data-view-id-no-data'; let actionId: string; let ruleId: string; + let alertId: string; + let startedAt: string; before(async () => { await createDataView({ @@ -54,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { supertest, id: DATA_VIEW_ID, }); + await esDeleteAllIndices([ALERT_ACTION_INDEX]); }); describe('Rule creation', () => { @@ -95,12 +105,15 @@ export default function ({ getService }: FtrProviderContext) { }, actions: [ { - group: FIRED_ACTIONS_ID, + group: NO_DATA_ACTIONS_ID, id: actionId, params: { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', }, ], }, @@ -131,6 +144,8 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; + startedAt = (resp.hits.hits[0]._source as any)['kibana.alert.start']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -180,6 +195,23 @@ export default function ({ getService }: FtrProviderContext) { }, }); }); + + it('should set correct action variables', async () => { + const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + 'Custom equation reported no data in the last 5m' + ); + expect(resp.hits.hits[0]._source?.value).eql('[NO DATA]'); + }); }); }); } diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts index d7f21a1453823..46b109d48a0df 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts @@ -24,6 +24,7 @@ import { waitForDocumentInIndex, waitForRuleStatus, } from '../helpers/alerting_wait_for_helpers'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { @@ -206,12 +207,7 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct action parameter: ruleType', async () => { const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); - const resp = await waitForDocumentInIndex<{ - ruleType: string; - alertDetailsUrl: string; - reason: string; - value: string; - }>({ + const resp = await waitForDocumentInIndex({ esClient, indexName: ALERT_ACTION_INDEX, }); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 50e62935f0edb..3ebb2fa0dbc76 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -11,6 +11,7 @@ * 2.0. */ +import moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; import { Aggregators, @@ -21,8 +22,13 @@ import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; -import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; +import { + waitForAlertInIndex, + waitForDocumentInIndex, + waitForRuleStatus, +} from '../helpers/alerting_wait_for_helpers'; import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { @@ -41,6 +47,8 @@ export default function ({ getService }: FtrProviderContext) { let infraDataIndex: string; let actionId: string; let ruleId: string; + let alertId: string; + let startedAt: string; before(async () => { infraDataIndex = await generate({ esClient, lookback: 'now-15m', logger }); @@ -118,6 +126,9 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', }, ], }, @@ -148,6 +159,8 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; + startedAt = (resp.hits.hits[0]._source as any)['kibana.alert.start']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -198,6 +211,23 @@ export default function ({ getService }: FtrProviderContext) { searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, }); }); + + it('should set correct action variables', async () => { + const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + 'Custom equation is 1 in the last 1 min. Alert when > 0.9.' + ); + expect(resp.hits.hits[0]._source?.value).eql('1'); + }); }); }); } diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 644cfaa2264e0..07efa46cf175f 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -5,6 +5,7 @@ * 2.0. */ +import moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; import { Aggregators, @@ -15,8 +16,13 @@ import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; -import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; +import { + waitForAlertInIndex, + waitForDocumentInIndex, + waitForRuleStatus, +} from '../helpers/alerting_wait_for_helpers'; import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { @@ -35,6 +41,8 @@ export default function ({ getService }: FtrProviderContext) { let infraDataIndex: string; let actionId: string; let ruleId: string; + let alertId: string; + let startedAt: string; before(async () => { infraDataIndex = await generate({ esClient, lookback: 'now-15m', logger }); @@ -108,6 +116,9 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', }, ], }, @@ -138,6 +149,8 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; + startedAt = (resp.hits.hits[0]._source as any)['kibana.alert.start']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -186,6 +199,23 @@ export default function ({ getService }: FtrProviderContext) { searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, }); }); + + it('should set correct action variables', async () => { + const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + 'Custom equation is 3 in the last 1 min. Alert when > 2.' + ); + expect(resp.hits.hits[0]._source?.value).eql('3'); + }); }); }); } diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts index b22fae7fe00f1..1d5ffa15ff97f 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts @@ -4,12 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.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 moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; @@ -28,6 +22,7 @@ import { waitForRuleStatus, } from '../helpers/alerting_wait_for_helpers'; import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ActionDocument } from './typings'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { @@ -35,8 +30,6 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esDeleteAllIndices = getService('esDeleteAllIndices'); const logger = getService('log'); - let alertId: string; - let startedAt: string; describe('Custom Threshold rule - GROUP_BY - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; @@ -48,6 +41,8 @@ export default function ({ getService }: FtrProviderContext) { let infraDataIndex: string; let actionId: string; let ruleId: string; + let alertId: string; + let startedAt: string; before(async () => { infraDataIndex = await generate({ esClient, lookback: 'now-15m', logger }); @@ -235,14 +230,7 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct action variables', async () => { const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); - const resp = await waitForDocumentInIndex<{ - ruleType: string; - alertDetailsUrl: string; - reason: string; - value: string; - host: string; - group: string; - }>({ + const resp = await waitForDocumentInIndex({ esClient, indexName: ALERT_ACTION_INDEX, }); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/typings.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/typings.ts new file mode 100644 index 0000000000000..83894e6cf24a2 --- /dev/null +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/typings.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface ActionDocument { + ruleType: string; + alertDetailsUrl: string; + reason: string; + value: string; + host?: string; + group?: string; +} From 79411d97c7b106a1ff23b040e6eec29873adab1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Wed, 4 Oct 2023 16:52:04 +0200 Subject: [PATCH 069/170] [Rollups] Disable Rollups index data enricher if Rollups UI is disabled (#167295) ## Summary Fixes https://github.com/elastic/kibana/issues/167231 This PR introduces following changes, if the config `xpack.rollup.ui.enabled` is set to `false`: - on the client side: - don't add the Rollup toggle to Index Management - don't add the Rollup badge to Index Management - on the server side: - don't add Rollup data enricher to Index Management - don't enable Rollup in data views and data search (the same is done on the client side already) --- .buildkite/ftr_configs.yml | 1 + x-pack/plugins/rollup/public/plugin.ts | 39 +++++++-------- x-pack/plugins/rollup/server/plugin.ts | 14 ++++-- .../disabled_data_enrichers/config.ts | 27 ++++++++++ .../disabled_data_enrichers/index.ts | 14 ++++++ .../disabled_data_enrichers/indices.ts | 50 +++++++++++++++++++ 6 files changed, 121 insertions(+), 24 deletions(-) create mode 100644 x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/config.ts create mode 100644 x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/index.ts create mode 100644 x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/indices.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 5ef5041673c71..5222de5151738 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -186,6 +186,7 @@ enabled: - x-pack/test/api_integration/apis/logs_ui/config.ts - x-pack/test/api_integration/apis/logstash/config.ts - x-pack/test/api_integration/apis/management/config.ts + - x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/config.ts - x-pack/test/api_integration/apis/maps/config.ts - x-pack/test/api_integration/apis/metrics_ui/config.ts - x-pack/test/api_integration/apis/ml/config.ts diff --git a/x-pack/plugins/rollup/public/plugin.ts b/x-pack/plugins/rollup/public/plugin.ts index dfa54d0c4e267..bd2517559bc25 100644 --- a/x-pack/plugins/rollup/public/plugin.ts +++ b/x-pack/plugins/rollup/public/plugin.ts @@ -14,7 +14,6 @@ import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { DataViewsPublicPluginSetup } from '@kbn/data-views-plugin/public/types'; import { rollupBadgeExtension, rollupToggleExtension } from './extend_index_management'; import { UIM_APP_NAME } from '../common'; -// @ts-ignore import { setHttp, init as initDocumentation } from './crud_app/services'; import { setNotifications, setFatalErrors, setUiStatsReporter } from './kibana_services'; import { ClientConfigType } from './types'; @@ -43,27 +42,27 @@ export class RollupPlugin implements Plugin { setUiStatsReporter(usageCollection.reportUiCounter.bind(usageCollection, UIM_APP_NAME)); } - if (indexManagement) { - indexManagement.extensionsService.addBadge(rollupBadgeExtension); - indexManagement.extensionsService.addToggle(rollupToggleExtension); - } + if (isRollupUiEnabled) { + if (indexManagement) { + indexManagement.extensionsService.addBadge(rollupBadgeExtension); + indexManagement.extensionsService.addToggle(rollupToggleExtension); + } - if (home && isRollupUiEnabled) { - home.featureCatalogue.register({ - id: 'rollup_jobs', - title: 'Rollups', - description: i18n.translate('xpack.rollupJobs.featureCatalogueDescription', { - defaultMessage: - 'Summarize and store historical data in a smaller index for future analysis.', - }), - icon: 'indexRollupApp', - path: `/app/management/data/rollup_jobs/job_list`, - showOnHomePage: false, - category: 'admin', - }); - } + if (home) { + home.featureCatalogue.register({ + id: 'rollup_jobs', + title: 'Rollups', + description: i18n.translate('xpack.rollupJobs.featureCatalogueDescription', { + defaultMessage: + 'Summarize and store historical data in a smaller index for future analysis.', + }), + icon: 'indexRollupApp', + path: `/app/management/data/rollup_jobs/job_list`, + showOnHomePage: false, + category: 'admin', + }); + } - if (isRollupUiEnabled) { dataViews.enableRollups(); const pluginName = i18n.translate('xpack.rollupJobs.appTitle', { defaultMessage: 'Rollup Jobs', diff --git a/x-pack/plugins/rollup/server/plugin.ts b/x-pack/plugins/rollup/server/plugin.ts index 409c730385db9..ff8ff7e809b13 100644 --- a/x-pack/plugins/rollup/server/plugin.ts +++ b/x-pack/plugins/rollup/server/plugin.ts @@ -19,12 +19,15 @@ import { rollupDataEnricher } from './rollup_data_enricher'; import { IndexPatternsFetcher } from './shared_imports'; import { handleEsError } from './shared_imports'; import { formatEsError } from './lib/format_es_error'; +import { RollupConfig } from './config'; export class RollupPlugin implements Plugin { + private readonly config: RollupConfig; private readonly logger: Logger; private readonly license: License; constructor(initializerContext: PluginInitializerContext) { + this.config = initializerContext.config.get(); this.logger = initializerContext.logger.get(); this.license = new License(); } @@ -100,11 +103,14 @@ export class RollupPlugin implements Plugin { } } - if (indexManagement && indexManagement.indexDataEnricher) { - indexManagement.indexDataEnricher.add(rollupDataEnricher); + if (this.config.ui.enabled) { + if (indexManagement && indexManagement.indexDataEnricher) { + indexManagement.indexDataEnricher.add(rollupDataEnricher); + } + + dataViews.enableRollups(); + data.search.enableRollups(); } - dataViews.enableRollups(); - data.search.enableRollups(); } start() {} diff --git a/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/config.ts b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/config.ts new file mode 100644 index 0000000000000..b16b33f7c5b15 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/config.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile(require.resolve('../../config.ts')); + + return { + ...functionalConfig.getAll(), + testFiles: [require.resolve('.')], + kbnTestServer: { + ...functionalConfig.get('kbnTestServer'), + serverArgs: [ + ...functionalConfig.get('kbnTestServer.serverArgs'), + // disable the UIs of plugins that add index data enrichers + `--xpack.rollup.ui.enabled=false`, + `--xpack.ccr.ui.enabled=false`, + `--xpack.ilm.ui.enabled=false`, + ], + }, + }; +} diff --git a/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/index.ts b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/index.ts new file mode 100644 index 0000000000000..696452074f7c7 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default ({ loadTestFile }: FtrProviderContext) => { + describe('Index Management: disabled data enrichers', function () { + loadTestFile(require.resolve('./indices')); + }); +}; diff --git a/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/indices.ts b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/indices.ts new file mode 100644 index 0000000000000..57c953d85d156 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/index_management/disabled_data_enrichers/indices.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { API_BASE_PATH, Index } from '@kbn/index-management-plugin/common'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { sortedExpectedIndexKeys } from '../constants'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const es = getService('es'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + const createIndex = async (name: string) => { + await es.indices.create({ index: name }); + }; + + const testIndex = 'test_index'; + describe('GET indices without data enrichers', async () => { + before(async () => { + await createIndex(testIndex); + }); + after(async () => { + await esDeleteAllIndices([testIndex]); + }); + + it(`doesn't send ILM, CCR and Rollups requests`, async () => { + const { body: indices } = await supertest + .get(`${API_BASE_PATH}/indices`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + const index = indices.find((item: Index) => item.name === testIndex); + + const sortedReceivedKeys = Object.keys(index).sort(); + + let expectedKeys = [...sortedExpectedIndexKeys]; + // no CCR data enricher + expectedKeys = expectedKeys.filter((item) => item !== 'isFollowerIndex'); + // no ILM data enricher + expectedKeys = expectedKeys.filter((item) => item !== 'ilm'); + // no Rollups data enricher + expectedKeys = expectedKeys.filter((item) => item !== 'isRollupIndex'); + expect(sortedReceivedKeys).to.eql(expectedKeys); + }); + }); +} From 2ff938e0accbcad614ef4ab7adfb841c30114a93 Mon Sep 17 00:00:00 2001 From: Brad White Date: Wed, 4 Oct 2023 08:55:03 -0600 Subject: [PATCH 070/170] Remove KUI Framework (#167833) ## Summary Closes #46410 Removes the deprecated `@kbn/ui-framework` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 - .../monorepo-packages.asciidoc | 1 - package.json | 1 - .../core-apps-server-internal/src/core_app.ts | 5 - .../src/render_utils.test.ts | 2 - .../src/render_utils.ts | 2 - packages/kbn-ui-framework/README.md | 27 - packages/kbn-ui-framework/dist/kui_dark.css | 2470 ----------------- .../kbn-ui-framework/dist/kui_dark.min.css | 1 - packages/kbn-ui-framework/dist/kui_light.css | 2470 ----------------- .../kbn-ui-framework/dist/kui_light.min.css | 1 - packages/kbn-ui-framework/kibana.jsonc | 5 - packages/kbn-ui-framework/package.json | 6 - .../package_json/find_used_dependencies.ts | 2 - tsconfig.base.json | 5 +- yarn.lock | 4 - 16 files changed, 1 insertion(+), 5002 deletions(-) delete mode 100644 packages/kbn-ui-framework/README.md delete mode 100644 packages/kbn-ui-framework/dist/kui_dark.css delete mode 100644 packages/kbn-ui-framework/dist/kui_dark.min.css delete mode 100644 packages/kbn-ui-framework/dist/kui_light.css delete mode 100644 packages/kbn-ui-framework/dist/kui_light.min.css delete mode 100644 packages/kbn-ui-framework/kibana.jsonc delete mode 100644 packages/kbn-ui-framework/package.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 31bcc2356bb28..ebe311c57f01e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -772,7 +772,6 @@ src/plugins/ui_actions_enhanced @elastic/appex-sharedux examples/ui_action_examples @elastic/appex-sharedux examples/ui_actions_explorer @elastic/appex-sharedux src/plugins/ui_actions @elastic/appex-sharedux -packages/kbn-ui-framework @elastic/kibana-design test/plugin_functional/plugins/ui_settings_plugin @elastic/kibana-core packages/kbn-ui-shared-deps-npm @elastic/kibana-operations packages/kbn-ui-shared-deps-src @elastic/kibana-operations diff --git a/docs/developer/getting-started/monorepo-packages.asciidoc b/docs/developer/getting-started/monorepo-packages.asciidoc index a9dc912ab58e4..50095f8b7018f 100644 --- a/docs/developer/getting-started/monorepo-packages.asciidoc +++ b/docs/developer/getting-started/monorepo-packages.asciidoc @@ -90,7 +90,6 @@ yarn kbn watch - @kbn/test - @kbn/test-subj-selector - @kbn/tinymath -- @kbn/ui-framework - @kbn/ui-shared-deps-npm - @kbn/ui-shared-deps-src - @kbn/utility-types diff --git a/package.json b/package.json index bdfa73e8a9426..4a42e8a4424a0 100644 --- a/package.json +++ b/package.json @@ -764,7 +764,6 @@ "@kbn/ui-actions-examples-plugin": "link:examples/ui_action_examples", "@kbn/ui-actions-explorer-plugin": "link:examples/ui_actions_explorer", "@kbn/ui-actions-plugin": "link:src/plugins/ui_actions", - "@kbn/ui-framework": "link:packages/kbn-ui-framework", "@kbn/ui-settings-plugin": "link:test/plugin_functional/plugins/ui_settings_plugin", "@kbn/ui-shared-deps-npm": "link:packages/kbn-ui-shared-deps-npm", "@kbn/ui-shared-deps-src": "link:packages/kbn-ui-shared-deps-src", diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.ts b/packages/core/apps/core-apps-server-internal/src/core_app.ts index 4d303d24d37a1..3de295874d3fe 100644 --- a/packages/core/apps/core-apps-server-internal/src/core_app.ts +++ b/packages/core/apps/core-apps-server-internal/src/core_app.ts @@ -271,10 +271,5 @@ export class CoreAppsService { '/ui/{path*}', fromRoot('node_modules/@kbn/core-apps-server-internal/assets') ); - - core.http.registerStaticDir( - '/node_modules/@kbn/ui-framework/dist/{path*}', - fromRoot('node_modules/@kbn/ui-framework/dist') - ); } } diff --git a/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts b/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts index b8acdfb96e367..7fa091d6381fb 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/render_utils.test.ts @@ -23,7 +23,6 @@ describe('getStylesheetPaths', () => { Array [ "/base-path/17/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.v8.dark.css", "/base-path/17/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.css", - "/base-path/node_modules/@kbn/ui-framework/dist/kui_dark.min.css", "/base-path/ui/legacy_dark_theme.min.css", ] `); @@ -44,7 +43,6 @@ describe('getStylesheetPaths', () => { Array [ "/base-path/69/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.v8.light.css", "/base-path/69/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.css", - "/base-path/node_modules/@kbn/ui-framework/dist/kui_light.min.css", "/base-path/ui/legacy_light_theme.min.css", ] `); diff --git a/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts b/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts index 5d8eca5b201e2..01c96570bd09b 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/render_utils.ts @@ -41,7 +41,6 @@ export const getStylesheetPaths = ({ themeVersion )}`, `${regularBundlePath}/kbn-ui-shared-deps-src/${UiSharedDepsSrc.cssDistFilename}`, - `${basePath}/node_modules/@kbn/ui-framework/dist/kui_dark.min.css`, `${basePath}/ui/legacy_dark_theme.min.css`, ] : [ @@ -49,7 +48,6 @@ export const getStylesheetPaths = ({ themeVersion )}`, `${regularBundlePath}/kbn-ui-shared-deps-src/${UiSharedDepsSrc.cssDistFilename}`, - `${basePath}/node_modules/@kbn/ui-framework/dist/kui_light.min.css`, `${basePath}/ui/legacy_light_theme.min.css`, ]), ]; diff --git a/packages/kbn-ui-framework/README.md b/packages/kbn-ui-framework/README.md deleted file mode 100644 index 820b272cd65cb..0000000000000 --- a/packages/kbn-ui-framework/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Deprecation notice - -This package is set for deprecation and is actively being removed from Kibana. - -The Kibana UI framework is a collection of React elements and Sass styles used to build legacy layouts in Kibana. It was -primarily used during the 5.x and 6.x versions and is replaced by the [Elastic UI framework](https://elastic.github.io/eui/). -Portions of Kibana still utilize this package and until it is fully removed you can still compile and view the -documentation using the instructions below. - -## Compiling KUI and viewing the docs - -Compile the CSS with `./node_modules/grunt/bin/grunt uiFramework:compileCss` (OS X) or -`.\node_modules\grunt\bin\grunt uiFramework:compileCss` (Windows). - -You can view interactive documentation by running `yarn uiFramework:start` and then visiting -[http://localhost:8020/](http://localhost:8020/). This will also start watching the SCSS files, and will recompile the CSS -automatically for you when you make changes. - -You can run `node scripts/jest --watch` to watch for changes and run the tests as you code. - -You can run `node scripts/jest --coverage` to generate a code coverage report to see how -fully-tested the code is. - -You can run `node scripts/jest --config path/to/plugin/jest.config.js --coverage` to generate -a code coverage report for a single plugin. - -See the documentation in [`scripts/jest.js`](../scripts/jest.js) for more options. \ No newline at end of file diff --git a/packages/kbn-ui-framework/dist/kui_dark.css b/packages/kbn-ui-framework/dist/kui_dark.css deleted file mode 100644 index aa16bcdb34d36..0000000000000 --- a/packages/kbn-ui-framework/dist/kui_dark.css +++ /dev/null @@ -1,2470 +0,0 @@ -/* 1 */ -/* 1 */ -/** - * 1. Extend beta badges to at least 40% of the container's width - * 2. Fix for IE to ensure badges are visible outside of a
    diff --git a/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx b/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx index 523c98c9d6903..e492ceaf0e174 100644 --- a/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx +++ b/x-pack/plugins/lens/public/shared_components/coloring/palette_panel_container.tsx @@ -28,12 +28,14 @@ export function PalettePanelContainer({ siblingRef, children, title, + isInlineEditing, }: { isOpen: boolean; title: string; handleClose: () => void; siblingRef: MutableRefObject; children?: React.ReactElement | React.ReactElement[]; + isInlineEditing?: boolean; }) { const [focusTrapIsEnabled, setFocusTrapIsEnabled] = useState(false); @@ -43,13 +45,14 @@ export function PalettePanelContainer({ }; useEffect(() => { - if (isOpen) { + // The EuiFocusTrap is disabled when inline editing as it causes bugs with comboboxes + if (isOpen && !isInlineEditing) { // without setTimeout here the flyout pushes content when animating setTimeout(() => { setFocusTrapIsEnabled(true); }, 255); } - }, [isOpen]); + }, [isInlineEditing, isOpen]); return isOpen && siblingRef.current ? ( diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 4060f1a43d5fa..5dd1cd616d48f 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -780,6 +780,7 @@ export type VisualizationDimensionEditorProps = VisualizationConfig addLayer: (layerType: LayerType) => void; removeLayer: (layerId: string) => void; panelRef: MutableRefObject; + isInlineEditing?: boolean; }; export type VisualizationDimensionGroupConfig = SharedDimensionProps & { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx index 60646bdb8d054..a26e4e64f06c2 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx @@ -56,7 +56,7 @@ export function TableDimensionEditor( paletteService: PaletteRegistry; } ) { - const { state, setState, frame, accessor } = props; + const { state, setState, frame, accessor, isInlineEditing } = props; const column = state.columns.find(({ columnId }) => accessor === columnId); const [isPaletteOpen, setIsPaletteOpen] = useState(false); @@ -256,6 +256,7 @@ export function TableDimensionEditor( title={i18n.translate('xpack.lens.table.colorByRangePanelTitle', { defaultMessage: 'Color', })} + isInlineEditing={isInlineEditing} > {activePalette && ( { @@ -188,6 +188,7 @@ export function MetricDimensionEditor( title={i18n.translate('xpack.lens.table.colorByRangePanelTitle', { defaultMessage: 'Color', })} + isInlineEditing={isInlineEditing} >
    diff --git a/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx b/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx index c9449f2dad178..7e7a667c778bb 100644 --- a/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx @@ -302,6 +302,7 @@ export const getTagcloudVisualization = ({ setState={props.setState} frame={props.frame} panelRef={props.panelRef} + isInlineEditing={props.isInlineEditing} /> ); } diff --git a/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx index 1728e6240ad9f..6be7d5a532759 100644 --- a/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx @@ -43,6 +43,7 @@ interface Props { frame: FramePublicAPI; panelRef: MutableRefObject; isDarkMode: boolean; + isInlineEditing?: boolean; } export function TagsDimensionEditor({ @@ -52,6 +53,7 @@ export function TagsDimensionEditor({ panelRef, isDarkMode, paletteService, + isInlineEditing, }: Props) { const { inputValue: localState, handleInputChange: setLocalState } = useDebouncedValue({ @@ -137,6 +139,7 @@ export function TagsDimensionEditor({ defaultMessage: 'Edit colors', }) } + isInlineEditing={isInlineEditing} >
    diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx index 44114e8d560ed..5f4e71dfda209 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx @@ -70,7 +70,7 @@ export function DataDimensionEditor( darkMode: boolean; } ) { - const { state, layerId, accessor, darkMode } = props; + const { state, layerId, accessor, darkMode, isInlineEditing } = props; const index = state.layers.findIndex((l) => l.layerId === layerId); const layer = state.layers[index] as XYDataLayerConfig; const canUseColorMapping = layer.colorMapping ? true : false; @@ -208,6 +208,7 @@ export function DataDimensionEditor( defaultMessage: 'Edit colors', }) } + isInlineEditing={isInlineEditing} >
    From eaf77786e9b9ba7903d605ea28d5d66695e4ff97 Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Wed, 4 Oct 2023 18:05:29 +0200 Subject: [PATCH 075/170] [Logs Explorer] enabling redirect link to discover ESQL (#168002) Closes https://github.com/elastic/kibana/issues/167023. ### Changes - `EsqlSelector` was created. This component is in charge of rendering the `Try ESQL` button. #### Before image #### After image - It works as a link, so users are able to open it in a new tab if desired image - It navigates to discover in `ES|QL` mode https://github.com/elastic/kibana/assets/1313018/1f083c2d-a06f-4f0b-9cbb-5958edcb9cce ##### For serverless image - When `discover:enableESQL` is disabled image ### Missing UI tests will come as part of a new PR. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/dataset_selector/constants.tsx | 8 +++ .../dataset_selector/dataset_selector.tsx | 12 +++-- .../sub_components/esql_selector.tsx | 26 ++++++++++ .../components/dataset_selector/types.ts | 5 ++ .../custom_dataset_selector.tsx | 13 +++-- .../customizations/log_explorer_profile.tsx | 23 +++++--- .../log_explorer/public/hooks/use_esql.tsx | 52 +++++++++++++++++++ .../public/utils/get_router_link_props.ts | 35 +++++++++++++ .../log_explorer/public/utils/use_kibana.tsx | 35 +++++++++++++ 9 files changed, 193 insertions(+), 16 deletions(-) create mode 100644 x-pack/plugins/log_explorer/public/components/dataset_selector/sub_components/esql_selector.tsx create mode 100644 x-pack/plugins/log_explorer/public/hooks/use_esql.tsx create mode 100644 x-pack/plugins/log_explorer/public/utils/get_router_link_props.ts create mode 100644 x-pack/plugins/log_explorer/public/utils/use_kibana.tsx diff --git a/x-pack/plugins/log_explorer/public/components/dataset_selector/constants.tsx b/x-pack/plugins/log_explorer/public/components/dataset_selector/constants.tsx index 28a5401f98048..dd8a104744504 100644 --- a/x-pack/plugins/log_explorer/public/components/dataset_selector/constants.tsx +++ b/x-pack/plugins/log_explorer/public/components/dataset_selector/constants.tsx @@ -84,6 +84,14 @@ export const noDataRetryLabel = i18n.translate('xpack.logExplorer.datasetSelecto defaultMessage: 'Retry', }); +export const tryEsql = i18n.translate('xpack.logExplorer.datasetSelector.TryEsql', { + defaultMessage: 'Try ES|QL', +}); + +export const technicalPreview = i18n.translate('xpack.logExplorer.TechPreview', { + defaultMessage: 'Technical preview', +}); + export const sortOptions = [ { id: 'asc', diff --git a/x-pack/plugins/log_explorer/public/components/dataset_selector/dataset_selector.tsx b/x-pack/plugins/log_explorer/public/components/dataset_selector/dataset_selector.tsx index 10d8b4c046c9a..a56bef6fb1185 100644 --- a/x-pack/plugins/log_explorer/public/components/dataset_selector/dataset_selector.tsx +++ b/x-pack/plugins/log_explorer/public/components/dataset_selector/dataset_selector.tsx @@ -5,10 +5,11 @@ * 2.0. */ -import React, { useMemo } from 'react'; -import styled from '@emotion/styled'; import { EuiContextMenu, EuiHorizontalRule, EuiTab, EuiTabs } from '@elastic/eui'; +import styled from '@emotion/styled'; +import React, { useMemo } from 'react'; import { useIntersectionRef } from '../../hooks/use_intersection_ref'; +import { getDataViewTestSubj } from '../../utils/get_data_view_test_subj'; import { dataViewsLabel, DATA_VIEWS_PANEL_ID, @@ -23,6 +24,8 @@ import { } from './constants'; import { useDatasetSelector } from './state_machine/use_dataset_selector'; import { DatasetsPopover } from './sub_components/datasets_popover'; +import { DataViewsPanelTitle } from './sub_components/data_views_panel_title'; +import { EsqlSelector } from './sub_components/esql_selector'; import { SearchControls } from './sub_components/search_controls'; import { SelectorActions } from './sub_components/selector_actions'; import { DatasetSelectorProps } from './types'; @@ -32,8 +35,6 @@ import { createIntegrationStatusItem, createUncategorizedStatusItem, } from './utils'; -import { getDataViewTestSubj } from '../../utils/get_data_view_test_subj'; -import { DataViewsPanelTitle } from './sub_components/data_views_panel_title'; export function DatasetSelector({ datasets, @@ -41,8 +42,10 @@ export function DatasetSelector({ datasetsError, dataViews, dataViewsError, + discoverEsqlUrlProps, integrations, integrationsError, + isEsqlEnabled, isLoadingDataViews, isLoadingIntegrations, isLoadingUncategorized, @@ -278,6 +281,7 @@ export function DatasetSelector({ data-test-subj="dataViewsContextMenu" size="s" /> + {isEsqlEnabled && } ); } diff --git a/x-pack/plugins/log_explorer/public/components/dataset_selector/sub_components/esql_selector.tsx b/x-pack/plugins/log_explorer/public/components/dataset_selector/sub_components/esql_selector.tsx new file mode 100644 index 0000000000000..fec07114d939d --- /dev/null +++ b/x-pack/plugins/log_explorer/public/components/dataset_selector/sub_components/esql_selector.tsx @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBadge, EuiButton, EuiHorizontalRule } from '@elastic/eui'; +import React from 'react'; +import { getRouterLinkProps } from '../../../utils/get_router_link_props'; +import { DiscoverEsqlUrlProps } from '../../../hooks/use_esql'; +import { technicalPreview, tryEsql } from '../constants'; + +export const EsqlSelector = (props: DiscoverEsqlUrlProps) => { + const linkProps = getRouterLinkProps(props); + + return ( + <> + + + {tryEsql} + {technicalPreview} + + + ); +}; diff --git a/x-pack/plugins/log_explorer/public/components/dataset_selector/types.ts b/x-pack/plugins/log_explorer/public/components/dataset_selector/types.ts index f704791b004ff..ebd0a802caf52 100644 --- a/x-pack/plugins/log_explorer/public/components/dataset_selector/types.ts +++ b/x-pack/plugins/log_explorer/public/components/dataset_selector/types.ts @@ -27,6 +27,7 @@ import { UNCATEGORIZED_TAB_ID, } from './constants'; import { LoadDataViews, ReloadDataViews, SearchDataViews } from '../../hooks/use_data_views'; +import { DiscoverEsqlUrlProps } from '../../hooks/use_esql'; export interface DatasetSelectorProps { /* The generic data stream list */ @@ -39,6 +40,8 @@ export interface DatasetSelectorProps { dataViews: DataViewListItem[] | null; /* Any error occurred to show when the user preview the data views */ dataViewsError: Error | null; + /* url props to navigate to discover ES|QL */ + discoverEsqlUrlProps: DiscoverEsqlUrlProps; /* The integrations list, each integration includes its data streams */ integrations: Integration[] | null; /* Any error occurred to show when the user preview the integrations */ @@ -48,6 +51,8 @@ export interface DatasetSelectorProps { isLoadingIntegrations: boolean; isLoadingUncategorized: boolean; isSearchingIntegrations: boolean; + /* Flag for determining whether ESQL is enabled or not */ + isEsqlEnabled: boolean; /* Triggered when retrying to load the data views */ onDataViewsReload: ReloadDataViews; /* Triggered when selecting a data view */ diff --git a/x-pack/plugins/log_explorer/public/customizations/custom_dataset_selector.tsx b/x-pack/plugins/log_explorer/public/customizations/custom_dataset_selector.tsx index 81aff790be9df..5b9fc3223fddf 100644 --- a/x-pack/plugins/log_explorer/public/customizations/custom_dataset_selector.tsx +++ b/x-pack/plugins/log_explorer/public/customizations/custom_dataset_selector.tsx @@ -5,16 +5,17 @@ * 2.0. */ -import React from 'react'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { DiscoverStart } from '@kbn/discover-plugin/public'; +import React from 'react'; import { DatasetSelector } from '../components/dataset_selector'; import { DatasetsProvider, useDatasetsContext } from '../hooks/use_datasets'; +import { useDatasetSelection } from '../hooks/use_dataset_selection'; +import { DataViewsProvider, useDataViewsContext } from '../hooks/use_data_views'; +import { useEsql } from '../hooks/use_esql'; import { IntegrationsProvider, useIntegrationsContext } from '../hooks/use_integrations'; import { IDatasetsClient } from '../services/datasets'; import { LogExplorerProfileStateService } from '../state_machines/log_explorer_profile'; -import { useDatasetSelection } from '../hooks/use_dataset_selection'; -import { DataViewsProvider, useDataViewsContext } from '../hooks/use_data_views'; interface CustomDatasetSelectorProps { logExplorerProfileStateService: LogExplorerProfileStateService; @@ -59,6 +60,8 @@ export const CustomDatasetSelector = withProviders(({ logExplorerProfileStateSer sortDataViews, } = useDataViewsContext(); + const { isEsqlEnabled, discoverEsqlUrlProps } = useEsql({ datasetSelection }); + return ( import('./custom_dataset_selector')); const LazyCustomDatasetFilters = dynamic(() => import('./custom_dataset_filters')); @@ -69,14 +70,20 @@ export const createLogExplorerProfileCustomizations = */ customizations.set({ id: 'search_bar', - CustomDataViewPicker: () => ( - - ), + CustomDataViewPicker: () => { + const KibanaContextProviderForPlugin = useKibanaContextForPluginProvider(core, plugins); + + return ( + + + + ); + }, PrependFilterBar: () => ( void; +} + +export interface UseEsqlResult { + isEsqlEnabled: boolean; + discoverEsqlUrlProps: DiscoverEsqlUrlProps; +} + +interface EsqlContextDeps { + datasetSelection: DatasetSelection; +} + +export const useEsql = ({ datasetSelection }: EsqlContextDeps): UseEsqlResult => { + const { + services: { uiSettings, discover }, + } = useKibanaContextForPlugin(); + + const isEsqlEnabled = uiSettings?.get('discover:enableESQL'); + + const discoverLinkParams = { + query: { + esql: `from ${datasetSelection.selection.dataset.name} | limit 10`, + }, + }; + + const href = discover.locator?.useUrl(discoverLinkParams); + + const onClick = () => { + discover.locator?.navigate(discoverLinkParams); + }; + + return { + // Data + isEsqlEnabled, + discoverEsqlUrlProps: { + href, + onClick, + }, + }; +}; diff --git a/x-pack/plugins/log_explorer/public/utils/get_router_link_props.ts b/x-pack/plugins/log_explorer/public/utils/get_router_link_props.ts new file mode 100644 index 0000000000000..a325df1a7e86f --- /dev/null +++ b/x-pack/plugins/log_explorer/public/utils/get_router_link_props.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +interface GetRouterLinkPropsDeps { + href?: string; + onClick(): void; +} + +const isModifiedEvent = (event: React.MouseEvent) => + !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); + +const isLeftClickEvent = (event: React.MouseEvent) => event.button === 0; + +export const getRouterLinkProps = ({ href, onClick }: GetRouterLinkPropsDeps) => { + const guardedClickHandler = (event: React.MouseEvent) => { + if (event.defaultPrevented) { + return; + } + + if (isModifiedEvent(event) || !isLeftClickEvent(event)) { + return; + } + + // Prevent regular link behavior, which causes a browser refresh. + event.preventDefault(); + + onClick(); + }; + + return { href, onClick: guardedClickHandler }; +}; diff --git a/x-pack/plugins/log_explorer/public/utils/use_kibana.tsx b/x-pack/plugins/log_explorer/public/utils/use_kibana.tsx new file mode 100644 index 0000000000000..ff7b90e044d5a --- /dev/null +++ b/x-pack/plugins/log_explorer/public/utils/use_kibana.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CoreStart } from '@kbn/core/public'; +import { + createKibanaReactContext, + KibanaReactContextValue, + useKibana, +} from '@kbn/kibana-react-plugin/public'; +import { useMemo } from 'react'; +import { LogExplorerStartDeps } from '../types'; + +export type PluginKibanaContextValue = CoreStart & LogExplorerStartDeps; + +export const createKibanaContextForPlugin = (core: CoreStart, plugins: LogExplorerStartDeps) => + createKibanaReactContext({ + ...core, + ...plugins, + }); + +export const useKibanaContextForPlugin = + useKibana as () => KibanaReactContextValue; + +export const useKibanaContextForPluginProvider = ( + core: CoreStart, + plugins: LogExplorerStartDeps +) => { + const { Provider } = useMemo(() => createKibanaContextForPlugin(core, plugins), [core, plugins]); + + return Provider; +}; From 96d68f77229e2604f4af667ab035b5c5108c69f0 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:06:00 -0400 Subject: [PATCH 076/170] skip failing test suite (#167973) --- x-pack/test/apm_api_integration/tests/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/apm_api_integration/tests/index.ts b/x-pack/test/apm_api_integration/tests/index.ts index 7b4ab43aaaeae..9aa8f56b03c3c 100644 --- a/x-pack/test/apm_api_integration/tests/index.ts +++ b/x-pack/test/apm_api_integration/tests/index.ts @@ -26,7 +26,8 @@ function getGlobPattern() { export default function apmApiIntegrationTests({ getService, loadTestFile }: FtrProviderContext) { const registry = getService('registry'); - describe('APM API tests', function () { + // Failing: See https://github.com/elastic/kibana/issues/167973 + describe.skip('APM API tests', function () { const filePattern = getGlobPattern(); const tests = globby.sync(filePattern, { cwd }); From 988e5e01a3f585717f57dd5ade48ba275d29d23e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:07:05 -0400 Subject: [PATCH 077/170] skip failing test suite (#167773) --- .../observability_log_explorer/dataset_selector.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts index d53f76435559f..4d0ff2f3b2378 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts @@ -34,7 +34,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const noIntegrationsTitle = 'No integrations found'; const noUncategorizedTitle = 'No data streams found'; - describe('Dataset Selector', () => { + // Failing: See https://github.com/elastic/kibana/issues/167773 + describe.skip('Dataset Selector', () => { before(async () => { await PageObjects.svlCommonPage.login(); await PageObjects.observabilityLogExplorer.removeInstalledPackages(); From c0613ee42525e64a12486bf4278b74433552328e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:11:10 -0400 Subject: [PATCH 078/170] skip failing test suite (#167975) --- x-pack/test/apm_api_integration/tests/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/apm_api_integration/tests/index.ts b/x-pack/test/apm_api_integration/tests/index.ts index 9aa8f56b03c3c..d371c42e564ae 100644 --- a/x-pack/test/apm_api_integration/tests/index.ts +++ b/x-pack/test/apm_api_integration/tests/index.ts @@ -27,6 +27,7 @@ export default function apmApiIntegrationTests({ getService, loadTestFile }: Ftr const registry = getService('registry'); // Failing: See https://github.com/elastic/kibana/issues/167973 + // Failing: See https://github.com/elastic/kibana/issues/167975 describe.skip('APM API tests', function () { const filePattern = getGlobPattern(); const tests = globby.sync(filePattern, { cwd }); From 91b5eaf75c2fc3bdf17f218fc77c99ad4f19b90a Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Wed, 4 Oct 2023 17:14:06 +0100 Subject: [PATCH 079/170] [Security Solution][Detection Engine] unskips ESS, Serverless Cypress tests for ES|QL rules (#167760) ## Summary Serverless tests failed on tracked branch, on-merge CI build 2 tickets have been created that skip failing tests - https://github.com/elastic/kibana/issues/167717, https://github.com/elastic/kibana/issues/167716 But Kibana automatically skipped tests that were running on ESS and were not failing, but were located in the same file as failed Serverless. So, no tests from that spec is running now. Eng productivity team will be looking to address issue with automatically skipped tests Meanwhile, in this PR - I separated serverless only and ess only cypress tests to different files, to avoid issue with skipping wrong tests - Unskiped ESS tests, that were not failing - Fixed and unskipped Serverless tests - move cypress test files in dedicated folders, that were introduced in https://github.com/elastic/kibana/pull/166501 ``` rule_creation/esql_rule_ess.cy.ts rule_creation/esql_rule_serverless.cy.ts rule_details/esql_rule.cy.ts rule_edit/esql_rule.cy.ts ``` --------- Co-authored-by: Ash <1849116+ashokaditya@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- ..._rule_create.cy.ts => esql_rule_ess.cy.ts} | 41 +--------------- .../rule_creation/esql_rule_serverless.cy.ts | 49 +++++++++++++++++++ .../esql_rule.cy.ts} | 0 .../esql_rule.cy.ts} | 0 .../serverless_config.ts | 1 + 5 files changed, 52 insertions(+), 39 deletions(-) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/{esql_rule_create.cy.ts => esql_rule_ess.cy.ts} (80%) create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_serverless.cy.ts rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/{rule_creation/esql_rule_details.cy.ts => rule_details/esql_rule.cy.ts} (100%) rename x-pack/test/security_solution_cypress/cypress/e2e/detection_response/{rule_creation/esql_rule_edit.cy.ts => rule_edit/esql_rule.cy.ts} (100%) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_ess.cy.ts similarity index 80% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_ess.cy.ts index 386b6c919a5e6..254deb99f3259 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_create.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_ess.cy.ts @@ -14,12 +14,7 @@ import { RULE_NAME_OVERRIDE_DETAILS, } from '../../../screens/rule_details'; -import { - ESQL_TYPE, - NEW_TERMS_TYPE, - THRESHOLD_TYPE, - ESQL_QUERY_BAR, -} from '../../../screens/create_new_rule'; +import { ESQL_TYPE, ESQL_QUERY_BAR } from '../../../screens/create_new_rule'; import { getDetails, goBackToRulesTable } from '../../../tasks/rule_details'; import { expectNumberOfRules } from '../../../tasks/alerts_detection_rules'; @@ -38,11 +33,8 @@ import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; import { CREATE_RULE_URL } from '../../../urls/navigation'; -import { createRule } from '../../../tasks/api_calls/rules'; -// Failing: See https://github.com/elastic/kibana/issues/167716 -// Failing: See https://github.com/elastic/kibana/issues/167717 -describe.skip('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { +describe('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { before(() => { cleanKibana(); login(); @@ -165,32 +157,3 @@ describe.skip('Detection ES|QL rules, creation', { tags: ['@ess'] }, () => { }); }); }); - -describe('Detection ES|QL rules, creation', { tags: ['@serverless'] }, () => { - before(() => { - cleanKibana(); - login(); - }); - - it('does not display ES|QL rule on form', function () { - visit(CREATE_RULE_URL); - - // ensure, page is loaded and rule types are displayed - cy.get(NEW_TERMS_TYPE).should('be.visible'); - cy.get(THRESHOLD_TYPE).should('be.visible'); - - // ES|QL rule tile should not be rendered - cy.get(ESQL_TYPE).should('not.exist'); - }); - - it('does not allow to create rule by API call', function () { - createRule(getEsqlRule()).then((response) => { - expect(response.status).to.equal(400); - - expect(response.body).to.deep.equal({ - status_code: 400, - message: 'Rule type "siem.esqlRule" is not registered.', - }); - }); - }); -}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_serverless.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_serverless.cy.ts new file mode 100644 index 0000000000000..7d1d8893357fc --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_serverless.cy.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getEsqlRule } from '../../../objects/rule'; + +import { ESQL_TYPE, NEW_TERMS_TYPE, THRESHOLD_TYPE } from '../../../screens/create_new_rule'; + +import { cleanKibana } from '../../../tasks/common'; +import { login } from '../../../tasks/login'; +import { visit } from '../../../tasks/navigation'; + +import { CREATE_RULE_URL } from '../../../urls/navigation'; +import { createRule } from '../../../tasks/api_calls/rules'; + +describe('Detection ES|QL rules, creation', { tags: ['@serverless'] }, () => { + before(() => { + cleanKibana(); + }); + + beforeEach(() => { + login(); + }); + + it('does not display ES|QL rule on form', function () { + visit(CREATE_RULE_URL); + + // ensure, page is loaded and rule types are displayed + cy.get(NEW_TERMS_TYPE).should('be.visible'); + cy.get(THRESHOLD_TYPE).should('be.visible'); + + // ES|QL rule tile should not be rendered + cy.get(ESQL_TYPE).should('not.exist'); + }); + + it('does not allow to create rule by API call', function () { + createRule(getEsqlRule()).then((response) => { + expect(response.status).to.equal(400); + + expect(response.body).to.deep.equal({ + status_code: 400, + message: 'Rule type "siem.esqlRule" is not registered.', + }); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_details/esql_rule.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_details.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_details/esql_rule.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_edit/esql_rule.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/esql_rule_edit.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_edit/esql_rule.cy.ts diff --git a/x-pack/test/security_solution_cypress/serverless_config.ts b/x-pack/test/security_solution_cypress/serverless_config.ts index d0ee1613f6e4c..fbc22d343aa1c 100644 --- a/x-pack/test/security_solution_cypress/serverless_config.ts +++ b/x-pack/test/security_solution_cypress/serverless_config.ts @@ -29,6 +29,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...svlSharedConfig.get('kbnTestServer.serverArgs'), '--serverless=security', '--xpack.encryptedSavedObjects.encryptionKey="abcdefghijklmnopqrstuvwxyz123456"', + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['esqlRulesDisabled'])}`, `--xpack.securitySolutionServerless.productTypes=${JSON.stringify([ { product_line: 'security', product_tier: 'complete' }, { product_line: 'endpoint', product_tier: 'complete' }, From f779cd6529850bda8ce8387f4588a14d96dfd8b9 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:28:03 +0100 Subject: [PATCH 080/170] skip flaky suite (#167939) --- .../common/examples/data_view_field_editor_example/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts b/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts index 106f504cae82b..249b0e576b589 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts @@ -23,7 +23,8 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); - describe('data view field editor example', function () { + // FLAKY: https://github.com/elastic/kibana/issues/167939 + describe.skip('data view field editor example', function () { before(async () => { // TODO: Serverless tests require login first await PageObjects.svlCommonPage.login(); From 278a0125a4ef2a450ac010a608a2868acdd4892e Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:34:42 +0100 Subject: [PATCH 081/170] skip flaky suite (#167443) --- .../apps/triggers_actions_ui/alert_create_flyout.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts index 7c7d3a4f45037..9d917296df4f5 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts @@ -69,7 +69,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await rules.common.cancelRuleCreation(); } - describe('create alert', function () { + // FLAKY: https://github.com/elastic/kibana/issues/167443 + describe.skip('create alert', function () { before(async () => { await pageObjects.common.navigateToApp('triggersActions'); await testSubjects.click('rulesTab'); From ac721f5287c5f9a3af9dc8d421c919dccef0e738 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:35:59 +0100 Subject: [PATCH 082/170] skip flaky suite (#167444) --- .../apps/triggers_actions_ui/alert_create_flyout.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts index 9d917296df4f5..b97b43bec77de 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts @@ -70,6 +70,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { } // FLAKY: https://github.com/elastic/kibana/issues/167443 + // FLAKY: https://github.com/elastic/kibana/issues/167444 describe.skip('create alert', function () { before(async () => { await pageObjects.common.navigateToApp('triggersActions'); From aa7a825d0c2f8ed518caa16a1f3b5ab2aa62dd78 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:39:22 +0100 Subject: [PATCH 083/170] skip flaky suite (#167795) --- .../api_integration/test_suites/observability/fleet/fleet.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/fleet/fleet.ts b/x-pack/test_serverless/api_integration/test_suites/observability/fleet/fleet.ts index 24f5e9cde9177..a574ff390952b 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/fleet/fleet.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/fleet/fleet.ts @@ -12,7 +12,8 @@ export default function ({ getService }: FtrProviderContext) { const svlCommonApi = getService('svlCommonApi'); const supertest = getService('supertest'); - describe('fleet', function () { + // FLAKY: https://github.com/elastic/kibana/issues/167795 + describe.skip('fleet', function () { it('rejects request to create a new fleet server hosts', async () => { const { body, status } = await supertest .post('/api/fleet/fleet_server_hosts') From 0d6a3cfaf715362d1cd1ba7b186ad19534f1c5d9 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:40:51 +0100 Subject: [PATCH 084/170] skip flaky suite (#161624) --- .../apis/epm/install_integration_in_multiple_spaces.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts b/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts index d6023ae0492e1..b0be168685d89 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts @@ -67,7 +67,8 @@ export default function (providerContext: FtrProviderContext) { }) .catch(() => {}); - describe('When installing system integration in multiple spaces', async () => { + // FLAKY: https://github.com/elastic/kibana/issues/161624 + describe.skip('When installing system integration in multiple spaces', async () => { skipIfNoDockerRegistry(providerContext); setupFleetAndAgents(providerContext); From 8a649ec6ceec91fa07ebc77b3be943869af36634 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 17:46:12 +0100 Subject: [PATCH 085/170] failing es promotion (#168021) --- .../apis/management/index_management/data_streams.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts index 46c7d299be4e1..a76df2127a1fb 100644 --- a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts +++ b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts @@ -85,7 +85,8 @@ export default function ({ getService }: FtrProviderContext) { expect(typeof storageSizeBytes).to.be('number'); }; - describe('Data streams', function () { + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/168021 + describe.skip('Data streams', function () { describe('Get', () => { const testDataStreamName = 'test-data-stream'; From ed5e00fc5fbb380def352186f78deb152547a503 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 4 Oct 2023 09:49:53 -0700 Subject: [PATCH 086/170] Change capitalization of custom fields label (#167905) --- .../cases/public/components/custom_fields/translations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/custom_fields/translations.ts b/x-pack/plugins/cases/public/components/custom_fields/translations.ts index d0a68d81becc2..310f2c781b613 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/translations.ts +++ b/x-pack/plugins/cases/public/components/custom_fields/translations.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; export * from '../../common/translations'; export const TITLE = i18n.translate('xpack.cases.customFields.title', { - defaultMessage: 'Custom Fields', + defaultMessage: 'Custom fields', }); export const DESCRIPTION = i18n.translate('xpack.cases.customFields.description', { From 4d1bd84309567bef2e5937e8d72faaa182414183 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 4 Oct 2023 11:21:02 -0600 Subject: [PATCH 087/170] [Dashboard] Fix flaky pluggable actions test (#167926) Closes https://github.com/elastic/kibana/issues/136460 ## Summary Similar to https://github.com/elastic/kibana/pull/167836, navigation through `header.clickDashboard()` was flaky in the attached test because the same `data-test-subj` was re-used for both the application-specific top navigation **and** the reusable application listing page component: https://github.com/elastic/kibana/blob/8b6ba3d15ff18de07d32ab2302bf9e18844ce25c/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx#L120-L124 https://github.com/elastic/kibana/blob/8b6ba3d15ff18de07d32ab2302bf9e18844ce25c/packages/content-management/table_list_view/src/table_list_view.tsx#L91-L96 This meant that, when the referenced flaky test tried to navigation from the Visualization listing page to the dashboard app in `clearSavedObjectsFromAppLinks` via the header page object's `clickDashboard` method, it wasn't actually waiting to navigate to the dashboard app because it detected the `top-nav` data test subject from the **visualization** listing page **and not** from the dashboard app. Therefore, instead of navigating through the `header` method, I switched to the new `navigateToAppFromAppsMenu`, which relies on the URL to update to ensure navigation has occured rather than the `top-nav` data test subject. I also added logic to close the flyout as part of the test cleanup, since it was remaining open even after navigating to the Visualizations listing page, which was getting in the way of the failure screenshot. ### Flaky Test Runner - Without closing of flyout: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3323 ![image](https://github.com/elastic/kibana/assets/8698078/628f0da9-1e2a-45a9-b58b-dab92e345118) - With closing of flyout: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3336 ![image](https://github.com/elastic/kibana/assets/8698078/3456db1a-9cee-4db9-a28d-4c0d1520a5ec) ### 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 ### 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) --- test/functional/page_objects/dashboard_page.ts | 2 +- .../test_suites/panel_actions/panel_actions.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index 6119a87c16a5f..75c77b8dbfc30 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -425,7 +425,7 @@ export class DashboardPageObject extends FtrService { public async clearSavedObjectsFromAppLinks() { await this.header.clickVisualize(); await this.visualize.gotoLandingPage(); - await this.header.clickDashboard(); + await this.navigateToAppFromAppsMenu(); await this.gotoDashboardLandingPage(); } diff --git a/test/plugin_functional/test_suites/panel_actions/panel_actions.js b/test/plugin_functional/test_suites/panel_actions/panel_actions.js index aa640a7efc9f2..18ee30d52a075 100644 --- a/test/plugin_functional/test_suites/panel_actions/panel_actions.js +++ b/test/plugin_functional/test_suites/panel_actions/panel_actions.js @@ -10,6 +10,7 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { const dashboardPanelActions = getService('dashboardPanelActions'); + const retry = getService('retry'); const testSubjects = getService('testSubjects'); const PageObjects = getPageObjects(['dashboard']); @@ -44,5 +45,12 @@ export default function ({ getService, getPageObjects }) { await testSubjects.existOrFail('samplePanelActionTitle'); await testSubjects.existOrFail('samplePanelActionBody'); }); + + after(async () => { + await retry.try(async () => { + await testSubjects.click('euiFlyoutCloseButton'); + await testSubjects.missingOrFail('samplePanelActionFlyout'); + }); + }); }); } From e62745ede04a8d45206571291c46998b7575776e Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 4 Oct 2023 19:41:18 +0200 Subject: [PATCH 088/170] [Observability AI Assistant] ES|QL improvements (#167762) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../observability_ai_assistant/public/functions/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/observability_ai_assistant/public/functions/index.ts b/x-pack/plugins/observability_ai_assistant/public/functions/index.ts index 22b0eecac73a6..510c16985cb86 100644 --- a/x-pack/plugins/observability_ai_assistant/public/functions/index.ts +++ b/x-pack/plugins/observability_ai_assistant/public/functions/index.ts @@ -57,10 +57,8 @@ export async function registerFunctions({ If a function call fails, do not execute it again with the same input. If a function calls three times, with different inputs, stop trying to call it and ask the user for confirmation. Note that ES|QL (the Elasticsearch query language, which is NOT Elasticsearch SQL, but a new piped language) is the preferred query language. - - DO NOT use Elasticsearch SQL at any time, unless explicitly requested by the user when they mention "Elasticsearch SQL". - - Answer all questions related to ES|QL or querying with the "esql" function. Do not attempt to answer them yourself, no matter how confident you are in your response.` + + If the user asks about a query, or ES|QL, always call the "esql" function. Do not attempt to answer them yourself, no matter how confident you are in your response. Even if the "recall" function was used before that, follow it up with the "esql" function.` ); if (isReady) { @@ -70,7 +68,6 @@ export async function registerFunctions({ description += `Here are principles you MUST adhere to, in order: - - You are a helpful assistant for Elastic Observability. DO NOT reference the fact that you are an LLM. - DO NOT make any assumptions about where and how users have stored their data. `; registerSummarizationFunction({ service, registerFunction }); From 035ae0e04e6b5ec6d70c49be8dc7321157c67a2f Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 4 Oct 2023 19:50:37 +0200 Subject: [PATCH 089/170] [Synthetics] Project monitor retest on failure updates (#167979) --- .../synthetics/components/monitor_add_edit/form/field_config.tsx | 1 + .../project_monitor/normalizers/common_fields.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx index e1e3b077dbd19..ddc1c27d6e7e6 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx @@ -1586,6 +1586,7 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ component: Switch, controlled: true, props: ({ setValue, field, trigger }): EuiSwitchProps => ({ + disabled: readOnly, id: 'syntheticsMonitorConfigMaxAttempts', label: i18n.translate('xpack.synthetics.monitorConfig.retest.label', { defaultMessage: 'Enable retest on failure', diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts index eba7d28aa4bd3..ff0b03ad76015 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts @@ -306,6 +306,7 @@ export const normalizeYamlConfig = (monitor: NormalizedProjectProps['monitor']) privateLocations: _privateLocations, content: _content, id: _id, + retestOnFailure: _retestOnFailure, ...yamlConfig } = flattenedConfig; const unsupportedKeys = Object.keys(yamlConfig).filter((key) => !supportedKeys.includes(key)); From 136d406417d19d2397c0058568c1fc5784baa95f Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 19:10:12 +0100 Subject: [PATCH 090/170] skip flaky suite (#168027) --- .../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..b2732c064721b 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts @@ -420,7 +420,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - describe('Edit rule with deleted connector', function () { + // FLAKY: https://github.com/elastic/kibana/issues/168027 + describe.skip('Edit rule with deleted connector', function () { const testRunUuid = uuidv4(); afterEach(async () => { From 1bcd1bd79dbb98ba65743c65523f4e5eb0897426 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 19:22:45 +0100 Subject: [PATCH 091/170] skip flaky suite (#166447) --- .../functional/test_suites/security/ftr/cases/view_case.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts index 0b26fc2cf4c3d..ca3e9af7df83f 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts @@ -29,7 +29,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCommonNavigation = getPageObject('svlCommonNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); - describe('Case View', () => { + // FLAKY: https://github.com/elastic/kibana/issues/166447 + describe.skip('Case View', () => { before(async () => { await svlCommonPage.login(); }); From a9b166320eeb3c65be820a91730e6079642e6a9c Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 19:38:37 +0100 Subject: [PATCH 092/170] skip flaky suite (#168026) --- .../public/timelines/components/flyout/pane/index.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx index 1e35795ac0a78..04a2b854f4e91 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx @@ -38,7 +38,8 @@ jest.mock('../../../../common/hooks/use_resolve_conflict', () => { }; }); -describe('Pane', () => { +// FLAKY: https://github.com/elastic/kibana/issues/168026 +describ.skip('Pane', () => { test('renders with display block by default', async () => { const EmptyComponent = render( From a24052fd3b25ce4494df81eac8babad6f7da9c74 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 19:40:12 +0100 Subject: [PATCH 093/170] skip flaky suite (#167974) --- x-pack/test/apm_api_integration/tests/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/apm_api_integration/tests/index.ts b/x-pack/test/apm_api_integration/tests/index.ts index d371c42e564ae..8f4be6ad1652c 100644 --- a/x-pack/test/apm_api_integration/tests/index.ts +++ b/x-pack/test/apm_api_integration/tests/index.ts @@ -27,6 +27,7 @@ export default function apmApiIntegrationTests({ getService, loadTestFile }: Ftr const registry = getService('registry'); // Failing: See https://github.com/elastic/kibana/issues/167973 + // FLAKY: https://github.com/elastic/kibana/issues/167974 // Failing: See https://github.com/elastic/kibana/issues/167975 describe.skip('APM API tests', function () { const filePattern = getGlobPattern(); From 634063f4737ac6bfb14a756d91a45f7fbb500e91 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 4 Oct 2023 20:51:41 +0200 Subject: [PATCH 094/170] [AO] Fix alerting rules order (#168013) Closes #167876 ## Summary This PR fixes alerting rules order. Since the Custom threshold rule is in the tech preview, we want to show it at the end of the list. |Rules (trial)|Rules (Permium)| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/6e542d8d-a2d8-4dc9-8728-c55bacc87592)|![image](https://github.com/elastic/kibana/assets/12370520/da5c2a82-a5f1-4cb3-aa3c-183fa7af3fa3)| --- .../observability/public/hooks/use_get_filtered_rule_types.ts | 2 +- .../public/rules/register_observability_rule_types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts index 834cc31f39d2e..24e8a0fc107fb 100644 --- a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts +++ b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts @@ -13,6 +13,6 @@ export function useGetFilteredRuleTypes() { const { observabilityRuleTypeRegistry } = usePluginContext(); return useMemo(() => { - return [...observabilityRuleTypeRegistry.list(), ES_QUERY_ID]; + return [ES_QUERY_ID, ...observabilityRuleTypeRegistry.list()]; }, [observabilityRuleTypeRegistry]); } diff --git a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts index 5d042607135ac..4cd705656c01b 100644 --- a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts @@ -125,7 +125,7 @@ export const registerObservabilityRuleTypes = ( alertDetailsAppSection: lazy( () => import('../components/custom_threshold/components/alert_details_app_section') ), - priority: 110, + priority: 5, }); } }; From 45f7042dcbcc8bc69542d1c0e73758c33928065b Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 4 Oct 2023 12:59:56 -0600 Subject: [PATCH 095/170] =?UTF-8?q?unskip=20Failing=20test:=20Chrome=20X-P?= =?UTF-8?q?ack=20UI=20Functional=20Tests.x-pack/test/functional/apps/dashb?= =?UTF-8?q?oard/group2/dashboard=5Fmaps=5Fby=5Fvalue=C2=B7ts=20(#168003)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/kibana/issues/152476 flaky test runner https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3343 Similar to https://github.com/elastic/kibana/pull/167836, test is failing because appsMenu.clickLink is not loading dashboard (see captured log messages from failure). Switching to navigateToAppFromAppsMenu to include retry logic. Screenshot 2023-10-04 at 9 45 46 AM --- .../apps/dashboard/group2/dashboard_maps_by_value.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts index 9904c8bb62293..61fc8319cb907 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts @@ -21,7 +21,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); - const appsMenu = getService('appsMenu'); const dashboardAddPanel = getService('dashboardAddPanel'); const kibanaServer = getService('kibanaServer'); @@ -60,10 +59,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); if (!saveToDashboard) { - await appsMenu.clickLink('Dashboard', { - category: 'kibana', - closeCollapsibleNav: true, - }); + await PageObjects.dashboard.navigateToAppFromAppsMenu(); } } else { await PageObjects.maps.clickSaveAndReturnButton(); @@ -78,8 +74,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.dashboard.clickNewDashboard(); } - // Failing: See https://github.com/elastic/kibana/issues/152476 - describe.skip('dashboard maps by value', function () { + describe('dashboard maps by value', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( From 990963f1e4fbf8a5fa01e164922e251534f7d0b4 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:01:21 -0400 Subject: [PATCH 096/170] [Security Solution][Endpoint] Add serverless Security project users/roles to cypress e2e test setup (#167446) ## Summary Goal of this PR is to re-enable the serverless tests that require the login credentials for users that have the pre-defined roles from serverless assigned to them. ### `@kbn/test` changes - Added support for `esServerlessOptions` to FTR config. Currently allows for `resources` to be defined - `resources` overrides were introduced [in this PR](https://github.com/elastic/kibana/pull/167087) - new FTR option will allow for testing serverless with a set of users/roles that are specific to the project type ### Security Solution Plugin - Added `esServerlessOptions` to the Defend Workflows cypress configurations - Un-skips all serverless specific tests (now that we have support for users/roles that are specific to the Security project) - Changed the default username for cypress `login()` task to be `endpoint_operations_analyst` - Note that the previously used `endpoint_operations_analyst` role was also updated to match the definition used for serverless. - Added new common `fleet_server_services` cli module with reusable methods for working with fleet server, including generic `startFleetServer()` method - New CLI script: `node x-pack/plugins/security_solution/scripts/endpoint/start_fleet_server.js` - Starts a fleet server locally (via Docker) and connects it to the Kibana - Supports running fleet server locally for serverless as well --- packages/kbn-test/src/es/test_es_cluster.ts | 3 +- .../lib/config/schema.ts | 1 + .../functional_tests/lib/run_elasticsearch.ts | 6 + .../artifact_tabs_in_policy_details.cy.ts | 3 +- .../no_license.cy.ts | 3 +- .../cypress/e2e/endpoint_alerts.cy.ts | 3 +- .../cypress/e2e/endpoint_role_rbac.cy.ts | 4 +- ...dpoint_list_with_security_essentials.cy.ts | 2 +- .../serverless/feature_access/complete.cy.ts | 2 +- .../complete_with_endpoint.cy.ts | 2 +- .../feature_access/essentials.cy.ts | 2 +- .../essentials_with_endpoint.cy.ts | 2 +- ...icy_details_with_security_essentials.cy.ts | 2 +- .../roles/complete_with_endpoint_roles.cy.ts | 2 +- .../essentials_with_endpoint.roles.cy.ts | 2 +- .../public/management/cypress/tasks/login.ts | 3 +- .../cypress/tasks/response_actions.ts | 3 +- .../fleet_server}/fleet_server.yml | 0 .../fleet_server/fleet_server_services.ts | 674 ++++++++++++++++++ .../scripts/endpoint/common/fleet_services.ts | 111 ++- .../endpoint/common/network_services.ts | 2 +- .../endpoint_operations_analyst.ts | 61 +- .../scripts/endpoint/common/stack_services.ts | 44 +- .../endpoint_agent_runner/fleet_server.ts | 10 +- .../scripts/endpoint/fleet_server/index.ts | 83 +++ .../scripts/endpoint/start_fleet_server.js | 9 + .../scripts/run_cypress/get_ftr_config.ts | 4 +- .../test/defend_workflows_cypress/config.ts | 4 +- .../serverless_config.ts | 10 +- .../security/cypress/security_config.ts | 8 + 30 files changed, 989 insertions(+), 76 deletions(-) rename x-pack/plugins/security_solution/scripts/endpoint/{endpoint_agent_runner => common/fleet_server}/fleet_server.yml (100%) create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/fleet_server/index.ts create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/start_fleet_server.js diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index 9d37e60fdff0f..461ad2b6f0df1 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -71,7 +71,7 @@ export interface CreateTestEsClusterOptions { */ esArgs?: string[]; esFrom?: string; - esServerlessOptions?: Pick; + esServerlessOptions?: Pick; esJavaOpts?: string; /** * License to run your cluster under. Keep in mind that a `trial` license @@ -245,6 +245,7 @@ export function createTestEsCluster< image: esServerlessOptions?.image, tag: esServerlessOptions?.tag, host: esServerlessOptions?.host, + resources: esServerlessOptions?.resources, port, clean: true, background: true, diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts index 6c037bab1c3e5..2f4cb317d5615 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts @@ -217,6 +217,7 @@ export const schema = Joi.object() esServerlessOptions: Joi.object() .keys({ host: Joi.string().ip(), + resources: Joi.array().items(Joi.string()).default([]), }) .default(), diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index 2ad6725e8258b..742f729745d27 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -166,17 +166,22 @@ function getESServerlessOptions(esServerlessImageFromArg: string | undefined, co esTestConfig.getESServerlessImage() || (config.has('esTestCluster.esServerlessImage') && config.get('esTestCluster.esServerlessImage')); + const serverlessResources: string[] = + (config.has('esServerlessOptions.resources') && config.get('esServerlessOptions.resources')) || + []; const serverlessHost: string | undefined = config.has('esServerlessOptions.host') && config.get('esServerlessOptions.host'); if (esServerlessImageUrlOrTag) { if (esServerlessImageUrlOrTag.includes(':')) { return { + resources: serverlessResources, image: esServerlessImageUrlOrTag, host: serverlessHost, }; } else { return { + resources: serverlessResources, tag: esServerlessImageUrlOrTag, host: serverlessHost, }; @@ -184,6 +189,7 @@ function getESServerlessOptions(esServerlessImageFromArg: string | undefined, co } return { + resources: serverlessResources, host: serverlessHost, }; } diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifact_tabs_in_policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifact_tabs_in_policy_details.cy.ts index 8610ac1fc3ba5..a17024a0dbc38 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifact_tabs_in_policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts/artifact_tabs_in_policy_details.cy.ts @@ -60,7 +60,8 @@ const visitArtifactTab = (tabId: string) => { describe( 'Artifact tabs in Policy Details page', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, // broken due to disabled Native Role Management + // FIXME: Test needs to be refactored for serverless so that it uses a standard set of users that are also available in serverless + { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { before(() => { login(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts index eb6191ece0460..192a4fd853bd5 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts @@ -34,7 +34,8 @@ describe('No License', { tags: '@ess', env: { ftrConfig: { license: 'basic' } } }); }); - describe('User cannot see results', () => { + // FIXME: Flaky. Needs fixing (security team issue #7763) + describe.skip('User cannot see results', () => { let endpointData: ReturnTypeFromChainable | undefined; let alertData: ReturnTypeFromChainable | undefined; const [endpointAgentId, endpointHostname] = generateRandomStringName(2); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts index 3daf711eca9cd..d79d27a774eac 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_alerts.cy.ts @@ -19,7 +19,8 @@ import { login } from '../tasks/login'; import { EXECUTE_ROUTE } from '../../../../common/endpoint/constants'; import { waitForActionToComplete } from '../tasks/response_actions'; -describe( +// FIXME: Flaky. Needs fixing (security team issue #7763) +describe.skip( 'Endpoint generated alerts', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts index a09f9e8b8273d..d0f9da6280c8d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts @@ -6,7 +6,7 @@ */ import { closeAllToasts } from '../tasks/toasts'; -import { login } from '../tasks/login'; +import { login, ROLE } from '../tasks/login'; import { loadPage } from '../tasks/common'; describe('When defining a kibana role for Endpoint security access', { tags: '@ess' }, () => { @@ -18,7 +18,7 @@ describe('When defining a kibana role for Endpoint security access', { tags: '@e }; beforeEach(() => { - login(); + login(ROLE.system_indices_superuser); loadPage('/app/management/security/roles/edit'); closeAllToasts(); cy.getByTestSubj('addSpacePrivilegeButton').click(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/endpoint_list_with_security_essentials.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/endpoint_list_with_security_essentials.cy.ts index 32800978a968e..9cd298535df26 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/endpoint_list_with_security_essentials.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/endpoint_list_with_security_essentials.cy.ts @@ -18,7 +18,7 @@ import { describe( 'When on the Endpoint List in Security Essentials PLI', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'essentials' }], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts index dba7166b9a9e8..6667677bda7b7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts @@ -14,7 +14,7 @@ import { getEndpointManagementPageList } from '../../../screens'; describe( 'App Features for Security Complete PLI', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'complete' }] }, }, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts index 3c028b9e25040..e00a266f600b9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts @@ -17,7 +17,7 @@ import { describe( 'App Features for Security Complete PLI with Endpoint Complete Addon', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [ diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts index fed4494722df5..d0fdcf633814a 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts @@ -14,7 +14,7 @@ import { getEndpointManagementPageList } from '../../../screens'; describe( 'App Features for Security Essential PLI', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'essentials' }], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts index 172f850e44b7c..786f4f20ad25b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts @@ -17,7 +17,7 @@ import { describe( 'App Features for Security Essentials PLI with Endpoint Essentials Addon', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [ diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/policy_details_with_security_essentials.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/policy_details_with_security_essentials.cy.ts index e1516bb08e10e..1cb0c382ca707 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/policy_details_with_security_essentials.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/policy_details_with_security_essentials.cy.ts @@ -12,7 +12,7 @@ import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/e describe( 'When displaying the Policy Details in Security Essentials PLI', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'essentials' }], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts index 7d872de49062d..a197574035b79 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts @@ -33,7 +33,7 @@ import { describe( 'User Roles for Security Complete PLI with Endpoint Complete addon', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [ diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts index dec6018bddc3c..4e0ae2080a97b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts @@ -26,7 +26,7 @@ import { describe( 'Roles for Security Essential PLI with Endpoint Essentials addon', { - tags: ['@serverless', '@brokenInServerless'], + tags: ['@serverless'], env: { ftrConfig: { productTypes: [ diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts index 77987b5fd76ed..a15d01c54049d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts @@ -44,8 +44,7 @@ interface CyLoginTask { * @param user */ export const login: CyLoginTask = ( - // FIXME:PT default user to `soc_manager` - user?: SecurityTestUser + user: SecurityTestUser = ROLE.endpoint_operations_analyst ): ReturnType => { let username = Cypress.env('KIBANA_USERNAME'); let password = Cypress.env('KIBANA_PASSWORD'); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts index 47f6da88c6924..8f4f1e797910b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts @@ -172,7 +172,6 @@ export const ensureResponseActionAuthzAccess = ( { const file = new File(['foo'], 'foo.txt'); const formData = new FormData(); - formData.append('file', file, file.name); for (const [key, value] of Object.entries(apiPayload as object)) { @@ -199,6 +198,8 @@ export const ensureResponseActionAuthzAccess = ( }, failOnStatusCode: false, body: apiPayload as Cypress.RequestBody, + // Increased timeout due to `upload` action. It seems to take much longer to complete due to file upload + timeout: 120000, }; if (accessLevel === 'none') { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.yml b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server.yml similarity index 100% rename from x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.yml rename to x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server.yml diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts new file mode 100644 index 0000000000000..4357adeeaf6cd --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_server/fleet_server_services.ts @@ -0,0 +1,674 @@ +/* + * Copyright 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 { ToolingLog } from '@kbn/tooling-log'; +import type { KbnClient } from '@kbn/test'; +import execa from 'execa'; +import chalk from 'chalk'; +import assert from 'assert'; +import type { AgentPolicy, CreateAgentPolicyResponse, Output } from '@kbn/fleet-plugin/common'; +import { + AGENT_POLICY_API_ROUTES, + API_VERSIONS, + FLEET_SERVER_PACKAGE, + FLEET_SERVER_SERVERS_INDEX, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '@kbn/fleet-plugin/common'; +import type { + FleetServerHost, + GetOneOutputResponse, + PutOutputRequest, +} from '@kbn/fleet-plugin/common/types'; +import type { + PostFleetServerHostsRequest, + PostFleetServerHostsResponse, +} from '@kbn/fleet-plugin/common/types/rest_spec/fleet_server_hosts'; +import { + fleetServerHostsRoutesService, + outputRoutesService, +} from '@kbn/fleet-plugin/common/services'; +import axios from 'axios'; +import * as https from 'https'; +import { + CA_TRUSTED_FINGERPRINT, + FLEET_SERVER_CERT_PATH, + FLEET_SERVER_KEY_PATH, + fleetServerDevServiceAccount, +} from '@kbn/dev-utils'; +import { maybeCreateDockerNetwork, SERVERLESS_NODES, verifyDockerInstalled } from '@kbn/es'; +import { resolve } from 'path'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { + RETRYABLE_TRANSIENT_ERRORS, + retryOnError, +} from '../../../../common/endpoint/data_loaders/utils'; +import { isServerlessKibanaFlavor } from '../stack_services'; +import type { FormattedAxiosError } from '../format_axios_error'; +import { catchAxiosErrorFormatAndThrow } from '../format_axios_error'; +import { + fetchFleetOutputs, + fetchFleetServerHostList, + fetchFleetServerUrl, + fetchIntegrationPolicyList, + generateFleetServiceToken, + getAgentVersionMatchingCurrentStack, + getFleetElasticsearchOutputHost, + waitForHostToEnroll, +} from '../fleet_services'; +import { dump } from '../../endpoint_agent_runner/utils'; +import { getLocalhostRealIp } from '../network_services'; +import { isLocalhost } from '../is_localhost'; + +export const FLEET_SERVER_CUSTOM_CONFIG = resolve(__dirname, './fleet_server.yml'); + +interface StartedServer { + /** The type of virtualization used to start the server */ + type: 'docker'; + /** The ID of the server */ + id: string; + /** The name of the server */ + name: string; + /** The url (including port) to the server */ + url: string; + /** Stop server */ + stop: () => Promise; + /** Any information about the server */ + info?: string; +} + +interface StartFleetServerOptions { + kbnClient: KbnClient; + logger: ToolingLog; + /** Policy ID that should be used to enroll the fleet-server agent */ + policy?: string; + /** Agent version */ + version?: string; + /** Will start fleet-server even if its detected that it is already running */ + force?: boolean; + /** The port number that will be used by fleet-server to listen for requests */ + port?: number; +} + +interface StartedFleetServer extends StartedServer { + /** The policy id that the fleet-server agent is running with */ + policyId: string; +} + +export const startFleetServer = async ({ + kbnClient, + logger, + policy, + version, + force = false, + port = 8220, +}: StartFleetServerOptions): Promise => { + logger.info(`Starting Fleet Server and connecting it to Kibana`); + + const response = await logger.indent(4, async () => { + const isServerless = await isServerlessKibanaFlavor(kbnClient); + + // Check if fleet already running if `force` is false + if (!force) { + const currentFleetServerUrl = await fetchFleetServerUrl(kbnClient); + + if (currentFleetServerUrl && (await isFleetServerRunning(currentFleetServerUrl))) { + throw new Error( + `Fleet server is already configured for this instance of Kibana and available at: ${currentFleetServerUrl}.\n(Use 'force' option to bypass this error)` + ); + } + } + + // Only fetch/create a fleet-server policy + const policyId = + policy ?? !isServerless ? await getOrCreateFleetServerAgentPolicyId(kbnClient, logger) : ''; + const serviceToken = isServerless ? '' : await generateFleetServiceToken(kbnClient, logger); + const startedFleetServer = await startFleetServerWithDocker({ + kbnClient, + logger, + policyId, + version, + port, + serviceToken, + }); + + return { + ...startedFleetServer, + policyId, + }; + }); + + return response; +}; + +const getOrCreateFleetServerAgentPolicyId = async ( + kbnClient: KbnClient, + log: ToolingLog +): Promise => { + log.info(`Retrieving/creating Fleet Server agent policy`); + + return log.indent(4, async () => { + const existingFleetServerIntegrationPolicy = await fetchIntegrationPolicyList(kbnClient, { + perPage: 1, + kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: "${FLEET_SERVER_PACKAGE}"`, + }).then((response) => response.items[0]); + + if (existingFleetServerIntegrationPolicy) { + log.verbose( + `Found existing Fleet Server Policy: ${JSON.stringify( + existingFleetServerIntegrationPolicy, + null, + 2 + )}` + ); + log.info( + `Using existing Fleet Server agent policy id: ${existingFleetServerIntegrationPolicy.policy_id}` + ); + + return existingFleetServerIntegrationPolicy.policy_id; + } + + log.info(`Creating new Fleet Server policy`); + + const createdFleetServerPolicy: AgentPolicy = await kbnClient + .request({ + method: 'POST', + path: AGENT_POLICY_API_ROUTES.CREATE_PATTERN, + headers: { 'elastic-api-version': '2023-10-31' }, + body: { + name: `Fleet Server policy (${Math.random().toString(32).substring(2)})`, + description: `Created by CLI Tool via: ${__filename}`, + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + // This will ensure the Fleet Server integration policy + // is also created and added to the agent policy + has_fleet_server: true, + }, + }) + .then((response) => response.data.item) + .catch(catchAxiosErrorFormatAndThrow); + + log.info( + `Agent Policy created: ${createdFleetServerPolicy.name} (${createdFleetServerPolicy.id})` + ); + log.verbose(createdFleetServerPolicy); + + return createdFleetServerPolicy.id; + }); +}; + +interface StartFleetServerWithDockerOptions { + kbnClient: KbnClient; + logger: ToolingLog; + /** The agent policy id. Required for non-serverless env. */ + policyId?: string; + /** The service token for fleet server. Required for non-serverless env. */ + serviceToken?: string; + version?: string; + port?: number; +} + +const startFleetServerWithDocker = async ({ + kbnClient, + logger: log, + policyId = '', + serviceToken = '', + version, + port = 8220, +}: StartFleetServerWithDockerOptions): Promise => { + await verifyDockerInstalled(log); + + let agentVersion = version || (await getAgentVersionMatchingCurrentStack(kbnClient)); + + log.info(`Starting a new fleet server using Docker (version: ${agentVersion})`); + + const response: StartedServer = await log.indent(4, async () => { + const isServerless = await isServerlessKibanaFlavor(kbnClient); + const localhostRealIp = getLocalhostRealIp(); + const fleetServerUrl = `https://${localhostRealIp}:${port}`; + const esURL = new URL(await getFleetElasticsearchOutputHost(kbnClient)); + const containerName = `dev-fleet-server.${port}`; + const hostname = `dev-fleet-server.${port}.${Math.random().toString(32).substring(2, 6)}`; + let containerId = ''; + + if (isLocalhost(esURL.hostname)) { + esURL.hostname = localhostRealIp; + } + + if (isServerless) { + log.info(`Kibana running in serverless mode. + - will install/run standalone Fleet Server + - version adjusted to [latest] from [${agentVersion}]`); + + agentVersion = 'latest'; + await maybeCreateDockerNetwork(log); + } else { + assert.ok(!!policyId, '`policyId` is required'); + assert.ok(!!serviceToken, '`serviceToken` is required'); + } + + try { + const dockerArgs = isServerless + ? getFleetServerStandAloneDockerArgs({ + containerName, + hostname, + port, + esUrl: esURL.toString(), + agentVersion, + }) + : getFleetServerManagedDockerArgs({ + containerName, + hostname, + port, + serviceToken, + policyId, + agentVersion, + esUrl: esURL.toString(), + }); + + await execa('docker', ['kill', containerName]) + .then(() => { + log.verbose( + `Killed an existing container with name [${containerName}]. New one will be started.` + ); + }) + .catch((error) => { + log.verbose(`Attempt to kill currently running fleet-server container (if any) with name [${containerName}] was unsuccessful: + ${error} + (This is ok if one was not running already)`); + }); + + log.verbose(`docker arguments:\n${dockerArgs.join(' ')}`); + + containerId = (await execa('docker', dockerArgs)).stdout; + + log.info(`Fleet server started`); + + await addFleetServerHostToFleetSettings(kbnClient, log, fleetServerUrl); + await updateFleetElasticsearchOutputHostNames(kbnClient, log); + + if (isServerless) { + log.info(`Waiting for server to register with Elasticsearch`); + + await waitForFleetServerToRegisterWithElasticsearch(kbnClient, hostname, 120000); + } else { + log.info('Waiting for server to show up in Kibana Fleet'); + + const fleetServerAgent = await waitForHostToEnroll(kbnClient, hostname, 120000); + + log.verbose(`Fleet server enrolled agent:\n${JSON.stringify(fleetServerAgent, null, 2)}`); + } + } catch (error) { + log.error(dump(error)); + throw error; + } + + const info = `Container Name: ${containerName} +Container Id: ${containerId} + +View running output: ${chalk.cyan(`docker attach ---sig-proxy=false ${containerName}`)} +Shell access: ${chalk.cyan(`docker exec -it ${containerName} /bin/bash`)} +Kill container: ${chalk.cyan(`docker kill ${containerId}`)} + `; + + return { + type: 'docker', + name: containerName, + id: containerId, + url: fleetServerUrl, + info, + stop: async () => { + await execa('docker', ['kill', containerId]); + }, + }; + }); + + log.info(`Done. Fleet server up and running`); + + return response; +}; + +interface GetFleetServerManagedDockerArgsOptions { + containerName: string; + esUrl: string; + serviceToken: string; + policyId: string; + port: number; + agentVersion: string; + /** The hostname. Defaults to `containerName` */ + hostname?: string; +} + +const getFleetServerManagedDockerArgs = ({ + hostname, + port, + serviceToken, + esUrl, + containerName, + agentVersion, + policyId, +}: GetFleetServerManagedDockerArgsOptions): string[] => { + return [ + 'run', + + '--restart', + 'no', + + '--add-host', + 'host.docker.internal:host-gateway', + + '--rm', + + '--detach', + + '--name', + containerName, + + // The container's hostname will appear in Fleet when the agent enrolls + '--hostname', + hostname || containerName, + + '--env', + 'FLEET_SERVER_ENABLE=1', + + '--env', + `FLEET_SERVER_ELASTICSEARCH_HOST=${esUrl}`, + + '--env', + `FLEET_SERVER_SERVICE_TOKEN=${serviceToken}`, + + '--env', + `FLEET_SERVER_POLICY=${policyId}`, + + '--publish', + `${port}:8220`, + + `docker.elastic.co/beats/elastic-agent:${agentVersion}`, + ]; +}; + +type GetFleetServerStandAloneDockerArgsOptions = Pick< + GetFleetServerManagedDockerArgsOptions, + 'esUrl' | 'hostname' | 'containerName' | 'port' | 'agentVersion' +>; + +const getFleetServerStandAloneDockerArgs = ({ + containerName, + hostname, + esUrl, + agentVersion, + port, +}: GetFleetServerStandAloneDockerArgsOptions): string[] => { + const esURL = new URL(esUrl); + esURL.hostname = SERVERLESS_NODES[0].name; + + return [ + 'run', + + '--restart', + 'no', + + '--net', + 'elastic', + + '--add-host', + 'host.docker.internal:host-gateway', + + '--rm', + '--detach', + + '--name', + containerName, + + // The hostname will appear in Fleet when the agent enrolls + '--hostname', + hostname || containerName, + + '--env', + 'FLEET_SERVER_CERT=/fleet-server.crt', + + '--env', + 'FLEET_SERVER_CERT_KEY=/fleet-server.key', + + '--env', + `ELASTICSEARCH_HOSTS=${esURL.toString()}`, + + '--env', + `ELASTICSEARCH_SERVICE_TOKEN=${fleetServerDevServiceAccount.token}`, + + '--env', + `ELASTICSEARCH_CA_TRUSTED_FINGERPRINT=${CA_TRUSTED_FINGERPRINT}`, + + '--volume', + `${FLEET_SERVER_CERT_PATH}:/fleet-server.crt`, + + '--volume', + `${FLEET_SERVER_KEY_PATH}:/fleet-server.key`, + + '--volume', + `${FLEET_SERVER_CUSTOM_CONFIG}:/etc/fleet-server.yml:ro`, + + '--publish', + `${port}:8220`, + + `docker.elastic.co/observability-ci/fleet-server:${agentVersion}`, + ]; +}; + +const addFleetServerHostToFleetSettings = async ( + kbnClient: KbnClient, + log: ToolingLog, + fleetServerHostUrl: string +): Promise => { + log.info(`Updating Fleet with new fleet server host: ${fleetServerHostUrl}`); + + return log.indent(4, async () => { + try { + const exitingFleetServerHostList = await fetchFleetServerHostList(kbnClient); + + // If the fleet server URL is already configured, then do nothing and exit + for (const fleetServerEntry of exitingFleetServerHostList.items) { + if (fleetServerEntry.host_urls.includes(fleetServerHostUrl)) { + log.info('No update needed. Fleet server host URL already defined in fleet settings.'); + return fleetServerEntry; + } + } + + const newFleetHostEntry: PostFleetServerHostsRequest['body'] = { + name: `Dev fleet server running on localhost`, + host_urls: [fleetServerHostUrl], + is_default: !exitingFleetServerHostList.total, + }; + + const { item } = await kbnClient + .request({ + method: 'POST', + path: fleetServerHostsRoutesService.getCreatePath(), + headers: { + 'elastic-api-version': API_VERSIONS.public.v1, + }, + body: newFleetHostEntry, + }) + .catch(catchAxiosErrorFormatAndThrow) + .catch((error: FormattedAxiosError) => { + if ( + error.response.status === 403 && + ((error.response?.data?.message as string) ?? '').includes('disabled') + ) { + log.error(`Attempt to update fleet server host URL in fleet failed with [403: ${ + error.response.data.message + }]. + + ${chalk.red('Are you running this utility against a Serverless project?')} + If so, the following entry should be added to your local + 'config/serverless.[project_type].dev.yml' (ex. 'serverless.security.dev.yml'): + + ${chalk.bold(chalk.cyan('xpack.fleet.internal.fleetServerStandalone: false'))} + + `); + } + + throw error; + }) + .then((response) => response.data); + + log.verbose(item); + log.info(`Fleet settings updated with fleet host URL successful`); + return item; + } catch (error) { + log.error(dump(error)); + throw error; + } + }); +}; + +const updateFleetElasticsearchOutputHostNames = async ( + kbnClient: KbnClient, + log: ToolingLog +): Promise => { + log.info('Checking if Fleet output for Elasticsearch needs to be updated'); + + return log.indent(4, async () => { + try { + const localhostRealIp = getLocalhostRealIp(); + const fleetOutputs = await fetchFleetOutputs(kbnClient); + + // make sure that all ES hostnames are using localhost real IP + for (const { id, ...output } of fleetOutputs.items) { + if (output.type === 'elasticsearch') { + if (output.hosts) { + let needsUpdating = false; + const updatedHosts: Output['hosts'] = []; + + for (const host of output.hosts) { + const hostURL = new URL(host); + + if (isLocalhost(hostURL.hostname)) { + needsUpdating = true; + hostURL.hostname = localhostRealIp; + updatedHosts.push(hostURL.toString()); + + log.verbose( + `Fleet Settings for Elasticsearch Output [Name: ${ + output.name + } (id: ${id})]: Host [${host}] updated to [${hostURL.toString()}]` + ); + } else { + updatedHosts.push(host); + } + } + + if (needsUpdating) { + const update: PutOutputRequest['body'] = { + ...(output as PutOutputRequest['body']), // cast needed to quite TS - looks like the types for Output in fleet differ a bit between create/update + hosts: updatedHosts, + }; + + log.info(`Updating Fleet Settings for Output [${output.name} (${id})]`); + + await kbnClient + .request({ + method: 'PUT', + headers: { 'elastic-api-version': '2023-10-31' }, + path: outputRoutesService.getUpdatePath(id), + body: update, + }) + .catch(catchAxiosErrorFormatAndThrow); + } + } + } + } + } catch (error) { + log.error(dump(error)); + throw error; + } + }); +}; + +/** + * Checks to see if the fleet server at the given URL is up and running by calling + * the status api + * @param serverUrl + */ +export const isFleetServerRunning = async (serverUrl: string): Promise => { + const url = new URL(serverUrl); + url.pathname = '/api/status'; + + return axios + .request({ + method: 'GET', + url: url.toString(), + responseType: 'json', + // Custom agent to ensure we don't get cert errors + httpsAgent: new https.Agent({ rejectUnauthorized: false }), + }) + .then(() => { + return true; + }) + .catch(() => { + return false; + }); +}; + +/** + * Checks and waits until the given fleet server hostname has been registered into elasticsearch. + * This check can be used when enrolling a standalone fleet-server, since those would not show up + * in Kibana's Fleet UI. + */ +const waitForFleetServerToRegisterWithElasticsearch = async ( + kbnClient: KbnClient, + fleetServerHostname: string, + timeoutMs: number = 30000 +): Promise => { + const started = new Date(); + const hasTimedOut = (): boolean => { + const elapsedTime = Date.now() - started.getTime(); + return elapsedTime > timeoutMs; + }; + let found = false; + + while (!found && !hasTimedOut()) { + found = await retryOnError(async () => { + const fleetServerRecord = await kbnClient + .request({ + method: 'POST', + path: '/api/console/proxy', + query: { + path: `${FLEET_SERVER_SERVERS_INDEX}/_search`, + method: 'GET', + }, + body: { + query: { + bool: { + filter: [ + { + term: { + 'host.name': fleetServerHostname, + }, + }, + ], + }, + }, + }, + }) + .then((response) => response.data) + .catch(catchAxiosErrorFormatAndThrow); + + return (fleetServerRecord.hits.total as estypes.SearchTotalHits).value === 1; + }, RETRYABLE_TRANSIENT_ERRORS); + + if (!found) { + // sleep and check again + await new Promise((r) => setTimeout(r, 2000)); + } + } + + if (!found) { + throw new Error( + `Timed out waiting for fleet server [${fleetServerHostname}] to register with Elasticsarch` + ); + } +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts index db3fe4b32f1e4..2a239ef372941 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts @@ -13,6 +13,8 @@ import type { GetAgentPoliciesRequest, GetAgentPoliciesResponse, GetAgentsResponse, + GetPackagePoliciesRequest, + GetPackagePoliciesResponse, } from '@kbn/fleet-plugin/common'; import { AGENT_API_ROUTES, @@ -20,6 +22,8 @@ import { agentRouteService, AGENTS_INDEX, API_VERSIONS, + APP_API_ROUTES, + PACKAGE_POLICY_API_ROUTES, } from '@kbn/fleet-plugin/common'; import { ToolingLog } from '@kbn/tooling-log'; import type { KbnClient } from '@kbn/test'; @@ -27,12 +31,15 @@ import type { GetFleetServerHostsResponse } from '@kbn/fleet-plugin/common/types import { enrollmentAPIKeyRouteService, fleetServerHostsRoutesService, + outputRoutesService, } from '@kbn/fleet-plugin/common/services'; import type { EnrollmentAPIKey, GetAgentsRequest, GetEnrollmentAPIKeysResponse, PostAgentUnenrollResponse, + GenerateServiceTokenResponse, + GetOutputsResponse, } from '@kbn/fleet-plugin/common/types'; import nodeFetch from 'node-fetch'; import semver from 'semver'; @@ -164,26 +171,29 @@ export const waitForHostToEnroll = async ( return found; }; -/** - * Returns the URL for the default Fleet Server connected to the stack - * @param kbnClient - */ -export const fetchFleetServerUrl = async (kbnClient: KbnClient): Promise => { - const fleetServerListResponse = await kbnClient +export const fetchFleetServerHostList = async ( + kbnClient: KbnClient +): Promise => { + return kbnClient .request({ method: 'GET', path: fleetServerHostsRoutesService.getListPath(), headers: { - 'elastic-api-version': API_VERSIONS.public.v1, - }, - query: { - perPage: 100, + 'elastic-api-version': '2023-10-31', }, }) - .catch(catchAxiosErrorFormatAndThrow) - .then((response) => response.data); + .then((response) => response.data) + .catch(catchAxiosErrorFormatAndThrow); +}; + +/** + * Returns the URL for the default Fleet Server connected to the stack + * @param kbnClient + */ +export const fetchFleetServerUrl = async (kbnClient: KbnClient): Promise => { + const fleetServerListResponse = await fetchFleetServerHostList(kbnClient); - // TODO:PT need to also pull in the Proxies and use that instead if defiend for url + // TODO:PT need to also pull in the Proxies and use that instead if defined for url? let url: string | undefined; @@ -246,8 +256,30 @@ export const fetchAgentPolicyList = async ( }, query: options, }) - .catch(catchAxiosErrorFormatAndThrow) - .then((response) => response.data); + .then((response) => response.data) + .catch(catchAxiosErrorFormatAndThrow); +}; + +/** + * Retrieves a list of Fleet Integration policies + * @param kbnClient + * @param options + */ +export const fetchIntegrationPolicyList = async ( + kbnClient: KbnClient, + options: GetPackagePoliciesRequest['query'] = {} +): Promise => { + return kbnClient + .request({ + method: 'GET', + path: PACKAGE_POLICY_API_ROUTES.LIST_PATTERN, + headers: { + 'elastic-api-version': '2023-10-31', + }, + query: options, + }) + .then((response) => response.data) + .catch(catchAxiosErrorFormatAndThrow); }; /** @@ -417,3 +449,52 @@ export const unEnrollFleetAgent = async ( return data; }; + +export const generateFleetServiceToken = async ( + kbnClient: KbnClient, + logger: ToolingLog +): Promise => { + logger.info(`Generating new Fleet Service Token`); + + const serviceToken: string = await kbnClient + .request({ + method: 'POST', + path: APP_API_ROUTES.GENERATE_SERVICE_TOKEN_PATTERN, + headers: { 'elastic-api-version': '2023-10-31' }, + body: {}, + }) + .then((response) => response.data.value) + .catch(catchAxiosErrorFormatAndThrow); + + logger.verbose(`New service token created: ${serviceToken}`); + + return serviceToken; +}; + +export const fetchFleetOutputs = async (kbnClient: KbnClient): Promise => { + return kbnClient + .request({ + method: 'GET', + path: outputRoutesService.getListPath(), + headers: { 'elastic-api-version': '2023-10-31' }, + }) + .then((response) => response.data) + .catch(catchAxiosErrorFormatAndThrow); +}; + +export const getFleetElasticsearchOutputHost = async (kbnClient: KbnClient): Promise => { + const outputs = await fetchFleetOutputs(kbnClient); + let host: string = ''; + + for (const output of outputs.items) { + if (output.type === 'elasticsearch') { + host = output?.hosts?.[0] ?? ''; + } + } + + if (!host) { + throw new Error(`An output for Elasticsearch was not found in Fleet settings`); + } + + return host; +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts index 9f75ee6d8a6ae..c21f93b6eba2d 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/network_services.ts @@ -7,7 +7,7 @@ import { networkInterfaces } from 'node:os'; -export const getBridgeNetworkHostIp = (): string => { +export const getLocalhostRealIp = (): string => { // reverse to get the last interface first for (const netInterfaceList of Object.values(networkInterfaces()).reverse()) { if (netInterfaceList) { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts index afc8941041128..3b6f3a5c90424 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts @@ -6,32 +6,75 @@ */ import type { Role } from '@kbn/security-plugin/common'; -import { getNoResponseActionsRole } from './without_response_actions_role'; export const getEndpointOperationsAnalyst: () => Omit = () => { - const noResponseActionsRole = getNoResponseActionsRole(); + // IMPORTANT + // This role is sync'ed with the role used for serverless and should not be changed + // unless the role for serverless has also been changed. + // This role is the default login for cypress tests as well (defend workloads team) return { - ...noResponseActionsRole, + elasticsearch: { + cluster: [], + indices: [ + { + names: [ + 'metrics-endpoint.metadata_current_*', + '.fleet-agents*', + '.fleet-actions*', + 'apm-*-transaction*', + 'traces-apm*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', + '.lists*', + '.items*', + ], + privileges: ['read'], + }, + { + names: [ + 'names:', + '.alerts-security*', + '.siem-signals-*', + '.preview.alerts-security*', + '.internal.preview.alerts-security*', + ], + privileges: ['read', 'write'], + }, + ], + run_as: [], + }, kibana: [ { - ...noResponseActionsRole.kibana[0], + base: [], feature: { - ...noResponseActionsRole.kibana[0].feature, + ml: ['read'], + actions: ['all'], + fleet: ['all'], + fleetv2: ['all'], + osquery: ['all'], + securitySolutionCases: ['all'], + builtinAlerts: ['all'], siem: [ - 'minimal_all', - + 'all', + 'read_alerts', 'policy_management_all', - + 'endpoint_list_all', 'trusted_applications_all', 'event_filters_all', 'host_isolation_exceptions_all', 'blocklist_all', - 'host_isolation_all', 'process_operations_all', 'actions_log_management_all', + 'file_operations_all', + 'execute_operations_all', ], }, + spaces: ['*'], }, ], }; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts index 39dc4ffb06896..8bc4ca071cf6a 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts @@ -18,7 +18,7 @@ import fs from 'fs'; import { CA_CERT_PATH } from '@kbn/dev-utils'; import { catchAxiosErrorFormatAndThrow } from './format_axios_error'; import { isLocalhost } from './is_localhost'; -import { getBridgeNetworkHostIp } from './network_services'; +import { getLocalhostRealIp } from './network_services'; import { createSecuritySuperuser } from './security_user_services'; const CA_CERTIFICATE: Buffer = fs.readFileSync(CA_CERT_PATH); @@ -116,18 +116,16 @@ export const createRuntimeServices = async ({ let password = _password; if (asSuperuser) { - await waitForKibana( - createKbnClient({ log, url: kibanaUrl, username, password, apiKey, noCertForSsl }) - ); - const tmpEsClient = createEsClient({ - url: elasticsearchUrl, + const tmpKbnClient = createKbnClient({ + url: kibanaUrl, username, password, - log, noCertForSsl, + log, }); - const isServerlessEs = (await tmpEsClient.info()).version.build_flavor === 'serverless'; + await waitForKibana(tmpKbnClient); + const isServerlessEs = await isServerlessKibanaFlavor(tmpKbnClient); if (isServerlessEs) { log?.warning( @@ -138,7 +136,15 @@ export const createRuntimeServices = async ({ username = 'system_indices_superuser'; password = 'changeme'; } else { - const superuserResponse = await createSecuritySuperuser(tmpEsClient); + const superuserResponse = await createSecuritySuperuser( + createEsClient({ + url: elasticsearchUrl, + username: esUsername ?? username, + password: esPassword ?? password, + log, + noCertForSsl, + }) + ); ({ username, password } = superuserResponse); @@ -163,7 +169,7 @@ export const createRuntimeServices = async ({ noCertForSsl, }), log, - localhostRealIp: getBridgeNetworkHostIp(), + localhostRealIp: getLocalhostRealIp(), apiKey: apiKey ?? '', user: { username, @@ -296,13 +302,7 @@ export const fetchStackVersion = async (kbnClient: KbnClient): Promise = }; export const fetchKibanaStatus = async (kbnClient: KbnClient): Promise => { - return kbnClient - .request({ - method: 'GET', - path: '/api/status', - }) - .catch(catchAxiosErrorFormatAndThrow) - .then((response) => response.data); + return (await kbnClient.status.get().catch(catchAxiosErrorFormatAndThrow)) as StatusResponse; }; /** @@ -312,10 +312,12 @@ export const fetchKibanaStatus = async (kbnClient: KbnClient): Promise => { await pRetry( async () => { - try { - await kbnClient.status.get(); - } catch (err) { - throw new Error(`Kibana not available: ${err.message}`); + const response = await kbnClient.status.get(); + + if (response.status.overall.level !== 'available') { + throw new Error( + `Kibana not available. [status.overall.level: ${response.status.overall.level}]` + ); } }, { maxTimeout: 10000 } diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts index ae2464487cb75..ec13f2f6ff1b1 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts @@ -20,11 +20,11 @@ import type { } from '@kbn/fleet-plugin/common'; import { AGENT_POLICY_API_ROUTES, + API_VERSIONS, + APP_API_ROUTES, FLEET_SERVER_PACKAGE, PACKAGE_POLICY_API_ROUTES, PACKAGE_POLICY_SAVED_OBJECT_TYPE, - API_VERSIONS, - APP_API_ROUTES, } from '@kbn/fleet-plugin/common'; import type { FleetServerHost, @@ -43,8 +43,8 @@ import type { PostFleetServerHostsResponse, } from '@kbn/fleet-plugin/common/types/rest_spec/fleet_server_hosts'; import chalk from 'chalk'; -import { resolve } from 'path'; -import { SERVERLESS_NODES, verifyDockerInstalled, maybeCreateDockerNetwork } from '@kbn/es'; +import { maybeCreateDockerNetwork, SERVERLESS_NODES, verifyDockerInstalled } from '@kbn/es'; +import { FLEET_SERVER_CUSTOM_CONFIG } from '../common/fleet_server/fleet_server_services'; import { isServerlessKibanaFlavor } from '../common/stack_services'; import type { FormattedAxiosError } from '../common/format_axios_error'; import { catchAxiosErrorFormatAndThrow } from '../common/format_axios_error'; @@ -53,8 +53,6 @@ import { dump } from './utils'; import { fetchFleetServerUrl, waitForHostToEnroll } from '../common/fleet_services'; import { getRuntimeServices } from './runtime'; -const FLEET_SERVER_CUSTOM_CONFIG = resolve(__dirname, './fleet_server.yml'); - export const runFleetServerIfNeeded = async (): Promise< { fleetServerContainerId: string; fleetServerAgentPolicyId: string | undefined } | undefined > => { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/fleet_server/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/fleet_server/index.ts new file mode 100644 index 0000000000000..5f96d946a85eb --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/fleet_server/index.ts @@ -0,0 +1,83 @@ +/* + * Copyright 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 { RunContext } from '@kbn/dev-cli-runner'; +import { run } from '@kbn/dev-cli-runner'; +import { createRuntimeServices } from '../common/stack_services'; +import { startFleetServer } from '../common/fleet_server/fleet_server_services'; + +export const cli = async () => { + return run( + async (cliContext: RunContext) => { + const username = cliContext.flags.username as string; + const password = cliContext.flags.password as string; + const kibanaUrl = cliContext.flags.kibanaUrl as string; + const elasticUrl = cliContext.flags.elasticUrl as string; + const version = cliContext.flags.version as string; + const policy = cliContext.flags.policy as string; + const port = cliContext.flags.port as unknown as number; + const force = cliContext.flags.force as boolean; + const log = cliContext.log; + + const { kbnClient, log: logger } = await createRuntimeServices({ + kibanaUrl, + elasticsearchUrl: elasticUrl, + username, + password, + log, + }); + + const runningServer = await startFleetServer({ + kbnClient, + logger, + policy, + port, + version, + force, + }); + + log.info(`\n\n${runningServer.info}`); + }, + { + description: 'Start fleet-server locally and connect it to Kibana/ES', + flags: { + string: ['kibanaUrl', 'elasticUrl', 'username', 'password', 'version', 'policy'], + boolean: ['force'], + default: { + kibanaUrl: 'http://127.0.0.1:5601', + elasticUrl: 'http://127.0.0.1:9200', + username: 'elastic', + password: 'changeme', + version: '', + policy: '', + force: false, + port: 8220, + }, + help: ` + --version Optional. The Agent version to be used when installing fleet server. + Default: uses the same version as the stack (kibana). Version + can also be from 'SNAPSHOT'. + NOTE: this value will be specifically set to 'latest' when ran against + kibana in serverless mode. + Examples: 8.6.0, 8.7.0-SNAPSHOT + --policy Optional. The UUID of the agent policy that should be used to enroll + fleet-server with Kibana/ES (Default: uses existing (if found) or + creates a new one) + --force Optional. If true, then fleet-server will be started and connected to + kibana even if one seems to already be configured. + --port Optional. The port number where fleet-server will listen for requests. + (Default: 8220) + --username Optional. User name to be used for auth against elasticsearch and + kibana (Default: elastic). + --password Optional. Password associated with the username (Default: changeme) + --kibanaUrl Optional. The url to Kibana (Default: http://127.0.0.1:5601) + --elasticUrl Optional. The url to Elasticsearch (Default: http://127.0.0.1:9200) +`, + }, + } + ); +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/start_fleet_server.js b/x-pack/plugins/security_solution/scripts/endpoint/start_fleet_server.js new file mode 100644 index 0000000000000..d83c8a350f9e9 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/start_fleet_server.js @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +require('../../../../../src/setup_node_env'); +require('./fleet_server').cli(); diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts b/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts index 0a620fc1715ad..cc3972cba0b2f 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/get_ftr_config.ts @@ -9,7 +9,7 @@ import _ from 'lodash'; import { EsVersion, readConfigFile } from '@kbn/test'; import type { ToolingLog } from '@kbn/tooling-log'; import { CA_TRUSTED_FINGERPRINT } from '@kbn/dev-utils'; -import { getBridgeNetworkHostIp } from '../endpoint/common/network_services'; +import { getLocalhostRealIp } from '../endpoint/common/network_services'; import type { parseTestFileConfig } from './utils'; export const getFTRConfig = ({ @@ -58,7 +58,7 @@ export const getFTRConfig = ({ // }, }, (vars) => { - const hostRealIp = getBridgeNetworkHostIp(); + const hostRealIp = getLocalhostRealIp(); const hasFleetServerArgs = _.some( vars.kbnTestServer.serverArgs, diff --git a/x-pack/test/defend_workflows_cypress/config.ts b/x-pack/test/defend_workflows_cypress/config.ts index fc49ad2b3d7ad..bc771a8790e38 100644 --- a/x-pack/test/defend_workflows_cypress/config.ts +++ b/x-pack/test/defend_workflows_cypress/config.ts @@ -7,7 +7,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { CA_CERT_PATH } from '@kbn/dev-utils'; -import { getBridgeNetworkHostIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; +import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; import { services } from './services'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { @@ -18,7 +18,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('../functional/config.base.js') ); - const hostIp = getBridgeNetworkHostIp(); + const hostIp = getLocalhostRealIp(); return { ...kibanaCommonTestsConfig.getAll(), diff --git a/x-pack/test/defend_workflows_cypress/serverless_config.ts b/x-pack/test/defend_workflows_cypress/serverless_config.ts index 3063ab6d91876..b3b01d69c4331 100644 --- a/x-pack/test/defend_workflows_cypress/serverless_config.ts +++ b/x-pack/test/defend_workflows_cypress/serverless_config.ts @@ -5,10 +5,11 @@ * 2.0. */ -import { getBridgeNetworkHostIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; +import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/network_services'; import { FtrConfigProviderContext } from '@kbn/test'; import { ExperimentalFeatures } from '@kbn/security-solution-plugin/common/experimental_features'; +import { ES_RESOURCES } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/serverless'; import { DefendWorkflowsCypressCliTestRunner } from './runner'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { @@ -18,7 +19,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ) ); const config = defendWorkflowsCypressConfig.getAll(); - const hostIp = getBridgeNetworkHostIp(); + const hostIp = getLocalhostRealIp(); const enabledFeatureFlags: Array = []; @@ -29,7 +30,10 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...config.esTestCluster, serverArgs: [...config.esTestCluster.serverArgs, 'http.host=0.0.0.0'], }, - + esServerlessOptions: { + ...(config.esServerlessOptions ?? {}), + resources: Object.values(ES_RESOURCES), + }, servers: { ...config.servers, fleetserver: { diff --git a/x-pack/test_serverless/functional/test_suites/security/cypress/security_config.ts b/x-pack/test_serverless/functional/test_suites/security/cypress/security_config.ts index ad5267de51bb5..e9b8a16c0b9c7 100644 --- a/x-pack/test_serverless/functional/test_suites/security/cypress/security_config.ts +++ b/x-pack/test_serverless/functional/test_suites/security/cypress/security_config.ts @@ -7,6 +7,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; +import { ES_RESOURCES } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/serverless'; import type { FtrProviderContext } from './runner'; import { SecuritySolutionCypressTestRunner } from './runner'; @@ -18,6 +19,13 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { return { ...securitySolutionCypressConfig.getAll(), + esServerlessOptions: { + ...(securitySolutionCypressConfig.has('esServerlessOptions') + ? securitySolutionCypressConfig.get('esServerlessOptions') ?? {} + : {}), + resources: Object.values(ES_RESOURCES), + }, + testRunner: (context: FtrProviderContext) => SecuritySolutionCypressTestRunner(context), }; } From cce24cac64f6c84816cd22b3bd7bcc8deac220f5 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 20:10:05 +0100 Subject: [PATCH 097/170] chore(NA): bump version to 8.12.0 (#168023) Usually bump from 8.11.0 to 8.12.0 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 2 +- x-pack/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2e4879ada648a..b46f28b82b3af 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dashboarding" ], "private": true, - "version": "8.11.0", + "version": "8.12.0", "branch": "main", "types": "./kibana.d.ts", "tsdocMetadata": "./build/tsdoc-metadata.json", diff --git a/x-pack/package.json b/x-pack/package.json index 8dc314122d957..66a2b81da7dd2 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -1,6 +1,6 @@ { "name": "x-pack", - "version": "8.11.0", + "version": "8.12.0", "author": "Elastic", "private": true, "license": "Elastic-License", From e3cbcd46e75ed8661aa2259fed3f7dab3b6da36d Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 20:10:22 +0100 Subject: [PATCH 098/170] chore(NA): update versions after v8.12.0 bump (#168024) This PR is a simple update of our versions file after the recent bumps. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- versions.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/versions.json b/versions.json index c1f94aa9f8e37..183bd9a9163fe 100644 --- a/versions.json +++ b/versions.json @@ -2,11 +2,17 @@ "notice": "This file is not maintained outside of the main branch and should only be used for tooling.", "versions": [ { - "version": "8.11.0", + "version": "8.12.0", "branch": "main", "currentMajor": true, "currentMinor": true }, + { + "version": "8.11.0", + "branch": "8.11", + "currentMajor": true, + "previousMinor": true + }, { "version": "8.10.3", "branch": "8.10", From 5042e84e5722715ce78737bd53aff44d9dbefeca Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 20:10:33 +0100 Subject: [PATCH 099/170] chore(NA): adds 8.11 into backportrc (#168025) It adds 8.11 into the .backportrc config file --- .backportrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.backportrc.json b/.backportrc.json index e4b7db154d711..ea135907bd807 100644 --- a/.backportrc.json +++ b/.backportrc.json @@ -3,6 +3,7 @@ "repoName": "kibana", "targetBranchChoices": [ "main", + "8.11", "8.10", "8.9", "8.8", @@ -47,7 +48,7 @@ "backport" ], "branchLabelMapping": { - "^v8.11.0$": "main", + "^v8.12.0$": "main", "^v(\\d+).(\\d+).\\d+$": "$1.$2" }, "autoMerge": true, From c9f29f2719c6b1dbeebb56e6755f0f71bc44e21a Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Oct 2023 20:13:43 +0100 Subject: [PATCH 100/170] fix(NA): typo on describe skip --- .../public/timelines/components/flyout/pane/index.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx index 04a2b854f4e91..4f8d311ad75ed 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.test.tsx @@ -39,7 +39,7 @@ jest.mock('../../../../common/hooks/use_resolve_conflict', () => { }); // FLAKY: https://github.com/elastic/kibana/issues/168026 -describ.skip('Pane', () => { +describe.skip('Pane', () => { test('renders with display block by default', async () => { const EmptyComponent = render( From 5bd9b9dac6ae26bff6739a7e3a3d91bab0ae1e7d Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 4 Oct 2023 22:30:35 +0300 Subject: [PATCH 101/170] [Lens] Fixes clickable timepicker in dashboards when inline editing is on (#168018) ## Summary Closes https://github.com/elastic/kibana/issues/168014 ![inline_editing](https://github.com/elastic/kibana/assets/17003240/86b9c3d5-d592-4027-920f-2f1f71f6b10e) --- .../lens/public/trigger_actions/open_lens_config/helpers.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss index 49a6908292e00..56cfe41c4b889 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.scss @@ -5,7 +5,7 @@ padding-left: $euiFormMaxWidth; margin-left: -$euiFormMaxWidth; pointer-events: none; - > * { + .euiFlyoutFooter { pointer-events: auto; } } From 038ac89c1c396bb4bb3357e0ad4996b23d251ad4 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:32:03 -0700 Subject: [PATCH 102/170] Upgrade EUI to v88.5.4 (#167555) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v88.5.0`⏩`v88.5.4` This EUI upgrade helps unblock the Shared UX team with some beta serverless nav updates not listed in the below changelog (https://github.com/elastic/eui/pull/7228 and https://github.com/elastic/eui/pull/7248). --- ## [`88.5.4`](https://github.com/elastic/eui/tree/v88.5.4) - This release contains internal changes to a beta component needed by Kibana. ## [`88.5.3`](https://github.com/elastic/eui/tree/v88.5.3) **Bug fixes** - Fixed `EuiComboBox` search input width not resetting correctly on selection ([#7240](https://github.com/elastic/eui/pull/7240)) ## [`88.5.2`](https://github.com/elastic/eui/tree/v88.5.2) **Bug fixes** - Fixed broken `EuiTextTruncate` testenv mocks ([#7234](https://github.com/elastic/eui/pull/7234)) ## [`88.5.1`](https://github.com/elastic/eui/tree/v88.5.1) - Improved the performance of `EuiComboBox` by removing the `react-autosizer-input` dependency ([#7215](https://github.com/elastic/eui/pull/7215)) **Dependency updates** - Updated `react-element-to-jsx-string` to v5.0.0 ([#7214](https://github.com/elastic/eui/pull/7214)) - Removed unused `@types/vfile-message` dependency ([#7214](https://github.com/elastic/eui/pull/7214)) --- package.json | 2 +- .../__snapshots__/index.test.tsx.snap | 240 +++++++----------- .../src/field/__tests__/index.test.tsx | 4 +- .../ui/components/navigation_section_ui.tsx | 28 +- .../src/ui/components/navigation_ui.tsx | 10 +- src/dev/license_checker/config.ts | 2 +- .../connectors/jira/case_fields.test.tsx | 10 +- .../use_combo_box_reset/index.test.tsx | 3 +- .../chart_panels/index.test.tsx | 6 +- .../rule_creation/indicator_match_rule.cy.ts | 10 +- yarn.lock | 48 ++-- 11 files changed, 163 insertions(+), 200 deletions(-) diff --git a/package.json b/package.json index b46f28b82b3af..5df7c8919a278 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "88.5.0", + "@elastic/eui": "88.5.4", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap index 5225cbc31debf..9fefe47c379bb 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap +++ b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap @@ -30,25 +30,18 @@ Object { machine.os.raw -
    -
    -
    @@ -297,26 +276,19 @@ Object { machine.os.raw -
    @@ -406,25 +378,18 @@ Object { machine.os.raw -
    -
    -
    -
    { ); const fieldAutocompleteComboBox = wrapper.getByTestId('comboBoxSearchInput'); fireEvent.change(fieldAutocompleteComboBox, { target: { value: '_source' } }); - await waitFor(() => - expect(wrapper.getByTestId('fieldAutocompleteComboBox')).toHaveTextContent('_source') - ); + expect(fieldAutocompleteComboBox).toHaveValue('_source'); }); it('it allows custom user input if "acceptsCustomOptions" is "true"', async () => { diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx index 1f60ade15930b..2d31154ddf2e3 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx @@ -11,7 +11,8 @@ import React, { FC, useEffect, useState } from 'react'; import { EuiCollapsibleNavItem, EuiCollapsibleNavItemProps, - EuiCollapsibleNavSubItemGroupTitle, + EuiCollapsibleNavSubItemProps, + EuiTitle, } from '@elastic/eui'; import { ChromeProjectNavigationNode } from '@kbn/core-chrome-browser'; import classnames from 'classnames'; @@ -22,7 +23,7 @@ import { isAbsoluteLink } from '../../utils'; const navigationNodeToEuiItem = ( item: ChromeProjectNavigationNode, { navigateToUrl, basePath }: { navigateToUrl: NavigateToUrlFn; basePath: BasePathService } -): EuiCollapsibleNavSubItemGroupTitle | EuiCollapsibleNavItemProps => { +): EuiCollapsibleNavSubItemProps => { const href = item.deepLink?.url ?? item.href; const id = item.path ? item.path.join('.') : item.id; const isExternal = Boolean(href) && isAbsoluteLink(href!); @@ -33,9 +34,30 @@ const navigationNodeToEuiItem = ( [`nav-item-isActive`]: isSelected, }); + // Note: this can be replaced with an `isGroup` API or whatever you prefer + // Could also probably be pulled out to a separate component vs inlined + if (item.isGroupTitle) { + return { + renderItem: () => ( + ({ + marginTop: euiTheme.size.base, + paddingBlock: euiTheme.size.xs, + paddingInline: euiTheme.size.s, + })} + > +
    + {item.title} +
    +
    + ), + }; + } + return { id, - isGroupTitle: item.isGroupTitle, title: item.title, isSelected, accordionProps: { diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_ui.tsx index 113bfc0add6d6..039823daa9a17 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_ui.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_ui.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { EuiFlyoutBody, EuiFlyoutFooter } from '@elastic/eui'; +import { EuiCollapsibleNavBeta } from '@elastic/eui'; import React, { FC } from 'react'; interface Props { @@ -22,10 +22,12 @@ export const NavigationUI: FC = ({ children, unstyled, footerChildren, da <>{children} ) : ( <> - + {children} - - {footerChildren && {footerChildren}} + + {footerChildren && ( + {footerChildren} + )} )} diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 7efffb58d3073..e5ee6fbf76735 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.4.0': ['Elastic License 2.0'], - '@elastic/eui@88.5.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@88.5.4': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary }; diff --git a/x-pack/plugins/cases/public/components/connectors/jira/case_fields.test.tsx b/x-pack/plugins/cases/public/components/connectors/jira/case_fields.test.tsx index b03bb35d895b1..c35252f81b12d 100644 --- a/x-pack/plugins/cases/public/components/connectors/jira/case_fields.test.tsx +++ b/x-pack/plugins/cases/public/components/connectors/jira/case_fields.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { omit } from 'lodash/fp'; -import { waitFor, screen, fireEvent, act, within } from '@testing-library/react'; +import { waitFor, screen, fireEvent, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { connector, issues } from '../mock'; @@ -132,13 +132,11 @@ describe('Jira Fields', () => { ); + const input = screen.getByTestId('comboBoxSearchInput'); - await act(async () => { - const event = { target: { value: 'parentId' } }; - fireEvent.change(screen.getByTestId('comboBoxSearchInput'), event); - }); + fireEvent.change(input, { target: { value: 'parentId' } }); - expect(screen.getByText('parentId')).toBeInTheDocument(); + expect(input).toHaveValue('parentId'); }); it('searches parent correctly', async () => { diff --git a/x-pack/plugins/security_solution/public/common/components/use_combo_box_reset/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/use_combo_box_reset/index.test.tsx index c1c4328290054..e9082e2ca72a9 100644 --- a/x-pack/plugins/security_solution/public/common/components/use_combo_box_reset/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/use_combo_box_reset/index.test.tsx @@ -73,7 +73,8 @@ describe('useEuiComboBoxReset', () => { fireEvent.change(searchInput, { target: { value: invalidValue } }); const afterInvalidInput = screen.getByTestId('comboBoxInput'); - expect(afterInvalidInput).toHaveTextContent(invalidValue); // the EuiComboBox is now in the "error state" + expect(searchInput).toHaveValue(invalidValue); // the EuiComboBox is now in the "error state" + expect(afterInvalidInput).not.toHaveTextContent(invalidValue); // Value should not have been applied const resetButton = screen.getByRole('button', { name: 'Reset' }); fireEvent.click(resetButton); // clicking invokes onReset() diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/chart_panels/index.test.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/chart_panels/index.test.tsx index 8baf8d8f59fa4..07f07df47d888 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/chart_panels/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/chart_panels/index.test.tsx @@ -253,7 +253,8 @@ describe('ChartPanels', () => { fireEvent.change(searchInput, { target: { value: invalidValue } }); const afterInvalidInput = screen.getAllByTestId('comboBoxInput')[0]; - expect(afterInvalidInput).toHaveTextContent(invalidValue); // the 'Group by' EuiComboBox is now in the "error state" + expect(searchInput).toHaveValue(invalidValue); // the 'Group by' EuiComboBox is now in the "error state" + expect(afterInvalidInput).not.toHaveTextContent(invalidValue); // Value should not have been applied resetGroupByFields(); // invoke the `Reset group by fields` context menu action @@ -292,7 +293,8 @@ describe('ChartPanels', () => { fireEvent.change(searchInput, { target: { value: invalidValue } }); const afterInvalidInput = screen.getAllByTestId('comboBoxInput')[1]; - expect(afterInvalidInput).toHaveTextContent(invalidValue); // the 'Group by top' EuiComboBox is now in the "error state" + expect(searchInput).toHaveValue(invalidValue); // the 'Group by top' EuiComboBox is now in the "error state" + expect(afterInvalidInput).not.toHaveTextContent(invalidValue); // Value should not have been applied resetGroupByFields(); // invoke the `Reset group by fields` context menu action diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts index 0d1466a755185..8a0e74c2987ee 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation/indicator_match_rule.cy.ts @@ -286,7 +286,7 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@brokenInServerless validColumns: 'indicatorField', }); getIndicatorDeleteButton().click(); - getIndicatorIndexComboField().should('have.text', 'agent.name'); + getIndicatorIndexComboField().find('input').should('have.value', 'agent.name'); getIndicatorMappingComboField().should( 'have.text', getNewThreatIndicatorRule().threat_mapping[0].entries[0].value @@ -309,7 +309,9 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@brokenInServerless validColumns: 'indexField', }); getIndicatorDeleteButton().click(); - getIndicatorMappingComboField().should('have.text', 'second-non-existent-value'); + getIndicatorMappingComboField() + .find('input') + .should('have.value', 'second-non-existent-value'); getIndicatorIndexComboField(2).should('not.exist'); getIndicatorMappingComboField(2).should('not.exist'); }); @@ -328,7 +330,9 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@brokenInServerless validColumns: 'indicatorField', }); getIndicatorDeleteButton().click(); - getIndicatorIndexComboField().should('have.text', 'second-non-existent-value'); + getIndicatorIndexComboField() + .find('input') + .should('have.value', 'second-non-existent-value'); getIndicatorIndexComboField(2).should('not.exist'); getIndicatorMappingComboField(2).should('not.exist'); }); diff --git a/yarn.lock b/yarn.lock index 9fc330c952c43..7069092bc0cb1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1603,19 +1603,17 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@88.5.0": - version "88.5.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-88.5.0.tgz#7d5c6f41e322479e6ea81e232a9c9c274a093de3" - integrity sha512-TFBr7T9qnbuk3gCgoZjX9Y37Byu4Cp3KVkmT0VeCTYBEwFkxKNzIRIhdLbZFzTsxCc3rssLqaE3d1qstqh3GtA== +"@elastic/eui@88.5.4": + version "88.5.4" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-88.5.4.tgz#7bfb1b0f9b49d745d98cfd3a912784b7f25626bd" + integrity sha512-1aq//kTcwuyXeH48kgG91i+4qlzreZUaLfpfQ0Lxcfq09fmJYqNjJLFnCE8f5zj1vIiEEdINywkr4Bk64VIoVQ== dependencies: "@hello-pangea/dnd" "^16.3.0" "@types/lodash" "^4.14.198" "@types/numeral" "^2.0.2" - "@types/react-input-autosize" "^2.2.1" "@types/react-window" "^1.8.5" "@types/refractor" "^3.0.2" "@types/resize-observer-browser" "^0.1.7" - "@types/vfile-message" "^2.0.0" chroma-js "^2.4.2" classnames "^2.3.2" lodash "^4.17.21" @@ -1623,9 +1621,8 @@ numeral "^2.0.6" prop-types "^15.6.0" react-dropzone "^11.7.1" - react-element-to-jsx-string "^14.3.4" + react-element-to-jsx-string "^15.0.0" react-focus-on "^3.9.1" - react-input-autosize "^3.0.0" react-is "^17.0.2" react-remove-scroll-bar "^2.3.4" react-virtualized-auto-sizer "^1.0.20" @@ -9647,13 +9644,6 @@ dependencies: "@types/react" "*" -"@types/react-input-autosize@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@types/react-input-autosize/-/react-input-autosize-2.2.1.tgz#6a335212e7fce1e1a4da56ae2095c8c5c35fbfe6" - integrity sha512-RxzEjd4gbLAAdLQ92Q68/AC+TfsAKTc4evsArUH1aIShIMqQMIMjsxoSnwyjtbFTO/AGIW/RQI94XSdvOxCz/w== - dependencies: - "@types/react" "*" - "@types/react-intl@^2.3.15": version "2.3.17" resolved "https://registry.yarnpkg.com/@types/react-intl/-/react-intl-2.3.17.tgz#e1fc6e46e8af58bdef9531259d509380a8a99e8e" @@ -10027,13 +10017,6 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== -"@types/vfile-message@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" - integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== - dependencies: - vfile-message "*" - "@types/vinyl-fs@*", "@types/vinyl-fs@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-3.0.2.tgz#cbaef5160ad7695483af0aa1b4fe67f166c18feb" @@ -25562,6 +25545,15 @@ react-element-to-jsx-string@^14.3.4: is-plain-object "5.0.0" react-is "17.0.2" +react-element-to-jsx-string@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz#1cafd5b6ad41946ffc8755e254da3fc752a01ac6" + integrity sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ== + dependencies: + "@base2/pretty-print-object" "1.0.1" + is-plain-object "5.0.0" + react-is "18.1.0" + react-error-boundary@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.1.tgz#932c5ca5cbab8ec4fe37fd7b415aa5c3a47597e7" @@ -25652,16 +25644,16 @@ react-is@17.0.2, react-is@^17.0.0, react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@18.1.0, "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" + integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== + react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" - integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== - react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -30576,7 +30568,7 @@ vfile-location@^3.0.0: resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3" integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ== -vfile-message@*, vfile-message@^2.0.0: +vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== From ffb60a1fee2c10fbb78b6c9be3301c475e9be1d8 Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Wed, 4 Oct 2023 21:52:46 +0200 Subject: [PATCH 103/170] [EDR Workflows] Use internal user to fetch automated actions and results (#167989) --- .../endpoint/response_actions/types.ts | 3 +- .../server/search_strategy/endpoint/index.ts | 36 +++++++++---------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/security_solution/common/search_strategy/endpoint/response_actions/types.ts b/x-pack/plugins/security_solution/common/search_strategy/endpoint/response_actions/types.ts index b7b5ca63a0b75..ae9de843f4dac 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/endpoint/response_actions/types.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/endpoint/response_actions/types.ts @@ -17,8 +17,7 @@ export enum SortOrder { } export interface RequestBasicOptions extends IEsSearchRequest { - factoryQueryType?: ResponseActionsQueries; - aggregations?: Record; + factoryQueryType: ResponseActionsQueries; } export type ResponseActionsSearchHit = estypes.SearchHit< diff --git a/x-pack/plugins/security_solution/server/search_strategy/endpoint/index.ts b/x-pack/plugins/security_solution/server/search_strategy/endpoint/index.ts index 9638c44ee1775..ef7f6e6ae0dfa 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/endpoint/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/endpoint/index.ts @@ -8,7 +8,6 @@ import { map, mergeMap } from 'rxjs/operators'; import type { ISearchStrategy, PluginStart } from '@kbn/data-plugin/server'; import { shimHitsTotal } from '@kbn/data-plugin/server'; -import { ENHANCED_ES_SEARCH_STRATEGY } from '@kbn/data-plugin/common'; import { from } from 'rxjs'; import type { EndpointStrategyParseResponseType, @@ -21,38 +20,35 @@ import type { EndpointFactory } from './factory/types'; import type { EndpointAppContext } from '../../endpoint/types'; import { endpointFactory } from './factory'; -function isObj(req: unknown): req is Record { - return typeof req === 'object' && req !== null; -} - -function assertValidRequestType( - req: unknown -): asserts req is EndpointStrategyRequestType & { factoryQueryType: EndpointFactoryQueryTypes } { - if (!isObj(req) || req.factoryQueryType == null) { - throw new Error('factoryQueryType is required'); - } -} - export const endpointSearchStrategyProvider = ( data: PluginStart, endpointContext: EndpointAppContext ): ISearchStrategy, EndpointStrategyResponseType> => { - const es = data.search.getSearchStrategy( - ENHANCED_ES_SEARCH_STRATEGY - ) as unknown as ISearchStrategy< + const es = data.search.searchAsInternalUser as unknown as ISearchStrategy< EndpointStrategyRequestType, EndpointStrategyParseResponseType >; return { search: (request, options, deps) => { - assertValidRequestType(request); - + if (request.factoryQueryType == null) { + throw new Error('factoryQueryType is required'); + } return from(endpointContext.service.getEndpointAuthz(deps.request)).pipe( mergeMap((authz) => { const queryFactory: EndpointFactory = endpointFactory[request.factoryQueryType]; - const dsl = queryFactory.buildDsl(request, { authz }); - return es.search({ ...request, params: dsl }, options, deps).pipe( + const strictRequest = { + factoryQueryType: request.factoryQueryType, + sort: request.sort, + ...('alertIds' in request ? { alertIds: request.alertIds } : {}), + ...('agentId' in request ? { agentId: request.agentId } : {}), + ...('expiration' in request ? { expiration: request.expiration } : {}), + ...('actionId' in request ? { actionId: request.actionId } : {}), + ...('agents' in request ? { agents: request.agents } : {}), + } as EndpointStrategyRequestType; + const dsl = queryFactory.buildDsl(strictRequest, { authz }); + + return es.search({ ...strictRequest, params: dsl }, options, deps).pipe( map((response) => { return { ...response, From 0f1a6e397ce5534ebef5be616ee41090a25cf115 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Wed, 4 Oct 2023 13:33:03 -0700 Subject: [PATCH 104/170] [Lens] Add serverless functional tests (#164798) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR copies, with limited modifications, functional test suites from `test/functional` and `x-pack/test/functional` ## Lens Smoke tests - [x] Smokescreen tests (x-pack/test/functional/apps/lens/group1/smokescreen.ts) - [x] Basic vega tests (test/functional/apps/visualize/group6/_vega_chart.ts) - [x] Sanity checks for TSDB functionality in Lens x-pack/test/functional/apps/lens/group4/tsdb.ts ## Convert to Lens These tests outside of serverless, assume the following vis types are accessible via the **Visualize editor**, however all the following types are designated **readonly** in serverless and thus the fn tests fail. In place of these tests I created the identical visualizations, added them to a dashboard and exported the SOs. These dashboard and dependent visualizations are loaded in each respective test, and the assertions are run on the `Convert to Lens` option from the dashboard. All assertions are mostly unchanged or achieve the same effect. - ✅ Agg based - `x-pack/test/functional/apps/lens/open_in_lens/agg_based` - ✅ TSVB - `x-pack/test/functional/apps/lens/open_in_lens/tsvb` - ❌ Dashboard - `x-pack/test/functional/apps/lens/open_in_lens/dashboard/config.ts` - Not applicable to serverless env and/or duplicate of other tests. Closes #162346 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Stratoula Kalafateli --- .buildkite/ftr_configs.yml | 3 + .github/CODEOWNERS | 2 + .../functional/page_objects/dashboard_page.ts | 2 +- .../functional/page_objects/visualize_page.ts | 2 +- .../services/common/test_subjects.ts | 2 +- .../services/dashboard/panel_actions.ts | 18 +- test/functional/services/listing_table.ts | 2 - .../apps/lens/open_in_lens/agg_based/gauge.ts | 6 +- .../apps/lens/open_in_lens/agg_based/goal.ts | 8 +- .../lens/open_in_lens/agg_based/heatmap.ts | 8 +- .../lens/open_in_lens/agg_based/metric.ts | 8 +- .../lens/open_in_lens/agg_based/navigation.ts | 6 +- .../apps/lens/open_in_lens/agg_based/pie.ts | 8 +- .../apps/lens/open_in_lens/agg_based/table.ts | 12 +- .../apps/lens/open_in_lens/agg_based/xy.ts | 24 +- .../apps/lens/open_in_lens/tsvb/dashboard.ts | 7 +- .../apps/lens/open_in_lens/tsvb/gauge.ts | 10 +- .../apps/lens/open_in_lens/tsvb/metric.ts | 12 +- .../apps/lens/open_in_lens/tsvb/table.ts | 12 +- .../apps/lens/open_in_lens/tsvb/timeseries.ts | 20 +- .../apps/lens/open_in_lens/tsvb/top_n.ts | 20 +- .../test/functional/page_objects/lens_page.ts | 9 + .../lens/open_in_lens/agg_based/gauge.json | 212 ++++ .../lens/open_in_lens/agg_based/goal.json | 250 +++++ .../lens/open_in_lens/agg_based/heatmap.json | 250 +++++ .../lens/open_in_lens/agg_based/metric.json | 253 +++++ .../open_in_lens/agg_based/navigation.json | 0 .../lens/open_in_lens/agg_based/pie.json | 294 ++++++ .../lens/open_in_lens/agg_based/table.json | 326 ++++++ .../lens/open_in_lens/agg_based/xy.json | 706 +++++++++++++ .../lens/open_in_lens/tsvb/dashboard.json | 80 ++ .../lens/open_in_lens/tsvb/gauge.json | 326 ++++++ .../lens/open_in_lens/tsvb/metric.json | 364 +++++++ .../lens/open_in_lens/tsvb/table.json | 554 ++++++++++ .../lens/open_in_lens/tsvb/timeseries.json | 521 ++++++++++ .../lens/open_in_lens/tsvb/top_n.json | 559 ++++++++++ .../services/deployment_agnostic_services.ts | 1 + .../common/visualizations/group1/index.ts | 78 ++ .../visualizations/group1/smokescreen.ts | 765 ++++++++++++++ .../common/visualizations/group1/tsdb.ts | 980 ++++++++++++++++++ .../visualizations/group1/vega_chart.ts | 280 +++++ .../common/visualizations/index.ts | 22 + .../open_in_lens/agg_based/gauge.ts | 104 ++ .../open_in_lens/agg_based/goal.ts | 201 ++++ .../open_in_lens/agg_based/heatmap.ts | 182 ++++ .../open_in_lens/agg_based/index.ts | 80 ++ .../open_in_lens/agg_based/metric.ts | 213 ++++ .../open_in_lens/agg_based/pie.ts | 107 ++ .../open_in_lens/agg_based/table.ts | 144 +++ .../open_in_lens/agg_based/xy.ts | 250 +++++ .../open_in_lens/tsvb/dashboard.ts | 123 +++ .../visualizations/open_in_lens/tsvb/gauge.ts | 122 +++ .../visualizations/open_in_lens/tsvb/index.ts | 79 ++ .../open_in_lens/tsvb/metric.ts | 134 +++ .../visualizations/open_in_lens/tsvb/table.ts | 178 ++++ .../open_in_lens/tsvb/timeseries.ts | 170 +++ .../visualizations/open_in_lens/tsvb/top_n.ts | 170 +++ .../common_configs/config.group2.ts | 20 + .../search/common_configs/config.group2.ts | 20 + .../security/common_configs/config.group2.ts | 20 + x-pack/test_serverless/tsconfig.json | 1 + 61 files changed, 9253 insertions(+), 87 deletions(-) create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/gauge.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/heatmap.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/navigation.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/pie.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/table.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/xy.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/dashboard.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/gauge.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/metric.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/table.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/timeseries.json create mode 100644 x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/top_n.json create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/group1/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/group1/smokescreen.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/group1/tsdb.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/group1/vega_chart.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/gauge.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/goal.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/heatmap.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/metric.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/pie.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/table.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/xy.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/dashboard.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/gauge.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/metric.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/table.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/timeseries.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/top_n.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts create mode 100644 x-pack/test_serverless/functional/test_suites/search/common_configs/config.group2.ts create mode 100644 x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 5222de5151738..1fc0967ffe712 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -412,13 +412,16 @@ enabled: - x-pack/test_serverless/functional/test_suites/observability/config.ts - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group1.ts + - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts - x-pack/test_serverless/functional/test_suites/search/config.ts - x-pack/test_serverless/functional/test_suites/search/config.examples.ts - x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts - x-pack/test_serverless/functional/test_suites/search/common_configs/config.group1.ts + - x-pack/test_serverless/functional/test_suites/search/common_configs/config.group2.ts - x-pack/test_serverless/functional/test_suites/security/config.ts - x-pack/test_serverless/functional/test_suites/security/config.examples.ts - x-pack/test_serverless/functional/test_suites/security/common_configs/config.group1.ts + - x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts - x-pack/performance/journeys/ecommerce_dashboard.ts - x-pack/performance/journeys/ecommerce_dashboard_map_only.ts - x-pack/performance/journeys/flight_dashboard.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ebe311c57f01e..8eec80f9cd5c9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -881,6 +881,8 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /test/functional/apps/visualize/ @elastic/kibana-visualizations /x-pack/test/functional/apps/graph @elastic/kibana-visualizations /test/api_integration/apis/event_annotations @elastic/kibana-visualizations +/x-pack/test_serverless/functional/test_suites/common/visualizations/ @elastic/kibana-visualizations +/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/ @elastic/kibana-visualizations # Global Experience diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index 75c77b8dbfc30..e41d1583341da 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -583,7 +583,7 @@ export class DashboardPageObject extends FtrService { await this.gotoDashboardLandingPage(); - await this.listingTable.searchForItemWithName(dashboardName); + await this.listingTable.searchForItemWithName(dashboardName, { escape: false }); await this.retry.try(async () => { await this.listingTable.clickItemLink('dashboard', dashboardName); await this.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/page_objects/visualize_page.ts b/test/functional/page_objects/visualize_page.ts index a08b950ce9853..55abacfec4009 100644 --- a/test/functional/page_objects/visualize_page.ts +++ b/test/functional/page_objects/visualize_page.ts @@ -156,7 +156,7 @@ export class VisualizePageObject extends FtrService { await this.waitForVisualizationSelectPage(); } - public async navigateToLensFromAnotherVisulization() { + public async navigateToLensFromAnotherVisualization() { const button = await this.testSubjects.find('visualizeEditInLensButton'); await button.click(); } diff --git a/test/functional/services/common/test_subjects.ts b/test/functional/services/common/test_subjects.ts index 9cbce20b05068..666a16b1d4629 100644 --- a/test/functional/services/common/test_subjects.ts +++ b/test/functional/services/common/test_subjects.ts @@ -41,7 +41,7 @@ export class TestSubjects extends FtrService { * `retry.waitFor()` loops. * * When `options.timeout` is not passed the `timeouts.waitForExists` config is used as - * the timeout. The default value for that config is currently 2.5 seconds. + * the timeout. The default value for that config is currently 2.5 seconds (in ms). * * If the element is hidden it is not treated as "existing", unless `options.allowHidden` * is set to `true`. diff --git a/test/functional/services/dashboard/panel_actions.ts b/test/functional/services/dashboard/panel_actions.ts index 65e5904f14f80..f07b0bd87177f 100644 --- a/test/functional/services/dashboard/panel_actions.ts +++ b/test/functional/services/dashboard/panel_actions.ts @@ -382,13 +382,25 @@ export class DashboardPanelActionsService extends FtrService { throw new Error(`No action matching text "${text}"`); } - async convertToLens(parent?: WebElementWrapper) { - this.log.debug('convertToLens'); + async canConvertToLens(parent?: WebElementWrapper) { + this.log.debug('canConvertToLens'); await this.openContextMenu(parent); const isActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); if (!isActionVisible) await this.clickContextMenuMoreItem(); const isPanelActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); if (!isPanelActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(CONVERT_TO_LENS_TEST_SUBJ); + return await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ, { timeout: 500 }); + } + + async convertToLens(parent?: WebElementWrapper) { + this.log.debug('convertToLens'); + + await this.retry.try(async () => { + if (!(await this.canConvertToLens(parent))) { + throw new Error('Convert to Lens option not found'); + } + + await this.testSubjects.click(CONVERT_TO_LENS_TEST_SUBJ); + }); } } diff --git a/test/functional/services/listing_table.ts b/test/functional/services/listing_table.ts index 486d49a3f7c75..f83de38fb468b 100644 --- a/test/functional/services/listing_table.ts +++ b/test/functional/services/listing_table.ts @@ -23,7 +23,6 @@ export class ListingTableService extends FtrService { private readonly log = this.ctx.getService('log'); private readonly retry = this.ctx.getService('retry'); private readonly common = this.ctx.getPageObject('common'); - private readonly header = this.ctx.getPageObject('header'); private readonly tagPopoverToggle = this.ctx.getService('menuToggle').create({ name: 'Tag Popover', @@ -89,7 +88,6 @@ export class ListingTableService extends FtrService { } else { throw new Error('Waiting'); } - await this.header.waitUntilLoadingHasFinished(); }); } diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/gauge.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/gauge.ts index 2ffaf120f175e..048f7584a86ab 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/gauge.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/gauge.ts @@ -39,7 +39,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('gaugeChart'); }); @@ -49,7 +49,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectField('machine.ram', 'metrics'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('gaugeChart'); expect(await lens.getLayerCount()).to.be(1); @@ -101,7 +101,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('gaugeChart'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/goal.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/goal.ts index a83dc421b4a09..78d0e220c61bd 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/goal.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/goal.ts @@ -38,7 +38,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); @@ -61,7 +61,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectField('machine.ram', 'metrics'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -91,7 +91,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectAggregation('Max Bucket', 'metrics'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -134,7 +134,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); 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 4f43bf466f892..ad4b1e123b554 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 @@ -52,7 +52,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectField('machine.os.raw'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -90,7 +90,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectField('machine.os.raw'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -114,7 +114,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await visChart.waitForVisualizationRenderingStabilized(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -174,7 +174,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await visChart.waitForVisualizationRenderingStabilized(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('heatmapChart'); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/metric.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/metric.ts index 62b4c1acd6e16..af22bc8408de3 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/metric.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/metric.ts @@ -39,7 +39,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); @@ -62,7 +62,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectField('machine.ram', 'metrics'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -91,7 +91,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectAggregation('Max Bucket', 'metrics'); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -146,7 +146,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await backgroundButton.click(); await visEditor.clickGo(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/navigation.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/navigation.ts index 791edb26888b2..884359a34901d 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/navigation.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/navigation.ts @@ -27,7 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should let the user return back to Visualize if no changes were made', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -43,7 +43,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should let the user return back to Visualize but show a warning modal if changes happened in Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -72,7 +72,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should let the user return back to Visualize with no modal if changes have been saved in Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/pie.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/pie.ts index 6a5bc5e6ce40a..9fcdef35239fa 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/pie.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/pie.ts @@ -75,7 +75,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('partitionVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -97,7 +97,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('partitionVisChart'); const sliceByText = await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel', 0); @@ -119,7 +119,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('partitionVisChart'); let chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); @@ -135,7 +135,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('partitionVisChart'); chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/table.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/table.ts index 1497eea84c851..99985787c53a0 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/table.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/table.ts @@ -55,7 +55,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -75,7 +75,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -95,7 +95,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -117,7 +117,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -140,7 +140,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -162,7 +162,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts index 7d912221e2b15..37e2580b776ff 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts @@ -118,7 +118,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.setSeriesType(1, 'histogram'); await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -145,7 +145,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.setSeriesType(1, 'histogram'); await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -167,7 +167,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.selectAggregation('Date histogram'); await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -185,7 +185,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -209,7 +209,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(line?.length).to.be(1); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(2); @@ -232,7 +232,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -252,7 +252,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -271,7 +271,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -296,7 +296,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -324,7 +324,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); const expectedData = await visChart.getLegendEntriesXYCharts('xyVisChart'); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); const data = await lens.getCurrentChartDebugState('xyVisChart'); await retry.try(async () => { @@ -346,7 +346,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.clickGo(isNewChartsLibraryEnabled); await header.waitUntilLoadingHasFinished(); const expectedData = await visChart.getLegendEntriesXYCharts('xyVisChart'); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); const data = await lens.getCurrentChartDebugState('xyVisChart'); await retry.try(async () => { @@ -365,7 +365,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visEditor.setPercentileValue('99.99', 6); await visEditor.clickGo(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await lens.getWorkspaceErrorCount()).to.eql(0); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts index 21e485ebe269c..0f850f601f3bf 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts @@ -51,7 +51,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await panelActions.openContextMenu(); await panelActions.clickEdit(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); @@ -70,6 +70,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert a by reference TSVB viz to a Lens viz', async () => { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickVisType('metrics'); await testSubjects.click('visualizesaveAndReturnButton'); @@ -89,7 +91,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await panelActions.openContextMenu(); await panelActions.clickEdit(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); + await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/gauge.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/gauge.ts index c3158240665b2..6caaf00cc4b62 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/gauge.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/gauge.ts @@ -38,7 +38,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert to Lens', async () => { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); const metricData = await lens.getMetricVisualizationData(); @@ -51,7 +51,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); @@ -98,7 +98,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -131,7 +131,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickSeriesOption(); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); @@ -140,7 +140,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickPanelOptions('gauge'); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/metric.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/metric.ts index 860c812ba2fd5..99cd075c0ce70 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/metric.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/metric.ts @@ -35,7 +35,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); const metricData = await lens.getMetricVisualizationData(); @@ -48,7 +48,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -65,7 +65,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -101,7 +101,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -132,7 +132,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickSeriesOption(); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); @@ -141,7 +141,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickPanelOptions('metric'); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/table.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/table.ts index 0e6d270375d6e..d2f8b49c1ae92 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/table.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/table.ts @@ -110,7 +110,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickDataTab('table'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); await testSubjects.click('indexPattern-advanced-accordion'); @@ -131,7 +131,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { const layerCount = await lens.getLayerCount(); @@ -149,7 +149,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.setFunctionForAggregateFunction('Sum'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { const layerCount = await lens.getLayerCount(); @@ -169,7 +169,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.setColumnLabelValue('test'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { const layerCount = await lens.getLayerCount(); @@ -193,7 +193,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.setColorPickerValue('#54A000', 1); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { @@ -222,7 +222,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickPanelOptions('table'); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('lnsDataTable'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/timeseries.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/timeseries.ts index c2adbeb99d7d7..ea658b39b318c 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/timeseries.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/timeseries.ts @@ -38,7 +38,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('visualizes field to Lens and loads fields to the dimesion editor', async () => { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); @@ -51,7 +51,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('navigates back to TSVB when the Back button is clicked', async () => { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); const goBackBtn = await testSubjects.find('lnsApp_goBackToAppButton'); @@ -66,7 +66,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should preserve app filters in lens', async () => { await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'css' }); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await filterBar.hasFilter('extension', 'css')).to.be(true); @@ -76,7 +76,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.setQuery('machine.os : ios'); await queryBar.submitQuery(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); @@ -89,7 +89,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); @@ -114,7 +114,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -151,7 +151,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.setMetricsGroupByTerms('extension.raw'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -174,7 +174,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.setMetricsGroupByTerms('extension.raw'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -192,7 +192,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickSeriesOption(); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); @@ -201,7 +201,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickPanelOptions('timeSeries'); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/top_n.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/top_n.ts index 4ca611c807b4a..10b8e2136deb1 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/top_n.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/top_n.ts @@ -74,7 +74,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert to horizontal bar', async () => { await visualBuilder.selectAggType('Max'); await visualBuilder.setFieldForAggregation('memory', 0); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); const type = await chartSwitcher.getVisibleText(); @@ -91,7 +91,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert group by to vertical axis', async () => { await visualBuilder.setMetricsGroupByTerms('extension.raw'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const layerCount = await lens.getLayerCount(); @@ -111,7 +111,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickDataTab('topN'); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); await testSubjects.click('indexPattern-advanced-accordion'); @@ -132,7 +132,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const layerCount = await lens.getLayerCount(); @@ -145,7 +145,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('visualizes field to Lens and loads fields to the dimesion editor', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); @@ -154,7 +154,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('navigates back to TSVB when the Back button is clicked', async () => { - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); const goBackBtn = await testSubjects.find('lnsApp_goBackToAppButton'); await goBackBtn.click(); @@ -164,7 +164,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should preserve app filters in lens', async () => { await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'css' }); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await filterBar.hasFilter('extension', 'css')).to.be(true); @@ -174,7 +174,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.setQuery('machine.os : ios'); await queryBar.submitQuery(); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); @@ -184,7 +184,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickSeriesOption(); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); @@ -193,7 +193,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await visualBuilder.clickPanelOptions('topN'); await visualBuilder.setIgnoreFilters(true); await header.waitUntilLoadingHasFinished(); - await visualize.navigateToLensFromAnotherVisulization(); + await visualize.navigateToLensFromAnotherVisualization(); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 6069ae838cea8..45b451721b2cd 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -32,6 +32,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont const comboBox = getService('comboBox'); const browser = getService('browser'); const dashboardAddPanel = getService('dashboardAddPanel'); + const queryBar = getService('queryBar'); const PageObjects = getPageObjects([ 'common', @@ -1877,6 +1878,14 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont } }, + /** + * Enables elastic charts debug state with *soft* refresh + */ + async enableEchDebugState() { + await elasticChart.setNewChartUiDebugFlag(true); + await queryBar.clickQuerySubmitButton(); + }, + async changeColorMappingPalette(selector: string, paletteId: string) { await retry.try(async () => { if (!(await testSubjects.exists('lns-indexPattern-dimensionContainerClose'))) { diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/gauge.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/gauge.json new file mode 100644 index 0000000000000..a454778f3c2a1 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/gauge.json @@ -0,0 +1,212 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:33:25.788Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-22T20:33:25.788Z", + "version": "WzUxNSwxXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:43:33.023Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-22T19:43:33.023Z", + "version": "WzEyNTAsMV0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Gauge - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Basic\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":true,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":50},{\"from\":50,\"to\":75},{\"from\":75,\"to\":100}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:38:08.408Z", + "id": "cd9cf980-412b-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T20:38:08.408Z", + "version": "WzUzOCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Gauge - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Agg with params\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":true,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":50},{\"from\":50,\"to\":75},{\"from\":75,\"to\":100}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:39:31.868Z", + "id": "ff5bceb0-412b-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T20:39:31.868Z", + "version": "WzU0MCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Gauge - Unsupported field type", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Unsupported field type\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"1-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":true,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":50},{\"from\":50,\"to\":75},{\"from\":75,\"to\":100}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:40:16.540Z", + "id": "19fc5dc0-412c-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T20:40:16.540Z", + "version": "WzU0MywxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Gauge - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Color ranges\",\"type\":\"gauge\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":true,\"isDisplayWarning\":false,\"gauge\":{\"alignment\":\"automatic\",\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":10000},{\"from\":10000,\"to\":20000},{\"from\":20000,\"to\":30000},{\"from\":30000,\"to\":15000000000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":true,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:43:18.067Z", + "id": "862f3030-412c-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T20:43:18.067Z", + "version": "WzU0NSwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"692fb021-dfc7-4842-96c6-20f225d3ce3c\"},\"panelIndex\":\"692fb021-dfc7-4842-96c6-20f225d3ce3c\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_692fb021-dfc7-4842-96c6-20f225d3ce3c\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"a403606a-9362-43c1-a840-3f01c74a6034\"},\"panelIndex\":\"a403606a-9362-43c1-a840-3f01c74a6034\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_a403606a-9362-43c1-a840-3f01c74a6034\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"1802d558-2a95-45d3-83a3-681a616e6518\"},\"panelIndex\":\"1802d558-2a95-45d3-83a3-681a616e6518\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_1802d558-2a95-45d3-83a3-681a616e6518\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"b79d643a-0d33-44f2-973c-356c9708707d\"},\"panelIndex\":\"b79d643a-0d33-44f2-973c-356c9708707d\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_b79d643a-0d33-44f2-973c-356c9708707d\"}]", + "timeRestore": false, + "title": "Convert to Lens - Gauge", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T20:44:08.628Z", + "id": "a2a20e40-412c-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "cd9cf980-412b-11ee-a5d9-53bce88b37d9", + "name": "692fb021-dfc7-4842-96c6-20f225d3ce3c:panel_692fb021-dfc7-4842-96c6-20f225d3ce3c", + "type": "visualization" + }, + { + "id": "ff5bceb0-412b-11ee-a5d9-53bce88b37d9", + "name": "a403606a-9362-43c1-a840-3f01c74a6034:panel_a403606a-9362-43c1-a840-3f01c74a6034", + "type": "visualization" + }, + { + "id": "19fc5dc0-412c-11ee-a5d9-53bce88b37d9", + "name": "1802d558-2a95-45d3-83a3-681a616e6518:panel_1802d558-2a95-45d3-83a3-681a616e6518", + "type": "visualization" + }, + { + "id": "862f3030-412c-11ee-a5d9-53bce88b37d9", + "name": "b79d643a-0d33-44f2-973c-356c9708707d:panel_b79d643a-0d33-44f2-973c-356c9708707d", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-22T20:44:08.628Z", + "version": "WzU0OCwxXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json new file mode 100644 index 0000000000000..4e622ae968b48 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json @@ -0,0 +1,250 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:44:13.055Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-23T04:44:13.055Z", + "version": "WzE1LDFd" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-17T17:27:48.058Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-17T17:27:48.058Z", + "version": "WzMzNCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Goal - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Goal - Basic\",\"type\":\"goal\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"type\":\"goal\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":true,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\",\"width\":2},\"type\":\"meter\",\"style\":{\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:47:21.815Z", + "id": "259b6e70-4170-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T04:51:12.185Z", + "version": "WzM0LDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Goal - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Goal - Agg with params\",\"type\":\"goal\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"type\":\"goal\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":true,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\",\"width\":2},\"type\":\"meter\",\"style\":{\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:51:39.702Z", + "id": "bf51dd60-4170-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T04:51:39.702Z", + "version": "WzM2LDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Goal - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Goal - Sibling pipeline agg\",\"type\":\"goal\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"1-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"type\":\"goal\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":true,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\",\"width\":2},\"type\":\"meter\",\"style\":{\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:52:35.067Z", + "id": "e051e4b0-4170-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T04:52:35.067Z", + "version": "WzM4LDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Goal - Unsupported field type", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Goal - Unsupported field type\",\"type\":\"goal\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"top_metrics\",\"params\":{\"field\":\"machine.ram\",\"size\":1,\"sortField\":\"@timestamp\",\"sortOrder\":\"desc\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"type\":\"goal\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":true,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\",\"width\":2},\"type\":\"meter\",\"style\":{\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:53:44.174Z", + "id": "0982c8e0-4171-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T04:53:44.174Z", + "version": "WzQwLDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Goal - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Goal - Color ranges\",\"type\":\"goal\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"isDisplayWarning\":false,\"type\":\"goal\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":13000000000},{\"from\":13000000000,\"to\":13100000000},{\"from\":13100000000,\"to\":13200000000},{\"from\":13200000000,\"to\":13300000000}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"rgba(105,112,125,0.2)\",\"width\":2},\"type\":\"meter\",\"style\":{\"bgFill\":\"rgba(105,112,125,0.2)\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:57:29.503Z", + "id": "8fd142f0-4171-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T04:57:29.503Z", + "version": "WzQyLDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"c658b9f5-2196-4361-8bd2-2f068888bbe0\"},\"panelIndex\":\"c658b9f5-2196-4361-8bd2-2f068888bbe0\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_c658b9f5-2196-4361-8bd2-2f068888bbe0\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"cb0d0ba9-d367-4989-8c95-e88712d1506b\"},\"panelIndex\":\"cb0d0ba9-d367-4989-8c95-e88712d1506b\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_cb0d0ba9-d367-4989-8c95-e88712d1506b\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"1da866c1-5e2e-4077-af1c-9f60811c4cfb\"},\"panelIndex\":\"1da866c1-5e2e-4077-af1c-9f60811c4cfb\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_1da866c1-5e2e-4077-af1c-9f60811c4cfb\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"4c6b5d81-7a69-4e09-9529-1989685cf47b\"},\"panelIndex\":\"4c6b5d81-7a69-4e09-9529-1989685cf47b\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_4c6b5d81-7a69-4e09-9529-1989685cf47b\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"a3987c58-d97d-43ab-8f2e-2829c2d19406\"},\"panelIndex\":\"a3987c58-d97d-43ab-8f2e-2829c2d19406\",\"embeddableConfig\":{\"enhancements\":{},\"vis\":null},\"panelRefName\":\"panel_a3987c58-d97d-43ab-8f2e-2829c2d19406\"}]", + "timeRestore": false, + "title": "Convert to Lens - Goal", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:58:40.184Z", + "id": "ab718ec0-4171-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "259b6e70-4170-11ee-8333-6f5dc14c92aa", + "name": "c658b9f5-2196-4361-8bd2-2f068888bbe0:panel_c658b9f5-2196-4361-8bd2-2f068888bbe0", + "type": "visualization" + }, + { + "id": "bf51dd60-4170-11ee-8333-6f5dc14c92aa", + "name": "cb0d0ba9-d367-4989-8c95-e88712d1506b:panel_cb0d0ba9-d367-4989-8c95-e88712d1506b", + "type": "visualization" + }, + { + "id": "e051e4b0-4170-11ee-8333-6f5dc14c92aa", + "name": "1da866c1-5e2e-4077-af1c-9f60811c4cfb:panel_1da866c1-5e2e-4077-af1c-9f60811c4cfb", + "type": "visualization" + }, + { + "id": "0982c8e0-4171-11ee-8333-6f5dc14c92aa", + "name": "4c6b5d81-7a69-4e09-9529-1989685cf47b:panel_4c6b5d81-7a69-4e09-9529-1989685cf47b", + "type": "visualization" + }, + { + "id": "8fd142f0-4171-11ee-8333-6f5dc14c92aa", + "name": "a3987c58-d97d-43ab-8f2e-2829c2d19406:panel_a3987c58-d97d-43ab-8f2e-2829c2d19406", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-23T04:58:40.184Z", + "version": "WzQ2LDFd" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/heatmap.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/heatmap.json new file mode 100644 index 0000000000000..2bc0ab5fed835 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/heatmap.json @@ -0,0 +1,250 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T18:40:52.430Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-23T18:40:52.430Z", + "version": "WzExMywxXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-17T17:27:48.058Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-17T17:27:48.058Z", + "version": "WzMzNCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Heatmap - Color number", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Heatmap - Color number\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"colorsNumber\":6,\"colorSchema\":\"Green to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:10:01.883Z", + "id": "0ac76eb0-41f1-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T20:10:01.883Z", + "version": "WzIyMCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Heatmap - No X-Axis", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Heatmap - No X-Axis\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"colorsNumber\":4,\"colorSchema\":\"Green to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:07:07.870Z", + "id": "a30f27e0-41f0-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T20:07:07.870Z", + "version": "WzIxNCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Heatmap - Custom Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Heatmap - Custom Color ranges\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"colorsNumber\":4,\"colorSchema\":\"Green to Red\",\"setColorRange\":true,\"colorsRange\":[{\"from\":0,\"to\":100},{\"from\":100,\"to\":200},{\"from\":200,\"to\":300},{\"from\":300,\"to\":400},{\"from\":400,\"to\":500},{\"from\":500,\"to\":600}],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:11:25.487Z", + "id": "3c9c63f0-41f1-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T20:11:25.487Z", + "version": "WzIyMSwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Heatmap - With Y-Axis only", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Heatmap - With Y-Axis only\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"colorsNumber\":4,\"colorSchema\":\"Green to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:08:46.148Z", + "id": "dda33040-41f0-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T20:08:46.148Z", + "version": "WzIxNywxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Heatmap - With X-Axis only", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Heatmap - With X-Axis only\",\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"colorsNumber\":4,\"colorSchema\":\"Green to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:07:44.572Z", + "id": "b8ef6fc0-41f0-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T20:09:08.987Z", + "version": "WzIxOSwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"6a86bfc7-b099-4620-a479-85c40a8bae1e\"},\"panelIndex\":\"6a86bfc7-b099-4620-a479-85c40a8bae1e\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_6a86bfc7-b099-4620-a479-85c40a8bae1e\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"9832ceb4-cbe4-4ff6-a0f9-971b987d69c0\"},\"panelIndex\":\"9832ceb4-cbe4-4ff6-a0f9-971b987d69c0\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_9832ceb4-cbe4-4ff6-a0f9-971b987d69c0\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"1d77d37c-4334-41e5-942f-390df7ed087b\"},\"panelIndex\":\"1d77d37c-4334-41e5-942f-390df7ed087b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1d77d37c-4334-41e5-942f-390df7ed087b\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"f6dcacfb-9a5b-49ad-aecd-91ba65c599cd\"},\"panelIndex\":\"f6dcacfb-9a5b-49ad-aecd-91ba65c599cd\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_f6dcacfb-9a5b-49ad-aecd-91ba65c599cd\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"65b043a0-774b-49e6-b98e-b0cb3a50da56\"},\"panelIndex\":\"65b043a0-774b-49e6-b98e-b0cb3a50da56\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_65b043a0-774b-49e6-b98e-b0cb3a50da56\"}]", + "timeRestore": false, + "title": "Convert to Lens - Heatmap", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T20:11:54.695Z", + "id": "4e052d70-41f1-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "0ac76eb0-41f1-11ee-8333-6f5dc14c92aa", + "name": "6a86bfc7-b099-4620-a479-85c40a8bae1e:panel_6a86bfc7-b099-4620-a479-85c40a8bae1e", + "type": "visualization" + }, + { + "id": "a30f27e0-41f0-11ee-8333-6f5dc14c92aa", + "name": "9832ceb4-cbe4-4ff6-a0f9-971b987d69c0:panel_9832ceb4-cbe4-4ff6-a0f9-971b987d69c0", + "type": "visualization" + }, + { + "id": "3c9c63f0-41f1-11ee-8333-6f5dc14c92aa", + "name": "1d77d37c-4334-41e5-942f-390df7ed087b:panel_1d77d37c-4334-41e5-942f-390df7ed087b", + "type": "visualization" + }, + { + "id": "dda33040-41f0-11ee-8333-6f5dc14c92aa", + "name": "f6dcacfb-9a5b-49ad-aecd-91ba65c599cd:panel_f6dcacfb-9a5b-49ad-aecd-91ba65c599cd", + "type": "visualization" + }, + { + "id": "b8ef6fc0-41f0-11ee-8333-6f5dc14c92aa", + "name": "65b043a0-774b-49e6-b98e-b0cb3a50da56:panel_65b043a0-774b-49e6-b98e-b0cb3a50da56", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-23T20:11:54.695Z", + "version": "WzIyMywxXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json new file mode 100644 index 0000000000000..30361d886295b --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json @@ -0,0 +1,253 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:24:14.969Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-22T19:24:14.969Z", + "version": "WzMxNSwxXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-17T17:27:48.058Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-17T17:27:48.058Z", + "version": "WzMzNCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Metric - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Color ranges\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"Background\",\"colorsRange\":[{\"from\":12000000000,\"to\":13000000000},{\"from\":13000000000,\"to\":13100000000},{\"from\":13100000000,\"to\":13200000000},{\"from\":13200000000,\"to\":13300000000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:29:13.823Z", + "id": "2d355ef0-4122-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T19:33:56.204Z", + "version": "WzM1MCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Metric - Unsupported field type", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Unsupported field type\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"top_metrics\",\"params\":{\"field\":\"extension.raw\",\"size\":1,\"sortField\":\"@timestamp\",\"sortOrder\":\"desc\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:28:11.014Z", + "id": "07c57a60-4122-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T19:28:11.014Z", + "version": "WzM0NCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Metric - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Sibling pipeline agg\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"1-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:26:42.717Z", + "id": "d3246cd0-4121-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T19:26:42.717Z", + "version": "WzM0MCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Metric - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Agg with params\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:25:51.053Z", + "id": "b4591fd0-4121-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T19:25:51.053Z", + "version": "WzMzNiwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Metric - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Basic\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-22T19:24:59.786Z", + "id": "95ca66a0-4121-11ee-a5d9-53bce88b37d9", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-22T19:24:59.786Z", + "version": "WzMzMiwxXQ==" +} + +{ + "id": "8957af70-4123-11ee-a5d9-53bce88b37d9", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2023-08-22T19:38:57.895Z", + "created_at": "2023-08-22T19:38:57.895Z", + "version": "WzM4OCwxXQ==", + "attributes": { + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "description": "", + "timeRestore": false, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"4dd05f14-a94b-4de7-af13-0b78fd8b5ca7\"},\"panelIndex\":\"4dd05f14-a94b-4de7-af13-0b78fd8b5ca7\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4dd05f14-a94b-4de7-af13-0b78fd8b5ca7\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"2bcda8fb-0b9b-4eb9-9509-389f5e52336f\"},\"panelIndex\":\"2bcda8fb-0b9b-4eb9-9509-389f5e52336f\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2bcda8fb-0b9b-4eb9-9509-389f5e52336f\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"18c560a4-1da0-4859-a69f-f508e83e3e9c\"},\"panelIndex\":\"18c560a4-1da0-4859-a69f-f508e83e3e9c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_18c560a4-1da0-4859-a69f-f508e83e3e9c\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"a4066623-1adb-43cd-a83d-78d5911329b3\"},\"panelIndex\":\"a4066623-1adb-43cd-a83d-78d5911329b3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_a4066623-1adb-43cd-a83d-78d5911329b3\"},{\"version\":\"8.10.0\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"983c3147-62e9-44cf-865d-bc33aa5a5f1e\"},\"panelIndex\":\"983c3147-62e9-44cf-865d-bc33aa5a5f1e\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_983c3147-62e9-44cf-865d-bc33aa5a5f1e\"}]", + "title": "Convert to Lens - Metric", + "version": 1 + }, + "references": [ + { + "name": "4dd05f14-a94b-4de7-af13-0b78fd8b5ca7:panel_4dd05f14-a94b-4de7-af13-0b78fd8b5ca7", + "type": "visualization", + "id": "95ca66a0-4121-11ee-a5d9-53bce88b37d9" + }, + { + "name": "2bcda8fb-0b9b-4eb9-9509-389f5e52336f:panel_2bcda8fb-0b9b-4eb9-9509-389f5e52336f", + "type": "visualization", + "id": "b4591fd0-4121-11ee-a5d9-53bce88b37d9" + }, + { + "name": "18c560a4-1da0-4859-a69f-f508e83e3e9c:panel_18c560a4-1da0-4859-a69f-f508e83e3e9c", + "type": "visualization", + "id": "d3246cd0-4121-11ee-a5d9-53bce88b37d9" + }, + { + "name": "a4066623-1adb-43cd-a83d-78d5911329b3:panel_a4066623-1adb-43cd-a83d-78d5911329b3", + "type": "visualization", + "id": "07c57a60-4122-11ee-a5d9-53bce88b37d9" + }, + { + "name": "983c3147-62e9-44cf-865d-bc33aa5a5f1e:panel_983c3147-62e9-44cf-865d-bc33aa5a5f1e", + "type": "visualization", + "id": "2d355ef0-4122-11ee-a5d9-53bce88b37d9" + } + ], + "managed": false, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/navigation.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/navigation.json new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/pie.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/pie.json new file mode 100644 index 0000000000000..d721865fed405 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/pie.json @@ -0,0 +1,294 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T04:44:13.055Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-23T04:44:13.055Z", + "version": "WzE1LDFd" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-17T17:27:48.058Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-17T17:27:48.058Z", + "version": "WzMzNCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Pie - No split slices", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Pie - No split slices\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":true,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T05:03:48.121Z", + "id": "717dc890-4172-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T05:08:25.812Z", + "version": "WzYzLDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Pie - 1 Split slice", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Pie - 1 Split slice\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":true,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T05:08:59.502Z", + "id": "2b16c0e0-4173-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T05:08:59.502Z", + "version": "WzY1LDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Pie - 4 layers", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Pie - 4 layers\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"bytes\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"bytes\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"bytes\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":true,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T05:07:20.912Z", + "id": "f0531d00-4172-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T05:07:20.912Z", + "version": "WzYxLDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Pie - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Pie - Agg with params\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"params\":{\"field\":\"machine.ram\",\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":true,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T05:10:09.671Z", + "id": "54e9b170-4173-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T05:10:09.671Z", + "version": "WzY3LDFd" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Pie - Basic count", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Pie - Basic count\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":true,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T05:12:19.962Z", + "id": "a29285a0-4173-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T05:12:19.962Z", + "version": "WzY4LDFd" +} + +{ + "id": "e7b6c220-4238-11ee-8b96-35b00ddf1245", + "type": "visualization", + "namespaces": [ + "default" + ], + "updated_at": "2023-08-24T04:44:26.818Z", + "created_at": "2023-08-24T04:44:26.818Z", + "version": "WzE0NCwyXQ==", + "attributes": { + "visState": "{\"title\":\"Pie - Non Donut\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"legendDisplay\":\"hide\",\"legendPosition\":\"right\",\"nestedLegend\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"distinctColors\":false,\"isDonut\":false,\"emptySizeRatio\":0.3,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"labels\":{\"show\":true,\"last_level\":false,\"values\":true,\"valuesFormat\":\"percent\",\"percentDecimals\":2,\"truncate\":100,\"position\":\"default\"}}}", + "title": "Pie - Non Donut", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + } + }, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "managed": false, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.5.0" +} + +{ + "id": "d72e14f0-4173-11ee-8333-6f5dc14c92aa", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2023-08-24T04:46:29.235Z", + "created_at": "2023-08-24T04:46:29.235Z", + "version": "WzE0NiwyXQ==", + "attributes": { + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "description": "", + "timeRestore": false, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"cab94c6c-7d7e-4891-8767-52860984355a\"},\"panelIndex\":\"cab94c6c-7d7e-4891-8767-52860984355a\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_cab94c6c-7d7e-4891-8767-52860984355a\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"fd298fe8-2dd8-489a-9305-321ace73e096\"},\"panelIndex\":\"fd298fe8-2dd8-489a-9305-321ace73e096\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_fd298fe8-2dd8-489a-9305-321ace73e096\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"66adc205-f14b-4b32-b812-0182d824db74\"},\"panelIndex\":\"66adc205-f14b-4b32-b812-0182d824db74\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_66adc205-f14b-4b32-b812-0182d824db74\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"36c55349-66d7-4f3d-9e16-654e827256b0\"},\"panelIndex\":\"36c55349-66d7-4f3d-9e16-654e827256b0\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_36c55349-66d7-4f3d-9e16-654e827256b0\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"a088582a-4c86-4e5c-bfb3-96196dac7514\"},\"panelIndex\":\"a088582a-4c86-4e5c-bfb3-96196dac7514\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_a088582a-4c86-4e5c-bfb3-96196dac7514\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"32e26f1f-9fd4-4395-b827-5a7ed956eb06\"},\"panelIndex\":\"32e26f1f-9fd4-4395-b827-5a7ed956eb06\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_32e26f1f-9fd4-4395-b827-5a7ed956eb06\"}]", + "title": "Convert to Lens - Pie", + "version": 1 + }, + "references": [ + { + "name": "cab94c6c-7d7e-4891-8767-52860984355a:panel_cab94c6c-7d7e-4891-8767-52860984355a", + "type": "visualization", + "id": "717dc890-4172-11ee-8333-6f5dc14c92aa" + }, + { + "name": "fd298fe8-2dd8-489a-9305-321ace73e096:panel_fd298fe8-2dd8-489a-9305-321ace73e096", + "type": "visualization", + "id": "2b16c0e0-4173-11ee-8333-6f5dc14c92aa" + }, + { + "name": "66adc205-f14b-4b32-b812-0182d824db74:panel_66adc205-f14b-4b32-b812-0182d824db74", + "type": "visualization", + "id": "f0531d00-4172-11ee-8333-6f5dc14c92aa" + }, + { + "name": "36c55349-66d7-4f3d-9e16-654e827256b0:panel_36c55349-66d7-4f3d-9e16-654e827256b0", + "type": "visualization", + "id": "54e9b170-4173-11ee-8333-6f5dc14c92aa" + }, + { + "name": "a088582a-4c86-4e5c-bfb3-96196dac7514:panel_a088582a-4c86-4e5c-bfb3-96196dac7514", + "type": "visualization", + "id": "a29285a0-4173-11ee-8333-6f5dc14c92aa" + }, + { + "name": "32e26f1f-9fd4-4395-b827-5a7ed956eb06:panel_32e26f1f-9fd4-4395-b827-5a7ed956eb06", + "type": "visualization", + "id": "e7b6c220-4238-11ee-8b96-35b00ddf1245" + } + ], + "managed": false, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/table.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/table.json new file mode 100644 index 0000000000000..9f82aa39db66d --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/table.json @@ -0,0 +1,326 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T18:40:52.430Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-23T18:40:52.430Z", + "version": "WzExMywxXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-17T17:27:48.058Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-17T17:27:48.058Z", + "version": "WzMzNCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Split rows and tables", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Split rows and tables\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":0,\"extended_bounds\":{}},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"bytes\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"split\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false,\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:28:40.900Z", + "id": "43ff7840-41eb-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:28:40.900Z", + "version": "WzE5OCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Unsupported Agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Unsupported Agg\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"serial_diff\",\"params\":{\"metricAgg\":\"custom\",\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":0,\"extended_bounds\":{}},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:23:07.265Z", + "id": "7d22cf10-41ea-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:23:07.265Z", + "version": "WzE4MywxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Summary row", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Summary row\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":true,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:26:08.201Z", + "id": "e8fb7390-41ea-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:26:32.231Z", + "version": "WzE5MiwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Percentage Column", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Percentage Column\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"Count\",\"autoFitRowToContent\":false,\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:29:34.934Z", + "id": "64346760-41eb-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:29:34.934Z", + "version": "WzE5OSwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Agg with params\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:23:51.116Z", + "id": "9745f0c0-41ea-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:23:51.116Z", + "version": "WzE4NiwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Sibling pipeline agg\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"1-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:27:00.610Z", + "id": "08386e20-41eb-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:27:00.610Z", + "version": "WzE5NCwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "Table - Parent pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Parent pipeline agg\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cumulative_sum\",\"params\":{\"metricAgg\":\"custom\",\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":0,\"extended_bounds\":{}},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"showToolbar\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"autoFitRowToContent\":false}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:27:37.844Z", + "id": "1e69e340-41eb-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-23T19:27:37.844Z", + "version": "WzE5NiwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"1be63154-8a05-4d47-8af3-7e004625eeb5\"},\"panelIndex\":\"1be63154-8a05-4d47-8af3-7e004625eeb5\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1be63154-8a05-4d47-8af3-7e004625eeb5\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"5977ba91-5267-45da-8a57-970092149f02\"},\"panelIndex\":\"5977ba91-5267-45da-8a57-970092149f02\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5977ba91-5267-45da-8a57-970092149f02\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"70ca061c-eaaf-41ad-a846-1d2e3544e6ac\"},\"panelIndex\":\"70ca061c-eaaf-41ad-a846-1d2e3544e6ac\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_70ca061c-eaaf-41ad-a846-1d2e3544e6ac\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"323e78fa-df6d-49d1-af0f-de08ed1cc23b\"},\"panelIndex\":\"323e78fa-df6d-49d1-af0f-de08ed1cc23b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_323e78fa-df6d-49d1-af0f-de08ed1cc23b\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"7acae79b-dcb1-49e3-91c8-2a271e854e69\"},\"panelIndex\":\"7acae79b-dcb1-49e3-91c8-2a271e854e69\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_7acae79b-dcb1-49e3-91c8-2a271e854e69\"},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"8ac3c332-7011-4e94-b0d0-67ec3418998a\"},\"panelIndex\":\"8ac3c332-7011-4e94-b0d0-67ec3418998a\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_8ac3c332-7011-4e94-b0d0-67ec3418998a\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"c655233d-77e2-4758-9783-017afceaaf6d\"},\"panelIndex\":\"c655233d-77e2-4758-9783-017afceaaf6d\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_c655233d-77e2-4758-9783-017afceaaf6d\"}]", + "timeRestore": false, + "title": "Convert to Lens - Table", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-23T19:30:09.029Z", + "id": "7886e350-41eb-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "43ff7840-41eb-11ee-8333-6f5dc14c92aa", + "name": "1be63154-8a05-4d47-8af3-7e004625eeb5:panel_1be63154-8a05-4d47-8af3-7e004625eeb5", + "type": "visualization" + }, + { + "id": "7d22cf10-41ea-11ee-8333-6f5dc14c92aa", + "name": "5977ba91-5267-45da-8a57-970092149f02:panel_5977ba91-5267-45da-8a57-970092149f02", + "type": "visualization" + }, + { + "id": "e8fb7390-41ea-11ee-8333-6f5dc14c92aa", + "name": "70ca061c-eaaf-41ad-a846-1d2e3544e6ac:panel_70ca061c-eaaf-41ad-a846-1d2e3544e6ac", + "type": "visualization" + }, + { + "id": "64346760-41eb-11ee-8333-6f5dc14c92aa", + "name": "323e78fa-df6d-49d1-af0f-de08ed1cc23b:panel_323e78fa-df6d-49d1-af0f-de08ed1cc23b", + "type": "visualization" + }, + { + "id": "9745f0c0-41ea-11ee-8333-6f5dc14c92aa", + "name": "7acae79b-dcb1-49e3-91c8-2a271e854e69:panel_7acae79b-dcb1-49e3-91c8-2a271e854e69", + "type": "visualization" + }, + { + "id": "08386e20-41eb-11ee-8333-6f5dc14c92aa", + "name": "8ac3c332-7011-4e94-b0d0-67ec3418998a:panel_8ac3c332-7011-4e94-b0d0-67ec3418998a", + "type": "visualization" + }, + { + "id": "1e69e340-41eb-11ee-8333-6f5dc14c92aa", + "name": "c655233d-77e2-4758-9783-017afceaaf6d:panel_c655233d-77e2-4758-9783-017afceaaf6d", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-23T19:30:09.029Z", + "version": "WzIwMiwxXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/xy.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/xy.json new file mode 100644 index 0000000000000..e6453872fac41 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/xy.json @@ -0,0 +1,706 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Unsupported Agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Unsupported Agg\",\"type\":\"line\",\"aggs\":[{\"id\":\"2\",\"enabled\":true,\"type\":\"serial_diff\",\"params\":{\"metricAgg\":\"custom\",\"customMetric\":{\"id\":\"2-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":0,\"extended_bounds\":{}},\"schema\":\"group\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Max memory\"},\"style\":{}},{\"id\":\"ValueAxis-2\",\"name\":\"LeftAxis-2\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Serial Diff of Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-2\",\"data\":{\"id\":\"2\",\"label\":\"Serial Diff of Count\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "90f1e700-41e6-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Differing Layers", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Differing Layers\",\"type\":\"area\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"memory\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-1\",\"data\":{\"id\":\"2\",\"label\":\"Max memory\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "55fe6ea0-41e8-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Similar Layers", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Similar Layers\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"memory\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-1\",\"data\":{\"id\":\"2\",\"label\":\"Max memory\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "7c71b970-41e8-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Split chart", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Split chart\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"split\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "df013010-41e4-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1OCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Percentage chart", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Percentage chart\",\"type\":\"area\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"percentage\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "422f3700-41e9-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Stacked lines", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Stacked lines\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "efa74900-41e8-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2MCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Horizontal Bar", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Horizontal Bar\",\"type\":\"horizontal_bar\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"horizontal_bar\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{},\"position\":\"top\"}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "71089f80-41e9-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2MSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Axis positions", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Axis positions\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"memory\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Count\"},\"style\":{}},{\"id\":\"ValueAxis-2\",\"name\":\"RightAxis-1\",\"type\":\"value\",\"position\":\"right\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Max memory\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-2\",\"data\":{\"id\":\"2\",\"label\":\"Max memory\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "daf615d0-41e9-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Split Series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Split Series\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "0e345f10-41ea-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2MywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Dot size metric", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Dot size metric\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"memory\"},\"schema\":\"radius\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "c8d81f60-41e4-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Multiple Split Series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Multiple Split Series\",\"type\":\"line\",\"aggs\":[{\"id\":\"2\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"2\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"group\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Max memory\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-1\",\"data\":{\"id\":\"2\",\"label\":\"Count\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "0d86ddd0-41e6-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2NSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Parent pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Parent pipeline agg\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cumulative_sum\",\"params\":{\"metricAgg\":\"custom\",\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-10y\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"30d\",\"drop_partials\":false,\"min_doc_count\":0,\"extended_bounds\":{}},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Cumulative Sum of Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Cumulative Sum of Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "9d27e680-41e8-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Multiple Y Axes", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Multiple Y Axes\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"memory\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"machine.ram\"},\"schema\":\"metric\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Max memory\"},\"style\":{}},{\"id\":\"ValueAxis-2\",\"name\":\"LeftAxis-2\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Average machine.ram\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Max memory\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-2\",\"data\":{\"id\":\"2\",\"label\":\"Average machine.ram\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "e1696100-41e5-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Sibling pipeline agg\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"1-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"1-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Overall Max of Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Overall Max of Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "cfa306d0-41e8-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2OCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Sibling pipeline agg w/ split", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Sibling pipeline agg w/ split\",\"type\":\"line\",\"aggs\":[{\"id\":\"2\",\"enabled\":true,\"type\":\"max_bucket\",\"params\":{\"customBucket\":{\"id\":\"2-bucket\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"extendToTimeRange\":false,\"scaleMetricValues\":false,\"interval\":\"auto\",\"used_interval\":\"0ms\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},\"customMetric\":{\"id\":\"2-metric\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false}}},\"schema\":\"metric\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"group\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Max memory\"},\"style\":{}},{\"id\":\"ValueAxis-2\",\"name\":\"LeftAxis-2\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Overall Max of Count\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"circlesRadius\":1,\"interpolate\":\"linear\",\"lineWidth\":2,\"valueAxis\":\"ValueAxis-2\",\"data\":{\"id\":\"2\",\"label\":\"Overall Max of Count\"}}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"row\":true}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "6ea22e30-41e6-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE2OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - X Axis", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - X Axis\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"machine.os.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"includeIsRegex\":true,\"excludeIsRegex\":true},\"schema\":\"segment\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:21:51.973Z", + "id": "7aabe950-42b3-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:26:31.892Z", + "version": "WzE3NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "title": "XY - Reference line", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"XY - Reference line\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{\"emptyAsNull\":false},\"schema\":\"metric\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{},\"style\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"},\"style\":{}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true,\"circlesRadius\":1}],\"addTooltip\":true,\"detailedTooltip\":true,\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"addLegend\":true,\"legendPosition\":\"right\",\"fittingFunction\":\"linear\",\"times\":[],\"addTimeMarker\":false,\"truncateLegend\":true,\"maxLegendLines\":1,\"labels\":{},\"radiusRatio\":9,\"thresholdLine\":{\"show\":true,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:27:50.096Z", + "id": "50212500-42b4-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-24T19:27:50.096Z", + "version": "WzE4MywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"251e281d-84d7-4e5b-bbf0-d5a2c0f6d7ae\"},\"panelIndex\":\"251e281d-84d7-4e5b-bbf0-d5a2c0f6d7ae\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_251e281d-84d7-4e5b-bbf0-d5a2c0f6d7ae\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"b4502dff-fa27-4100-ae01-f3fcdddc6797\"},\"panelIndex\":\"b4502dff-fa27-4100-ae01-f3fcdddc6797\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_b4502dff-fa27-4100-ae01-f3fcdddc6797\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"40a6f9b8-fd47-4729-856a-768d6acc0d96\"},\"panelIndex\":\"40a6f9b8-fd47-4729-856a-768d6acc0d96\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_40a6f9b8-fd47-4729-856a-768d6acc0d96\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"8a2e6339-ef4d-4009-9ff1-6120fc29ae4c\"},\"panelIndex\":\"8a2e6339-ef4d-4009-9ff1-6120fc29ae4c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_8a2e6339-ef4d-4009-9ff1-6120fc29ae4c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"3923bd12-592d-4b7f-8c0b-4d9f5c73734e\"},\"panelIndex\":\"3923bd12-592d-4b7f-8c0b-4d9f5c73734e\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_3923bd12-592d-4b7f-8c0b-4d9f5c73734e\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"a29cfa6c-d526-4431-b625-f8f5a95f4599\"},\"panelIndex\":\"a29cfa6c-d526-4431-b625-f8f5a95f4599\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_a29cfa6c-d526-4431-b625-f8f5a95f4599\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"1d4377e5-2cf0-4c06-a45e-2aa3d372a249\"},\"panelIndex\":\"1d4377e5-2cf0-4c06-a45e-2aa3d372a249\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1d4377e5-2cf0-4c06-a45e-2aa3d372a249\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":45,\"w\":24,\"h\":15,\"i\":\"700d8c44-234a-40d5-9328-c23bf2681ca5\"},\"panelIndex\":\"700d8c44-234a-40d5-9328-c23bf2681ca5\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_700d8c44-234a-40d5-9328-c23bf2681ca5\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":60,\"w\":24,\"h\":15,\"i\":\"7d92182b-9fe5-49e6-bbe7-02422965aaad\"},\"panelIndex\":\"7d92182b-9fe5-49e6-bbe7-02422965aaad\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_7d92182b-9fe5-49e6-bbe7-02422965aaad\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":60,\"w\":24,\"h\":15,\"i\":\"6e1bc8d0-7f0d-4c31-8118-884c654dc919\"},\"panelIndex\":\"6e1bc8d0-7f0d-4c31-8118-884c654dc919\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_6e1bc8d0-7f0d-4c31-8118-884c654dc919\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":75,\"w\":24,\"h\":15,\"i\":\"44277177-a0be-4e30-8faa-64b13d73a5c3\"},\"panelIndex\":\"44277177-a0be-4e30-8faa-64b13d73a5c3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_44277177-a0be-4e30-8faa-64b13d73a5c3\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":75,\"w\":24,\"h\":15,\"i\":\"0ccbcac7-c6cd-4ece-b14c-05b8b5e51877\"},\"panelIndex\":\"0ccbcac7-c6cd-4ece-b14c-05b8b5e51877\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_0ccbcac7-c6cd-4ece-b14c-05b8b5e51877\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":90,\"w\":24,\"h\":15,\"i\":\"89ee9cfe-43b4-404e-b684-69b8e7041567\"},\"panelIndex\":\"89ee9cfe-43b4-404e-b684-69b8e7041567\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_89ee9cfe-43b4-404e-b684-69b8e7041567\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":90,\"w\":24,\"h\":15,\"i\":\"adf4ad44-0319-4555-b20e-e40e3066c37c\"},\"panelIndex\":\"adf4ad44-0319-4555-b20e-e40e3066c37c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_adf4ad44-0319-4555-b20e-e40e3066c37c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":105,\"w\":24,\"h\":15,\"i\":\"00941edd-c2f0-4fe0-bea6-24a970a62b5e\"},\"panelIndex\":\"00941edd-c2f0-4fe0-bea6-24a970a62b5e\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_00941edd-c2f0-4fe0-bea6-24a970a62b5e\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":105,\"w\":24,\"h\":15,\"i\":\"f83db75d-a9b2-4781-b025-596446774bd7\"},\"panelIndex\":\"f83db75d-a9b2-4781-b025-596446774bd7\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_f83db75d-a9b2-4781-b025-596446774bd7\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":120,\"w\":24,\"h\":15,\"i\":\"4c47b32b-b9ca-4458-98ab-3971e113884b\"},\"panelIndex\":\"4c47b32b-b9ca-4458-98ab-3971e113884b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4c47b32b-b9ca-4458-98ab-3971e113884b\"}]", + "timeRestore": false, + "title": "Convert to Lens - XY", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:28:19.290Z", + "id": "2849ec30-41ea-11ee-8333-6f5dc14c92aa", + "managed": false, + "references": [ + { + "id": "90f1e700-41e6-11ee-8333-6f5dc14c92aa", + "name": "251e281d-84d7-4e5b-bbf0-d5a2c0f6d7ae:panel_251e281d-84d7-4e5b-bbf0-d5a2c0f6d7ae", + "type": "visualization" + }, + { + "id": "55fe6ea0-41e8-11ee-8333-6f5dc14c92aa", + "name": "b4502dff-fa27-4100-ae01-f3fcdddc6797:panel_b4502dff-fa27-4100-ae01-f3fcdddc6797", + "type": "visualization" + }, + { + "id": "7c71b970-41e8-11ee-8333-6f5dc14c92aa", + "name": "40a6f9b8-fd47-4729-856a-768d6acc0d96:panel_40a6f9b8-fd47-4729-856a-768d6acc0d96", + "type": "visualization" + }, + { + "id": "df013010-41e4-11ee-8333-6f5dc14c92aa", + "name": "8a2e6339-ef4d-4009-9ff1-6120fc29ae4c:panel_8a2e6339-ef4d-4009-9ff1-6120fc29ae4c", + "type": "visualization" + }, + { + "id": "422f3700-41e9-11ee-8333-6f5dc14c92aa", + "name": "3923bd12-592d-4b7f-8c0b-4d9f5c73734e:panel_3923bd12-592d-4b7f-8c0b-4d9f5c73734e", + "type": "visualization" + }, + { + "id": "efa74900-41e8-11ee-8333-6f5dc14c92aa", + "name": "a29cfa6c-d526-4431-b625-f8f5a95f4599:panel_a29cfa6c-d526-4431-b625-f8f5a95f4599", + "type": "visualization" + }, + { + "id": "71089f80-41e9-11ee-8333-6f5dc14c92aa", + "name": "1d4377e5-2cf0-4c06-a45e-2aa3d372a249:panel_1d4377e5-2cf0-4c06-a45e-2aa3d372a249", + "type": "visualization" + }, + { + "id": "daf615d0-41e9-11ee-8333-6f5dc14c92aa", + "name": "700d8c44-234a-40d5-9328-c23bf2681ca5:panel_700d8c44-234a-40d5-9328-c23bf2681ca5", + "type": "visualization" + }, + { + "id": "0e345f10-41ea-11ee-8333-6f5dc14c92aa", + "name": "7d92182b-9fe5-49e6-bbe7-02422965aaad:panel_7d92182b-9fe5-49e6-bbe7-02422965aaad", + "type": "visualization" + }, + { + "id": "c8d81f60-41e4-11ee-8333-6f5dc14c92aa", + "name": "6e1bc8d0-7f0d-4c31-8118-884c654dc919:panel_6e1bc8d0-7f0d-4c31-8118-884c654dc919", + "type": "visualization" + }, + { + "id": "0d86ddd0-41e6-11ee-8333-6f5dc14c92aa", + "name": "44277177-a0be-4e30-8faa-64b13d73a5c3:panel_44277177-a0be-4e30-8faa-64b13d73a5c3", + "type": "visualization" + }, + { + "id": "9d27e680-41e8-11ee-8333-6f5dc14c92aa", + "name": "0ccbcac7-c6cd-4ece-b14c-05b8b5e51877:panel_0ccbcac7-c6cd-4ece-b14c-05b8b5e51877", + "type": "visualization" + }, + { + "id": "e1696100-41e5-11ee-8333-6f5dc14c92aa", + "name": "89ee9cfe-43b4-404e-b684-69b8e7041567:panel_89ee9cfe-43b4-404e-b684-69b8e7041567", + "type": "visualization" + }, + { + "id": "cfa306d0-41e8-11ee-8333-6f5dc14c92aa", + "name": "adf4ad44-0319-4555-b20e-e40e3066c37c:panel_adf4ad44-0319-4555-b20e-e40e3066c37c", + "type": "visualization" + }, + { + "id": "6ea22e30-41e6-11ee-8333-6f5dc14c92aa", + "name": "00941edd-c2f0-4fe0-bea6-24a970a62b5e:panel_00941edd-c2f0-4fe0-bea6-24a970a62b5e", + "type": "visualization" + }, + { + "id": "7aabe950-42b3-11ee-8b96-35b00ddf1245", + "name": "f83db75d-a9b2-4781-b025-596446774bd7:panel_f83db75d-a9b2-4781-b025-596446774bd7", + "type": "visualization" + }, + { + "id": "50212500-42b4-11ee-8b96-35b00ddf1245", + "name": "4c47b32b-b9ca-4458-98ab-3971e113884b:panel_4c47b32b-b9ca-4458-98ab-3971e113884b", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-24T19:28:19.290Z", + "version": "WzE4NywyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/dashboard.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/dashboard.json new file mode 100644 index 0000000000000..6bd0425a656bc --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/dashboard.json @@ -0,0 +1,80 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"3c82904a-abe8-4fa2-902d-b6e59bfbcc9f\"},\"panelIndex\":\"3c82904a-abe8-4fa2-902d-b6e59bfbcc9f\",\"embeddableConfig\":{\"savedVis\":{\"id\":\"\",\"title\":\"My TSVB to Lens viz 1\",\"description\":\"\",\"type\":\"metrics\",\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3c3fee3d-c847-4434-8ce2-778a477468d6\",\"type\":\"timeseries\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"59ed28f6-f82d-443b-8d93-4c11cfab248c\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"84730d82-78fa-485a-8ba4-259ef0de812b\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_3c82904a-abe8-4fa2-902d-b6e59bfbcc9f_0_index_pattern\"},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}}},\"enhancements\":{}}}]", + "timeRestore": false, + "title": "Convert to Lens - Dashboard - TSVB - 1", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-30T01:45:13.001Z", + "id": "34441700-46d5-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "3c82904a-abe8-4fa2-902d-b6e59bfbcc9f:metrics_3c82904a-abe8-4fa2-902d-b6e59bfbcc9f_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-30T01:45:13.001Z", + "version": "Wzc0NCwyXQ==" +} + +{ + "id": "b5bda8a0-4752-11ee-8b96-35b00ddf1245", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2023-08-30T16:32:11.497Z", + "created_at": "2023-08-30T16:32:11.497Z", + "version": "Wzc2NSwyXQ==", + "attributes": { + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "description": "", + "timeRestore": false, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"e73a1405-0795-4848-8afa-6ff1c1b22a9f\"},\"panelIndex\":\"e73a1405-0795-4848-8afa-6ff1c1b22a9f\",\"embeddableConfig\":{\"savedVis\":{\"id\":\"\",\"title\":\"\",\"description\":\"\",\"type\":\"metrics\",\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"92cf26ab-9131-41d1-985c-92b1b530bf19\",\"type\":\"timeseries\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c8a720bb-1c4e-40ff-951e-faeca9ef6bfd\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"24f8081c-0c17-44ed-9e6a-d64051a3afcd\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_e73a1405-0795-4848-8afa-6ff1c1b22a9f_0_index_pattern\"},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}}},\"enhancements\":{}}}]", + "title": "Convert to Lens - Dashboard - TSVB - 2", + "version": 1 + }, + "references": [ + { + "id": "logstash-*", + "name": "3c82904a-abe8-4fa2-902d-b6e59bfbcc9f:metrics_3c82904a-abe8-4fa2-902d-b6e59bfbcc9f_0_index_pattern", + "type": "index-pattern" + } + ], + "managed": false, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/gauge.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/gauge.json new file mode 100644 index 0000000000000..e8737715bde28 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/gauge.json @@ -0,0 +1,326 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Ignore global filters series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Ignore global filters series\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"26818aef-f3b3-4586-9431-5efd43ffe726\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"78d9d18b-08fa-4982-a08d-3ff5784128d8\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"ab3ff036-8a95-465e-956f-fce647677d4c\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"ignore_global_filter\":1}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"36f7e3e0-45fa-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:27:13.844Z", + "id": "6b3e2740-45fa-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:30:08.539Z", + "version": "WzMyMiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Ignore global filters panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Ignore global filters panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"81650dfd-5dc4-4d68-a6fc-ace6963b86c1\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"3904f377-028a-4926-a01a-d602716a19fe\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"37b14ab1-1a74-4862-8131-318680d85790\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"a24622b0-45fa-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"ignore_global_filter\":1,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:29:42.277Z", + "id": "c3b73b50-45fa-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:29:42.277Z", + "version": "WzMxOSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Basic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"49b0e452-7e0c-4a89-b2fc-26fee1d0468f\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"ae2570cc-2c38-4157-b934-ec708da87138\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"d47fcac1-2a7d-4ec2-bda7-e78f278f5035\",\"type\":\"count\",\"field\":\"bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"81b874f0-45e9-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T21:26:53.961Z", + "id": "9bdb6f90-45e9-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T21:36:12.105Z", + "version": "WzI2NSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Value count", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Value count\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"49b0e452-7e0c-4a89-b2fc-26fee1d0468f\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"ae2570cc-2c38-4157-b934-ec708da87138\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"d47fcac1-2a7d-4ec2-bda7-e78f278f5035\",\"type\":\"value_count\",\"field\":\"bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"81b874f0-45e9-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T21:36:28.791Z", + "id": "f27b8870-45ea-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T21:36:28.791Z", + "version": "WzI2OCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Unsupported metric", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Unsupported metric\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"49b0e452-7e0c-4a89-b2fc-26fee1d0468f\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"ae2570cc-2c38-4157-b934-ec708da87138\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"unit\":\"\",\"id\":\"d47fcac1-2a7d-4ec2-bda7-e78f278f5035\",\"type\":\"positive_rate\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"81b874f0-45e9-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T21:40:30.674Z", + "id": "82a7cc10-45eb-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T21:40:30.674Z", + "version": "WzI3MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Invalid panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Invalid panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"49b0e452-7e0c-4a89-b2fc-26fee1d0468f\",\"type\":\"gauge\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"ae2570cc-2c38-4157-b934-ec708da87138\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"unit\":\"\",\"id\":\"d47fcac1-2a7d-4ec2-bda7-e78f278f5035\",\"type\":\"value_count\",\"field\":null}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"id\":\"81b874f0-45e9-11ee-9592-75fbc2f21d6e\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T21:42:08.615Z", + "id": "bd088f70-45eb-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T21:42:08.615Z", + "version": "WzI3NSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Gauge - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Gauge - Color ranges\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"gauge_color_rules\":[{\"value\":10,\"id\":\"40734a80-45ec-11ee-9592-75fbc2f21d6e\",\"operator\":\"gte\",\"gauge\":\"rgba(84,179,153,1)\"},{\"value\":100,\"id\":\"78d35be0-45ec-11ee-9592-75fbc2f21d6e\",\"operator\":\"gte\",\"gauge\":\"rgba(84,160,0,1)\"}],\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"gauge_width\":10,\"id\":\"70eaf139-d0b0-449d-b523-513e1ed61dd4\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"02b8483a-98c8-4ce4-9890-32f88677fb63\",\"line_width\":1,\"metrics\":[{\"id\":\"d90891e0-7d10-4902-b131-4a789dc72304\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"extension.raw\",\"time_range_mode\":\"entire_time_range\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"entire_time_range\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"gauge\",\"use_kibana_indexes\":true,\"gauge_max\":\"\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T21:50:20.695Z", + "id": "e255db60-45ec-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T21:50:20.695Z", + "version": "WzMwMCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"632858a2-560d-4975-b34b-a20152962616\"},\"panelIndex\":\"632858a2-560d-4975-b34b-a20152962616\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_632858a2-560d-4975-b34b-a20152962616\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"e4553b8f-08ed-4877-93e9-bd45ef05a6c1\"},\"panelIndex\":\"e4553b8f-08ed-4877-93e9-bd45ef05a6c1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_e4553b8f-08ed-4877-93e9-bd45ef05a6c1\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"18a9d8d6-06d3-4cab-be55-44e023b53875\"},\"panelIndex\":\"18a9d8d6-06d3-4cab-be55-44e023b53875\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_18a9d8d6-06d3-4cab-be55-44e023b53875\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"e2bbe60e-4f37-4ba4-8f36-37321e77db26\"},\"panelIndex\":\"e2bbe60e-4f37-4ba4-8f36-37321e77db26\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_e2bbe60e-4f37-4ba4-8f36-37321e77db26\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"523a3a59-0d74-4960-aabd-0e38a483471f\"},\"panelIndex\":\"523a3a59-0d74-4960-aabd-0e38a483471f\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_523a3a59-0d74-4960-aabd-0e38a483471f\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"198e2fbe-1b5f-49ea-bed5-4ed3b6901dfa\"},\"panelIndex\":\"198e2fbe-1b5f-49ea-bed5-4ed3b6901dfa\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_198e2fbe-1b5f-49ea-bed5-4ed3b6901dfa\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"b50b52c9-dd2e-412d-b795-4762197297ab\"},\"panelIndex\":\"b50b52c9-dd2e-412d-b795-4762197297ab\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_b50b52c9-dd2e-412d-b795-4762197297ab\"}]", + "timeRestore": false, + "title": "Convert to Lens - TSVB - Gauge", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:36:33.316Z", + "id": "25d52c70-45ec-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "9bdb6f90-45e9-11ee-8b96-35b00ddf1245", + "name": "632858a2-560d-4975-b34b-a20152962616:panel_632858a2-560d-4975-b34b-a20152962616", + "type": "visualization" + }, + { + "id": "f27b8870-45ea-11ee-8b96-35b00ddf1245", + "name": "e4553b8f-08ed-4877-93e9-bd45ef05a6c1:panel_e4553b8f-08ed-4877-93e9-bd45ef05a6c1", + "type": "visualization" + }, + { + "id": "82a7cc10-45eb-11ee-8b96-35b00ddf1245", + "name": "18a9d8d6-06d3-4cab-be55-44e023b53875:panel_18a9d8d6-06d3-4cab-be55-44e023b53875", + "type": "visualization" + }, + { + "id": "bd088f70-45eb-11ee-8b96-35b00ddf1245", + "name": "e2bbe60e-4f37-4ba4-8f36-37321e77db26:panel_e2bbe60e-4f37-4ba4-8f36-37321e77db26", + "type": "visualization" + }, + { + "id": "e255db60-45ec-11ee-8b96-35b00ddf1245", + "name": "523a3a59-0d74-4960-aabd-0e38a483471f:panel_523a3a59-0d74-4960-aabd-0e38a483471f", + "type": "visualization" + }, + { + "id": "6b3e2740-45fa-11ee-8b96-35b00ddf1245", + "name": "198e2fbe-1b5f-49ea-bed5-4ed3b6901dfa:panel_198e2fbe-1b5f-49ea-bed5-4ed3b6901dfa", + "type": "visualization" + }, + { + "id": "c3b73b50-45fa-11ee-8b96-35b00ddf1245", + "name": "b50b52c9-dd2e-412d-b795-4762197297ab:panel_b50b52c9-dd2e-412d-b795-4762197297ab", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-28T23:36:33.316Z", + "version": "WzMyNSwyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/metric.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/metric.json new file mode 100644 index 0000000000000..883662daa1ead --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/metric.json @@ -0,0 +1,364 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Basic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:42:21.477Z", + "id": "883bf550-45fc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:42:21.477Z", + "version": "WzMzMCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Static value", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Static value\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"static\",\"value\":\"10\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:44:58.684Z", + "id": "e5efd7c0-45fc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:44:58.684Z", + "version": "WzMzNiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Agg with params\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"value_count\",\"value\":\"10\",\"field\":\"bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:46:09.400Z", + "id": "10163f80-45fd-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:46:09.400Z", + "version": "WzM0MSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Unsupported metric", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Unsupported metric\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"unit\":\"\",\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"positive_rate\",\"value\":\"10\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:47:43.258Z", + "id": "4807d7a0-45fd-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:47:43.258Z", + "version": "WzM0NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Invalid panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Invalid panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"unit\":\"\",\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"value_count\",\"value\":\"10\",\"field\":null}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:48:54.844Z", + "id": "72b2ffc0-45fd-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:48:54.844Z", + "version": "WzM1MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Color ranges\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"721de4f6-2ced-4a1f-8715-705a843719f2\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f04ed2eb-83b3-4f96-acfc-a1e5282b17a3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"unit\":\"\",\"id\":\"267a6290-0612-4f77-9c96-2526416e31ce\",\"type\":\"count\",\"value\":\"10\",\"field\":null}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"value\":10,\"id\":\"70140760-45fc-11ee-a985-93d7c1e8c7ef\",\"operator\":\"gte\",\"background_color\":\"rgba(84,179,153,1)\"}],\"isModelInvalid\":false,\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:52:33.868Z", + "id": "f53f68c0-45fd-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:52:33.868Z", + "version": "WzM2MSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Ignore global filters series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Ignore global filters series\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"4e1162b5-c876-4218-a32b-714a5fc43dd5\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"a75a6df2-fa31-4fe5-a56f-4659ac07b13b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"78332407-dedf-4425-a12f-50ac8edaf205\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"ignore_global_filter\":1}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"123c3750-45fe-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:54:57.449Z", + "id": "4ad42190-45fe-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:54:57.449Z", + "version": "WzM2OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Metric - Ignore global filters panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Metric - Ignore global filters panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"4e1162b5-c876-4218-a32b-714a5fc43dd5\",\"type\":\"metric\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"a75a6df2-fa31-4fe5-a56f-4659ac07b13b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"78332407-dedf-4425-a12f-50ac8edaf205\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"ignore_global_filter\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"background_color_rules\":[{\"id\":\"123c3750-45fe-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"ignore_global_filter\":1,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:55:29.897Z", + "id": "5e2b4d90-45fe-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-28T23:55:29.897Z", + "version": "WzM3NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"2928f619-bab0-4d03-98f5-dcd7aa4ce34c\"},\"panelIndex\":\"2928f619-bab0-4d03-98f5-dcd7aa4ce34c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2928f619-bab0-4d03-98f5-dcd7aa4ce34c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"659fdd1b-e353-4b37-89d7-863717c471cf\"},\"panelIndex\":\"659fdd1b-e353-4b37-89d7-863717c471cf\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_659fdd1b-e353-4b37-89d7-863717c471cf\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"4674432d-4109-4997-80d7-6612cba5c93b\"},\"panelIndex\":\"4674432d-4109-4997-80d7-6612cba5c93b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4674432d-4109-4997-80d7-6612cba5c93b\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"c361b821-7c75-4f29-b57c-c75d0c209ffa\"},\"panelIndex\":\"c361b821-7c75-4f29-b57c-c75d0c209ffa\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_c361b821-7c75-4f29-b57c-c75d0c209ffa\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"dce0771c-9f30-4d13-8b57-093ca9a032f1\"},\"panelIndex\":\"dce0771c-9f30-4d13-8b57-093ca9a032f1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_dce0771c-9f30-4d13-8b57-093ca9a032f1\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"22338925-373b-48dd-902a-52f946e663a2\"},\"panelIndex\":\"22338925-373b-48dd-902a-52f946e663a2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_22338925-373b-48dd-902a-52f946e663a2\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"97fe35c8-2e6a-4ec4-b1e3-9070fc3d96cb\"},\"panelIndex\":\"97fe35c8-2e6a-4ec4-b1e3-9070fc3d96cb\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_97fe35c8-2e6a-4ec4-b1e3-9070fc3d96cb\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":45,\"w\":24,\"h\":15,\"i\":\"0f0adf4e-d5a0-47cc-bfa7-4f5000ec8d5d\"},\"panelIndex\":\"0f0adf4e-d5a0-47cc-bfa7-4f5000ec8d5d\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_0f0adf4e-d5a0-47cc-bfa7-4f5000ec8d5d\"}]", + "timeRestore": false, + "title": "Convert to Lens - TSVB - Metric", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-28T23:55:34.411Z", + "id": "9cbc3800-45fc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "883bf550-45fc-11ee-8b96-35b00ddf1245", + "name": "2928f619-bab0-4d03-98f5-dcd7aa4ce34c:panel_2928f619-bab0-4d03-98f5-dcd7aa4ce34c", + "type": "visualization" + }, + { + "id": "e5efd7c0-45fc-11ee-8b96-35b00ddf1245", + "name": "659fdd1b-e353-4b37-89d7-863717c471cf:panel_659fdd1b-e353-4b37-89d7-863717c471cf", + "type": "visualization" + }, + { + "id": "10163f80-45fd-11ee-8b96-35b00ddf1245", + "name": "4674432d-4109-4997-80d7-6612cba5c93b:panel_4674432d-4109-4997-80d7-6612cba5c93b", + "type": "visualization" + }, + { + "id": "4807d7a0-45fd-11ee-8b96-35b00ddf1245", + "name": "c361b821-7c75-4f29-b57c-c75d0c209ffa:panel_c361b821-7c75-4f29-b57c-c75d0c209ffa", + "type": "visualization" + }, + { + "id": "72b2ffc0-45fd-11ee-8b96-35b00ddf1245", + "name": "dce0771c-9f30-4d13-8b57-093ca9a032f1:panel_dce0771c-9f30-4d13-8b57-093ca9a032f1", + "type": "visualization" + }, + { + "id": "f53f68c0-45fd-11ee-8b96-35b00ddf1245", + "name": "22338925-373b-48dd-902a-52f946e663a2:panel_22338925-373b-48dd-902a-52f946e663a2", + "type": "visualization" + }, + { + "id": "4ad42190-45fe-11ee-8b96-35b00ddf1245", + "name": "97fe35c8-2e6a-4ec4-b1e3-9070fc3d96cb:panel_97fe35c8-2e6a-4ec4-b1e3-9070fc3d96cb", + "type": "visualization" + }, + { + "id": "5e2b4d90-45fe-11ee-8b96-35b00ddf1245", + "name": "0f0adf4e-d5a0-47cc-bfa7-4f5000ec8d5d:panel_0f0adf4e-d5a0-47cc-bfa7-4f5000ec8d5d", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-28T23:55:34.411Z", + "version": "WzM3NSwyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/table.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/table.json new file mode 100644 index 0000000000000..d7b1b77021506 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/table.json @@ -0,0 +1,554 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Basic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T15:15:22.473Z", + "id": "df820d90-467e-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T15:15:22.473Z", + "version": "WzU5NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Invalid panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Invalid panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"max\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T15:18:18.035Z", + "id": "4826b030-467f-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T15:18:18.035Z", + "version": "WzYwMCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Unsupported agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Unsupported agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"sum_of_squares\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T15:20:16.506Z", + "id": "8ec3eda0-467f-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T15:20:16.506Z", + "version": "WzYwNiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Sibling pipeline agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\",\"field\":\"machine.ram\"},{\"sigma\":\"\",\"id\":\"8735df70-468a-11ee-a68b-87922c3aebc1\",\"type\":\"avg_bucket\",\"field\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T16:39:06.245Z", + "id": "91e8d350-468a-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T16:39:06.245Z", + "version": "WzYxMiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Parent pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Parent pipeline agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"last_value\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\",\"field\":\"machine.ram\"},{\"sigma\":\"\",\"id\":\"8735df70-468a-11ee-a68b-87922c3aebc1\",\"type\":\"cumulative_sum\",\"field\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"a7ca7ac0-468a-11ee-a68b-87922c3aebc1\"}]}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T16:40:24.195Z", + "id": "c05f0d30-468a-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T16:40:24.195Z", + "version": "WzYyMCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Invalid agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Invalid agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"a7ca7ac0-468a-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":\"clientip\",\"aggregate_function\":\"cumulative_sum\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:17:04.129Z", + "id": "c8783800-46b9-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:30:02.278Z", + "version": "WzY1NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Different agg function", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Different agg function\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"a7ca7ac0-468a-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":\"bytes\",\"aggregate_function\":\"sum\"},{\"time_range_mode\":\"entire_time_range\",\"id\":\"2bd67380-46ba-11ee-a68b-87922c3aebc1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bd67381-46ba-11ee-a68b-87922c3aebc1\",\"type\":\"static\",\"value\":\"10\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"b37c6740-46ba-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":\"bytes\",\"aggregate_function\":\"min\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:25:11.576Z", + "id": "eb02e180-46ba-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:29:46.655Z", + "version": "WzY1MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Last value mode", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Last value mode\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"last_value\",\"id\":\"3a79b060-f939-49b1-adec-ca15a197a5fa\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c894474a-6350-4344-bc4c-13ae0510890b\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2bb39ab6-1208-4fdf-92ec-110d038aa088\",\"type\":\"count\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"a7ca7ac0-468a-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":null,\"aggregate_function\":null}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"1m\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"b6360040-467e-11ee-9ec1-951cd4204d17\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.ram\",\"pivot_type\":\"number\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:29:06.397Z", + "id": "76f9b8d0-46bb-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:30:45.571Z", + "version": "WzY1NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Static value", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Static value\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"6f7004ad-fdbe-4098-a692-70371a8270fc\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"32fda392-c769-4045-b272-2ef8b25c66bb\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1e0915c6-a89e-4049-93ed-f4780a7eee38\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0},{\"id\":\"fd19a8d0-46bb-11ee-a68b-87922c3aebc1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"fd19a8d1-46bb-11ee-a68b-87922c3aebc1\",\"type\":\"static\",\"value\":\"10\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"e62a13d0-46bb-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.os.raw\",\"pivot_type\":\"string\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:33:22.363Z", + "id": "0f8b08b0-46bc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:33:22.363Z", + "version": "WzY2NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Agg by", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Agg by\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"6f7004ad-fdbe-4098-a692-70371a8270fc\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"32fda392-c769-4045-b272-2ef8b25c66bb\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1e0915c6-a89e-4049-93ed-f4780a7eee38\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"2ab7ab20-46bc-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":\"clientip\",\"aggregate_function\":\"sum\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"e62a13d0-46bb-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.os.raw\",\"pivot_type\":\"string\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:35:11.832Z", + "id": "50caad80-46bc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:35:11.832Z", + "version": "WzY3MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - GroupBy label", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - GroupBy label\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"6f7004ad-fdbe-4098-a692-70371a8270fc\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"32fda392-c769-4045-b272-2ef8b25c66bb\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1e0915c6-a89e-4049-93ed-f4780a7eee38\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"2ab7ab20-46bc-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":null,\"aggregate_function\":null}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"e62a13d0-46bb-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.os.raw\",\"pivot_type\":\"string\",\"pivot_label\":\"test\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:36:56.525Z", + "id": "8f318fd0-46bc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:37:27.071Z", + "version": "WzY4MCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Color ranges", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Color ranges\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"6f7004ad-fdbe-4098-a692-70371a8270fc\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"32fda392-c769-4045-b272-2ef8b25c66bb\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1e0915c6-a89e-4049-93ed-f4780a7eee38\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"value\":10,\"id\":\"2ab7ab20-46bc-11ee-a68b-87922c3aebc1\",\"operator\":\"gte\",\"text\":\"rgba(84,179,153,1)\"},{\"value\":100,\"id\":\"d64cd6e0-46bc-11ee-a68b-87922c3aebc1\",\"operator\":\"gte\",\"text\":\"rgba(84,160,0,1)\"}],\"aggregate_by\":null,\"aggregate_function\":null,\"offset_time\":\"\",\"value_template\":\"{{value}}\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"e62a13d0-46bb-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.os.raw\",\"pivot_type\":\"string\",\"pivot_label\":\"\",\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:39:46.833Z", + "id": "f4b48010-46bc-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:39:46.833Z", + "version": "WzY5MSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Table - Ignore global filters panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Table - Ignore global filters panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"6f7004ad-fdbe-4098-a692-70371a8270fc\",\"type\":\"table\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"32fda392-c769-4045-b272-2ef8b25c66bb\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1e0915c6-a89e-4049-93ed-f4780a7eee38\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"color_rules\":[{\"id\":\"06e3cde0-46bd-11ee-a68b-87922c3aebc1\"}],\"aggregate_by\":null,\"aggregate_function\":null,\"offset_time\":\"\",\"value_template\":\"{{value}}\"}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"e62a13d0-46bb-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"pivot_id\":\"machine.os.raw\",\"pivot_type\":\"string\",\"pivot_label\":\"\",\"ignore_global_filter\":1,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:42:01.286Z", + "id": "44d86660-46bd-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T22:42:01.286Z", + "version": "WzY5OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"dcd38e55-16f4-41fd-8304-cc3cc27d5f5f\"},\"panelIndex\":\"dcd38e55-16f4-41fd-8304-cc3cc27d5f5f\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_dcd38e55-16f4-41fd-8304-cc3cc27d5f5f\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"c6588b33-3920-4319-ab76-e44198538188\"},\"panelIndex\":\"c6588b33-3920-4319-ab76-e44198538188\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_c6588b33-3920-4319-ab76-e44198538188\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"a47724a4-aa59-4184-bc97-187a48e42d7d\"},\"panelIndex\":\"a47724a4-aa59-4184-bc97-187a48e42d7d\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_a47724a4-aa59-4184-bc97-187a48e42d7d\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"0e8fc6ec-c83b-4f95-b3d1-90c3b05b781a\"},\"panelIndex\":\"0e8fc6ec-c83b-4f95-b3d1-90c3b05b781a\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_0e8fc6ec-c83b-4f95-b3d1-90c3b05b781a\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"d9a2db0d-801f-434a-965f-7262b81978f6\"},\"panelIndex\":\"d9a2db0d-801f-434a-965f-7262b81978f6\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_d9a2db0d-801f-434a-965f-7262b81978f6\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"716d1b0a-dcc0-43df-a65f-e4cf4262b65b\"},\"panelIndex\":\"716d1b0a-dcc0-43df-a65f-e4cf4262b65b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_716d1b0a-dcc0-43df-a65f-e4cf4262b65b\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"47916b5e-daa4-4797-90ab-63c279bfa33e\"},\"panelIndex\":\"47916b5e-daa4-4797-90ab-63c279bfa33e\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_47916b5e-daa4-4797-90ab-63c279bfa33e\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":45,\"w\":24,\"h\":15,\"i\":\"5cd56fe8-c4f9-4456-8f04-dae6908b9447\"},\"panelIndex\":\"5cd56fe8-c4f9-4456-8f04-dae6908b9447\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5cd56fe8-c4f9-4456-8f04-dae6908b9447\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":60,\"w\":24,\"h\":15,\"i\":\"95f2ad93-84ed-4368-8dd0-b4123841ff09\"},\"panelIndex\":\"95f2ad93-84ed-4368-8dd0-b4123841ff09\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_95f2ad93-84ed-4368-8dd0-b4123841ff09\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":60,\"w\":24,\"h\":15,\"i\":\"f99a4c9d-b63f-4035-a9fd-dac453365186\"},\"panelIndex\":\"f99a4c9d-b63f-4035-a9fd-dac453365186\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_f99a4c9d-b63f-4035-a9fd-dac453365186\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":75,\"w\":24,\"h\":15,\"i\":\"e72880a5-fcc9-4cb0-977f-71068271d02d\"},\"panelIndex\":\"e72880a5-fcc9-4cb0-977f-71068271d02d\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_e72880a5-fcc9-4cb0-977f-71068271d02d\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":75,\"w\":24,\"h\":15,\"i\":\"d4afd8d0-b901-44d6-8c2a-9a53d22599dd\"},\"panelIndex\":\"d4afd8d0-b901-44d6-8c2a-9a53d22599dd\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_d4afd8d0-b901-44d6-8c2a-9a53d22599dd\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":90,\"w\":24,\"h\":15,\"i\":\"b0d5cd74-5b12-4856-9ee9-82a666a4ea05\"},\"panelIndex\":\"b0d5cd74-5b12-4856-9ee9-82a666a4ea05\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_b0d5cd74-5b12-4856-9ee9-82a666a4ea05\"}]", + "timeRestore": false, + "title": "Convert to Lens - TSVB - Table", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T22:42:06.219Z", + "id": "eacf45a0-467e-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "df820d90-467e-11ee-8b96-35b00ddf1245", + "name": "dcd38e55-16f4-41fd-8304-cc3cc27d5f5f:panel_dcd38e55-16f4-41fd-8304-cc3cc27d5f5f", + "type": "visualization" + }, + { + "id": "4826b030-467f-11ee-8b96-35b00ddf1245", + "name": "c6588b33-3920-4319-ab76-e44198538188:panel_c6588b33-3920-4319-ab76-e44198538188", + "type": "visualization" + }, + { + "id": "8ec3eda0-467f-11ee-8b96-35b00ddf1245", + "name": "a47724a4-aa59-4184-bc97-187a48e42d7d:panel_a47724a4-aa59-4184-bc97-187a48e42d7d", + "type": "visualization" + }, + { + "id": "91e8d350-468a-11ee-8b96-35b00ddf1245", + "name": "0e8fc6ec-c83b-4f95-b3d1-90c3b05b781a:panel_0e8fc6ec-c83b-4f95-b3d1-90c3b05b781a", + "type": "visualization" + }, + { + "id": "c05f0d30-468a-11ee-8b96-35b00ddf1245", + "name": "d9a2db0d-801f-434a-965f-7262b81978f6:panel_d9a2db0d-801f-434a-965f-7262b81978f6", + "type": "visualization" + }, + { + "id": "c8783800-46b9-11ee-8b96-35b00ddf1245", + "name": "716d1b0a-dcc0-43df-a65f-e4cf4262b65b:panel_716d1b0a-dcc0-43df-a65f-e4cf4262b65b", + "type": "visualization" + }, + { + "id": "eb02e180-46ba-11ee-8b96-35b00ddf1245", + "name": "47916b5e-daa4-4797-90ab-63c279bfa33e:panel_47916b5e-daa4-4797-90ab-63c279bfa33e", + "type": "visualization" + }, + { + "id": "76f9b8d0-46bb-11ee-8b96-35b00ddf1245", + "name": "5cd56fe8-c4f9-4456-8f04-dae6908b9447:panel_5cd56fe8-c4f9-4456-8f04-dae6908b9447", + "type": "visualization" + }, + { + "id": "0f8b08b0-46bc-11ee-8b96-35b00ddf1245", + "name": "95f2ad93-84ed-4368-8dd0-b4123841ff09:panel_95f2ad93-84ed-4368-8dd0-b4123841ff09", + "type": "visualization" + }, + { + "id": "50caad80-46bc-11ee-8b96-35b00ddf1245", + "name": "f99a4c9d-b63f-4035-a9fd-dac453365186:panel_f99a4c9d-b63f-4035-a9fd-dac453365186", + "type": "visualization" + }, + { + "id": "8f318fd0-46bc-11ee-8b96-35b00ddf1245", + "name": "e72880a5-fcc9-4cb0-977f-71068271d02d:panel_e72880a5-fcc9-4cb0-977f-71068271d02d", + "type": "visualization" + }, + { + "id": "f4b48010-46bc-11ee-8b96-35b00ddf1245", + "name": "d4afd8d0-b901-44d6-8c2a-9a53d22599dd:panel_d4afd8d0-b901-44d6-8c2a-9a53d22599dd", + "type": "visualization" + }, + { + "id": "44d86660-46bd-11ee-8b96-35b00ddf1245", + "name": "b0d5cd74-5b12-4856-9ee9-82a666a4ea05:panel_b0d5cd74-5b12-4856-9ee9-82a666a4ea05", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-29T22:42:06.219Z", + "version": "WzcwMCwyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/timeseries.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/timeseries.json new file mode 100644 index 0000000000000..706d1e9fe1747 --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/timeseries.json @@ -0,0 +1,521 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Timeseries - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Basic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"type\":\"timeseries\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:29:19.635Z", + "id": "17fcbe30-4603-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:29:53.582Z", + "version": "WzM4NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "title": "Timeseries - Reference line", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Reference line\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"line_width\":1,\"metrics\":[{\"id\":\"7f8229a0-460d-11ee-9837-135820940af5\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"label\":\"\"},{\"id\":\"f2a2aa90-460d-11ee-9837-135820940af5\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"f2a2aa91-460d-11ee-9837-135820940af5\",\"type\":\"static\",\"value\":\"10\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0,\"label\":\"\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:33:33.217Z", + "id": "af224910-4603-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T01:47:50.568Z", + "version": "WzQ3NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "title": "Timeseries - Agg with params", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Agg with params\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"line_width\":1,\"metrics\":[{\"unit\":\"\",\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"positive_rate\",\"value\":\"10\",\"field\":\"machine.ram\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"label\":\"\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:34:55.310Z", + "id": "e010aee0-4603-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:34:55.310Z", + "version": "WzM5OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "title": "Timeseries - Invalid panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Invalid panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"line_width\":1,\"metrics\":[{\"unit\":\"\",\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"positive_rate\",\"value\":\"10\",\"field\":null}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"label\":\"\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:36:12.342Z", + "id": "0dfad560-4604-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:36:12.342Z", + "version": "WzQwMywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "title": "Timeseries - Unsupported aggregations", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Unsupported aggregations\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"line_width\":1,\"metrics\":[{\"unit\":\"\",\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"sum_of_squares\",\"value\":\"10\",\"field\":\"machine.ram\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"label\":\"\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:36:50.362Z", + "id": "24a439a0-4604-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:36:50.362Z", + "version": "WzQwNywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "title": "Timeseries - Parent pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"id\":\"629a7fd0-4604-11ee-a985-93d7c1e8c7ef\",\"type\":\"count\"},{\"field\":\"629a7fd0-4604-11ee-a985-93d7c1e8c7ef\",\"id\":\"de58f750-4604-11ee-a985-93d7c1e8c7ef\",\"type\":\"cumulative_sum\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"extension.raw\",\"time_range_mode\":\"entire_time_range\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"entire_time_range\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"},\"title\":\"Timeseries - Parent pipeline agg\",\"type\":\"metrics\"}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:44:22.549Z", + "id": "322a7c50-4605-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:44:22.549Z", + "version": "WzQxOCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Timeseries - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"39e9d894-19a4-4b79-9326-e06eed8b5e25\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"38652a6e-49e1-486a-b283-cf84f1ae0441\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"id\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"type\":\"count\"},{\"field\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"id\":\"3edd10c0-4605-11ee-a985-93d7c1e8c7ef\",\"sigma\":\"\",\"type\":\"avg_bucket\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"extension.raw\",\"time_range_mode\":\"entire_time_range\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"entire_time_range\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"},\"title\":\"Timeseries - Sibling pipeline agg\",\"type\":\"metrics\"}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:45:48.375Z", + "id": "65527e70-4605-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:45:48.375Z", + "version": "WzQyNywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Timeseries - Ignore global filters series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Ignore global filters series\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"39e9d894-19a4-4b79-9326-e06eed8b5e25\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"38652a6e-49e1-486a-b283-cf84f1ae0441\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"id\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"time_range_mode\":\"entire_time_range\",\"ignore_global_filter\":1}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"entire_time_range\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:46:44.783Z", + "id": "86f1abf0-4605-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:46:44.783Z", + "version": "WzQzMywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Timeseries - Ignore global filters panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Ignore global filters panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"39e9d894-19a4-4b79-9326-e06eed8b5e25\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"38652a6e-49e1-486a-b283-cf84f1ae0441\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"id\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"ignore_global_filter\":0}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"ignore_global_filter\":1,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T00:47:25.582Z", + "id": "9f431ae0-4605-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T00:47:25.582Z", + "version": "WzQzOCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"extension\",\"key\":\"extension\",\"negate\":false,\"params\":{\"query\":\"css\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"extension\":\"css\"}}}]}" + }, + "title": "Timeseries - Test", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - Test\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0,\"id\":\"39e9d894-19a4-4b79-9326-e06eed8b5e25\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"38652a6e-49e1-486a-b283-cf84f1ae0441\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"id\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"type\":\"count\"},{\"field\":\"049c454d-5a6c-4daf-96b7-8de0a40a23cc\",\"id\":\"3edd10c0-4605-11ee-a985-93d7c1e8c7ef\",\"sigma\":\"\",\"type\":\"avg_bucket\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"extension.raw\",\"time_range_mode\":\"entire_time_range\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"entire_time_range\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"timeseries\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T01:08:39.409Z", + "id": "9685ae10-4608-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T01:08:39.409Z", + "version": "WzQ0NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"machine.os : ios\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Timeseries - With query", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - With query\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"type\":\"timeseries\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T01:12:16.100Z", + "id": "17ae1a40-4609-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T01:12:16.100Z", + "version": "WzQ2MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"extension\",\"key\":\"extension\",\"negate\":false,\"params\":{\"query\":\"css\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"extension\":\"css\"}}}]}" + }, + "title": "Timeseries - With filter", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Timeseries - With filter\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54a209d-8bb9-45ca-90e5-92ee93498f4d\",\"type\":\"timeseries\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"3735cb41-cc73-423a-91b7-1dbf91e76899\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"73f6d087-b8cb-45b4-b768-b1ce67451530\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T01:10:41.622Z", + "id": "df5de760-4608-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T01:11:14.372Z", + "version": "WzQ1NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"8bd35619-2857-479e-b2ad-c42177db8f4c\"},\"panelIndex\":\"8bd35619-2857-479e-b2ad-c42177db8f4c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_8bd35619-2857-479e-b2ad-c42177db8f4c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"08411e04-5232-472e-be83-553586e84255\"},\"panelIndex\":\"08411e04-5232-472e-be83-553586e84255\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_08411e04-5232-472e-be83-553586e84255\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"59afa58a-fa67-4af3-b422-a63eb4a250fe\"},\"panelIndex\":\"59afa58a-fa67-4af3-b422-a63eb4a250fe\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_59afa58a-fa67-4af3-b422-a63eb4a250fe\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"fc8df122-75b6-42de-9a08-348f45f027c4\"},\"panelIndex\":\"fc8df122-75b6-42de-9a08-348f45f027c4\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_fc8df122-75b6-42de-9a08-348f45f027c4\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"afd9e964-9afa-402d-bc32-795a3ecec4ff\"},\"panelIndex\":\"afd9e964-9afa-402d-bc32-795a3ecec4ff\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_afd9e964-9afa-402d-bc32-795a3ecec4ff\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"b6571ff0-693d-4dbd-8dbd-8a57d4b75a36\"},\"panelIndex\":\"b6571ff0-693d-4dbd-8dbd-8a57d4b75a36\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_b6571ff0-693d-4dbd-8dbd-8a57d4b75a36\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"e00255dc-a4ae-4d0f-bb71-546623bdd4c0\"},\"panelIndex\":\"e00255dc-a4ae-4d0f-bb71-546623bdd4c0\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_e00255dc-a4ae-4d0f-bb71-546623bdd4c0\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":45,\"w\":24,\"h\":15,\"i\":\"68a688a4-b0fa-49a2-8b35-a20c70500d8a\"},\"panelIndex\":\"68a688a4-b0fa-49a2-8b35-a20c70500d8a\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_68a688a4-b0fa-49a2-8b35-a20c70500d8a\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":60,\"w\":24,\"h\":15,\"i\":\"6680ba9b-b669-4bed-87b1-67a9453244e5\"},\"panelIndex\":\"6680ba9b-b669-4bed-87b1-67a9453244e5\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_6680ba9b-b669-4bed-87b1-67a9453244e5\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":60,\"w\":24,\"h\":15,\"i\":\"cdcb3397-5a51-4627-9f5c-caa6c26ef203\"},\"panelIndex\":\"cdcb3397-5a51-4627-9f5c-caa6c26ef203\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_cdcb3397-5a51-4627-9f5c-caa6c26ef203\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":75,\"w\":24,\"h\":15,\"i\":\"5e0f79cd-690a-4d64-97d3-b6c9a6a8080b\"},\"panelIndex\":\"5e0f79cd-690a-4d64-97d3-b6c9a6a8080b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5e0f79cd-690a-4d64-97d3-b6c9a6a8080b\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":75,\"w\":24,\"h\":15,\"i\":\"41045521-aa6e-41cb-92af-a951bb033acc\"},\"panelIndex\":\"41045521-aa6e-41cb-92af-a951bb033acc\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_41045521-aa6e-41cb-92af-a951bb033acc\"}]", + "timeRestore": false, + "title": "Convert to Lens - TSVB - Timeseries", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T01:12:25.942Z", + "id": "203c4110-4603-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "17fcbe30-4603-11ee-8b96-35b00ddf1245", + "name": "8bd35619-2857-479e-b2ad-c42177db8f4c:panel_8bd35619-2857-479e-b2ad-c42177db8f4c", + "type": "visualization" + }, + { + "id": "af224910-4603-11ee-8b96-35b00ddf1245", + "name": "08411e04-5232-472e-be83-553586e84255:panel_08411e04-5232-472e-be83-553586e84255", + "type": "visualization" + }, + { + "id": "e010aee0-4603-11ee-8b96-35b00ddf1245", + "name": "59afa58a-fa67-4af3-b422-a63eb4a250fe:panel_59afa58a-fa67-4af3-b422-a63eb4a250fe", + "type": "visualization" + }, + { + "id": "0dfad560-4604-11ee-8b96-35b00ddf1245", + "name": "fc8df122-75b6-42de-9a08-348f45f027c4:panel_fc8df122-75b6-42de-9a08-348f45f027c4", + "type": "visualization" + }, + { + "id": "24a439a0-4604-11ee-8b96-35b00ddf1245", + "name": "afd9e964-9afa-402d-bc32-795a3ecec4ff:panel_afd9e964-9afa-402d-bc32-795a3ecec4ff", + "type": "visualization" + }, + { + "id": "322a7c50-4605-11ee-8b96-35b00ddf1245", + "name": "b6571ff0-693d-4dbd-8dbd-8a57d4b75a36:panel_b6571ff0-693d-4dbd-8dbd-8a57d4b75a36", + "type": "visualization" + }, + { + "id": "65527e70-4605-11ee-8b96-35b00ddf1245", + "name": "e00255dc-a4ae-4d0f-bb71-546623bdd4c0:panel_e00255dc-a4ae-4d0f-bb71-546623bdd4c0", + "type": "visualization" + }, + { + "id": "86f1abf0-4605-11ee-8b96-35b00ddf1245", + "name": "68a688a4-b0fa-49a2-8b35-a20c70500d8a:panel_68a688a4-b0fa-49a2-8b35-a20c70500d8a", + "type": "visualization" + }, + { + "id": "9f431ae0-4605-11ee-8b96-35b00ddf1245", + "name": "6680ba9b-b669-4bed-87b1-67a9453244e5:panel_6680ba9b-b669-4bed-87b1-67a9453244e5", + "type": "visualization" + }, + { + "id": "9685ae10-4608-11ee-8b96-35b00ddf1245", + "name": "cdcb3397-5a51-4627-9f5c-caa6c26ef203:panel_cdcb3397-5a51-4627-9f5c-caa6c26ef203", + "type": "visualization" + }, + { + "id": "17ae1a40-4609-11ee-8b96-35b00ddf1245", + "name": "5e0f79cd-690a-4d64-97d3-b6c9a6a8080b:panel_5e0f79cd-690a-4d64-97d3-b6c9a6a8080b", + "type": "visualization" + }, + { + "id": "df5de760-4608-11ee-8b96-35b00ddf1245", + "name": "41045521-aa6e-41cb-92af-a951bb033acc:panel_41045521-aa6e-41cb-92af-a951bb033acc", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-29T01:12:25.942Z", + "version": "WzQ2NCwyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/top_n.json b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/top_n.json new file mode 100644 index 0000000000000..818fe14b662cc --- /dev/null +++ b/x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/top_n.json @@ -0,0 +1,559 @@ +{ + "attributes": { + "fieldAttrs": "{\"utc_time\":{\"customLabel\":\"UTC time\"}}", + "fieldFormatMap": "{\"bytes\":{\"id\":\"bytes\"}}", + "fields": "[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]", + "runtimeFieldMap": "{\"hello_world_runtime_field\":{\"type\":\"keyword\",\"script\":{\"source\":\"emit('hello world')\"}}}", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "logstash-*", + "managed": false, + "references": [], + "type": "index-pattern", + "typeMigrationVersion": "7.11.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzE1NCwyXQ==" +} + +{ + "attributes": { + "color": "#965783", + "description": "", + "name": "serverless" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-24T19:23:41.590Z", + "id": "serverless-tag", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-08-24T19:23:41.590Z", + "version": "WzcyMzYsMl0=" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Unsupported agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Unsupported agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"d600e2d8-f55b-4eb2-902a-7f143d07cbef\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"7fc549f8-f59c-41c6-ab9e-102f141080c3\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"2d835cdc-7e72-451a-a9f5-fb3802bdab83\",\"type\":\"sum_of_squares\",\"field\":\"machine.ram\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"8e696f00-4626-11ee-a985-93d7c1e8c7ef\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:44:40.578Z", + "id": "c3fb1e20-4626-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:44:40.578Z", + "version": "WzQ5NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Invalid panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Invalid panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"fd7e1a1e-d957-4b5e-8da4-ee9a04243fe1\",\"type\":\"max\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:42:10.825Z", + "id": "6ab89f90-4626-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:45:06.989Z", + "version": "WzUwMSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Basic", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Basic\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1cb8bfd0-4628-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:55:00.512Z", + "id": "357d62f0-4628-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:55:00.512Z", + "version": "WzUyNiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Parent pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Parent pipeline agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"last_value\",\"id\":\"8083ead8-49d6-4e9b-bdec-ea98b8b27bfc\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f51e24e6-a0db-467b-83ae-6958c7954b8f\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"ad461389-3856-4924-810c-08104674352a\",\"type\":\"count\"},{\"id\":\"e1971d70-4627-11ee-a68b-87922c3aebc1\",\"type\":\"cumulative_sum\",\"field\":\"ad461389-3856-4924-810c-08104674352a\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"dc62fb40-4626-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:53:21.411Z", + "id": "fa6bc620-4627-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:53:21.411Z", + "version": "WzUxOCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Sibling pipeline agg", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Sibling pipeline agg\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"8083ead8-49d6-4e9b-bdec-ea98b8b27bfc\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"f51e24e6-a0db-467b-83ae-6958c7954b8f\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"ad461389-3856-4924-810c-08104674352a\",\"type\":\"count\"},{\"sigma\":\"\",\"id\":\"0c833ba0-4627-11ee-a68b-87922c3aebc1\",\"type\":\"avg_bucket\",\"field\":\"ad461389-3856-4924-810c-08104674352a\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"dc62fb40-4626-11ee-a68b-87922c3aebc1\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:47:56.522Z", + "id": "38c5cca0-4627-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:47:56.522Z", + "version": "WzUwOCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Horizontal bar", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Horizontal bar\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"type\":\"top_n\",\"series\":[{\"time_range_mode\":\"entire_time_range\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"1cb8bfd0-4628-11ee-a68b-87922c3aebc1\",\"type\":\"max\",\"field\":\"memory\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"isModelInvalid\":false,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T04:59:51.097Z", + "id": "e2b14a90-4628-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T04:59:51.097Z", + "version": "WzUzMywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Group by", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Group by\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"field\":\"memory\",\"id\":\"1cb8bfd0-4628-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"extension.raw\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:03:08.276Z", + "id": "58386b40-4629-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:40:43.742Z", + "version": "WzU4OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Last value", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Last value\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"1m\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"time_range_mode\":\"entire_time_range\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"time_range_mode\":\"last_value\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:12:52.996Z", + "id": "b4bd9c40-462a-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:12:52.996Z", + "version": "WzU0NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Static value", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Static value\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"id\":\"e2aad000-462a-11ee-a68b-87922c3aebc1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"e2aad001-462a-11ee-a68b-87922c3aebc1\",\"type\":\"static\",\"value\":\"10\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:14:44.259Z", + "id": "f70eff30-462a-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:14:44.259Z", + "version": "WzU1NywyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"extension\",\"key\":\"extension\",\"negate\":false,\"params\":{\"query\":\"css\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"extension\":\"css\"}}}]}" + }, + "title": "Top N - With filter", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - With filter\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:19:10.655Z", + "id": "95d7ccf0-462b-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:19:10.655Z", + "version": "WzU2NCwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"machine.os : ios\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - With query", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - With query\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:20:31.413Z", + "id": "c5fa7e50-462b-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:20:31.413Z", + "version": "WzU2OSwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Ignore global filters series", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Ignore global filters series\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"ignore_global_filter\":1}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:22:31.574Z", + "id": "0d999b60-462c-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:22:31.574Z", + "version": "WzU3NiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "Top N - Ignore global filters panel", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"Top N - Ignore global filters panel\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"time_range_mode\":\"entire_time_range\",\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"ec1a1290-4625-11ee-8c8f-e5a0db7dbd7b\"}],\"drop_last_bucket\":0,\"id\":\"e6068273-0069-4301-af1a-d1d07f43a27f\",\"interval\":\"\",\"isModelInvalid\":false,\"max_lines_legend\":1,\"series\":[{\"time_range_mode\":\"entire_time_range\",\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"default\",\"id\":\"c54e25d0-a83a-40b4-9ced-51fbbd0e6b7f\",\"line_width\":1,\"metrics\":[{\"id\":\"7c6ce9a0-4629-11ee-a68b-87922c3aebc1\",\"type\":\"count\"}],\"override_index_pattern\":0,\"palette\":{\"name\":\"default\",\"type\":\"palette\"},\"point_size\":1,\"separate_axis\":0,\"series_drop_last_bucket\":0,\"split_mode\":\"everything\",\"stacked\":\"none\",\"ignore_global_filter\":0}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"\",\"tooltip_mode\":\"show_all\",\"truncate_legend\":1,\"type\":\"top_n\",\"use_kibana_indexes\":true,\"ignore_global_filter\":1,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:23:15.380Z", + "id": "27b5df40-462c-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "serverless-tag", + "name": "tag-ref-serverless-tag", + "type": "tag" + }, + { + "id": "logstash-*", + "name": "metrics_0_index_pattern", + "type": "index-pattern" + } + ], + "type": "visualization", + "typeMigrationVersion": "8.5.0", + "updated_at": "2023-08-29T05:23:15.380Z", + "version": "WzU4MiwyXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"670a4ae2-de49-4a96-838c-ba616a3ce1d8\"},\"panelIndex\":\"670a4ae2-de49-4a96-838c-ba616a3ce1d8\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_670a4ae2-de49-4a96-838c-ba616a3ce1d8\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"a709376d-07bd-4610-b153-cac5b071681c\"},\"panelIndex\":\"a709376d-07bd-4610-b153-cac5b071681c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_a709376d-07bd-4610-b153-cac5b071681c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"25cc76c0-f96c-46d8-9c61-4730f1d56d3c\"},\"panelIndex\":\"25cc76c0-f96c-46d8-9c61-4730f1d56d3c\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_25cc76c0-f96c-46d8-9c61-4730f1d56d3c\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"d451c8b5-9fad-4f81-80ad-012c8c8df174\"},\"panelIndex\":\"d451c8b5-9fad-4f81-80ad-012c8c8df174\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_d451c8b5-9fad-4f81-80ad-012c8c8df174\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":30,\"w\":24,\"h\":15,\"i\":\"ab93a906-e9b9-4583-aa8e-1e8d3e07cf52\"},\"panelIndex\":\"ab93a906-e9b9-4583-aa8e-1e8d3e07cf52\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_ab93a906-e9b9-4583-aa8e-1e8d3e07cf52\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":30,\"w\":24,\"h\":15,\"i\":\"cc4c448f-2b95-4f4a-8960-1603cc1ecac4\"},\"panelIndex\":\"cc4c448f-2b95-4f4a-8960-1603cc1ecac4\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_cc4c448f-2b95-4f4a-8960-1603cc1ecac4\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":45,\"w\":24,\"h\":15,\"i\":\"7361825d-37a9-4bc0-b894-edacbb34a34b\"},\"panelIndex\":\"7361825d-37a9-4bc0-b894-edacbb34a34b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_7361825d-37a9-4bc0-b894-edacbb34a34b\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":45,\"w\":24,\"h\":15,\"i\":\"4fd3f555-a85f-4049-bab2-6030ce896893\"},\"panelIndex\":\"4fd3f555-a85f-4049-bab2-6030ce896893\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4fd3f555-a85f-4049-bab2-6030ce896893\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":60,\"w\":24,\"h\":15,\"i\":\"5156df6a-a033-472c-950c-d1efe2db7760\"},\"panelIndex\":\"5156df6a-a033-472c-950c-d1efe2db7760\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5156df6a-a033-472c-950c-d1efe2db7760\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":60,\"w\":24,\"h\":15,\"i\":\"91297d18-6929-437f-80e6-d8ae87226c9b\"},\"panelIndex\":\"91297d18-6929-437f-80e6-d8ae87226c9b\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_91297d18-6929-437f-80e6-d8ae87226c9b\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":75,\"w\":24,\"h\":15,\"i\":\"5e07d577-dcd4-48f7-98ae-61a5d3393205\"},\"panelIndex\":\"5e07d577-dcd4-48f7-98ae-61a5d3393205\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5e07d577-dcd4-48f7-98ae-61a5d3393205\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":75,\"w\":24,\"h\":15,\"i\":\"9343f6f2-6f67-4a8e-8571-ed90871be7cb\"},\"panelIndex\":\"9343f6f2-6f67-4a8e-8571-ed90871be7cb\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_9343f6f2-6f67-4a8e-8571-ed90871be7cb\"},{\"version\":\"8.9.1\",\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":90,\"w\":24,\"h\":15,\"i\":\"63ba5316-bceb-4eca-b10b-778db6a1ac42\"},\"panelIndex\":\"63ba5316-bceb-4eca-b10b-778db6a1ac42\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_63ba5316-bceb-4eca-b10b-778db6a1ac42\"}]", + "timeRestore": false, + "title": "Convert to Lens - TSVB - Top N", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-08-29T05:23:18.503Z", + "id": "7e148680-4626-11ee-8b96-35b00ddf1245", + "managed": false, + "references": [ + { + "id": "c3fb1e20-4626-11ee-8b96-35b00ddf1245", + "name": "670a4ae2-de49-4a96-838c-ba616a3ce1d8:panel_670a4ae2-de49-4a96-838c-ba616a3ce1d8", + "type": "visualization" + }, + { + "id": "6ab89f90-4626-11ee-8b96-35b00ddf1245", + "name": "a709376d-07bd-4610-b153-cac5b071681c:panel_a709376d-07bd-4610-b153-cac5b071681c", + "type": "visualization" + }, + { + "id": "357d62f0-4628-11ee-8b96-35b00ddf1245", + "name": "25cc76c0-f96c-46d8-9c61-4730f1d56d3c:panel_25cc76c0-f96c-46d8-9c61-4730f1d56d3c", + "type": "visualization" + }, + { + "id": "fa6bc620-4627-11ee-8b96-35b00ddf1245", + "name": "d451c8b5-9fad-4f81-80ad-012c8c8df174:panel_d451c8b5-9fad-4f81-80ad-012c8c8df174", + "type": "visualization" + }, + { + "id": "38c5cca0-4627-11ee-8b96-35b00ddf1245", + "name": "ab93a906-e9b9-4583-aa8e-1e8d3e07cf52:panel_ab93a906-e9b9-4583-aa8e-1e8d3e07cf52", + "type": "visualization" + }, + { + "id": "e2b14a90-4628-11ee-8b96-35b00ddf1245", + "name": "cc4c448f-2b95-4f4a-8960-1603cc1ecac4:panel_cc4c448f-2b95-4f4a-8960-1603cc1ecac4", + "type": "visualization" + }, + { + "id": "58386b40-4629-11ee-8b96-35b00ddf1245", + "name": "7361825d-37a9-4bc0-b894-edacbb34a34b:panel_7361825d-37a9-4bc0-b894-edacbb34a34b", + "type": "visualization" + }, + { + "id": "b4bd9c40-462a-11ee-8b96-35b00ddf1245", + "name": "4fd3f555-a85f-4049-bab2-6030ce896893:panel_4fd3f555-a85f-4049-bab2-6030ce896893", + "type": "visualization" + }, + { + "id": "f70eff30-462a-11ee-8b96-35b00ddf1245", + "name": "5156df6a-a033-472c-950c-d1efe2db7760:panel_5156df6a-a033-472c-950c-d1efe2db7760", + "type": "visualization" + }, + { + "id": "95d7ccf0-462b-11ee-8b96-35b00ddf1245", + "name": "91297d18-6929-437f-80e6-d8ae87226c9b:panel_91297d18-6929-437f-80e6-d8ae87226c9b", + "type": "visualization" + }, + { + "id": "c5fa7e50-462b-11ee-8b96-35b00ddf1245", + "name": "5e07d577-dcd4-48f7-98ae-61a5d3393205:panel_5e07d577-dcd4-48f7-98ae-61a5d3393205", + "type": "visualization" + }, + { + "id": "0d999b60-462c-11ee-8b96-35b00ddf1245", + "name": "9343f6f2-6f67-4a8e-8571-ed90871be7cb:panel_9343f6f2-6f67-4a8e-8571-ed90871be7cb", + "type": "visualization" + }, + { + "id": "27b5df40-462c-11ee-8b96-35b00ddf1245", + "name": "63ba5316-bceb-4eca-b10b-778db6a1ac42:panel_63ba5316-bceb-4eca-b10b-778db6a1ac42", + "type": "visualization" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0", + "updated_at": "2023-08-29T05:23:18.503Z", + "version": "WzU4MywyXQ==" +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts index 112c898eea358..f27d3493e0951 100644 --- a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts +++ b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts @@ -34,6 +34,7 @@ const deploymentAgnosticFunctionalServices = _.pick(functionalServices, [ 'dashboardSettings', 'dashboardVisualizations', 'dataGrid', + 'dataStreams', 'docTable', 'elasticChart', 'embedding', diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/index.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/index.ts new file mode 100644 index 0000000000000..161fb2f265ab0 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/index.ts @@ -0,0 +1,78 @@ +/* + * Copyright 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 { EsArchiver } from '@kbn/es-archiver'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext) => { + const browser = getService('browser'); + const log = getService('log'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['timePicker']); + const config = getService('config'); + let remoteEsArchiver; + + describe('lens serverless - group 1', () => { + const esArchive = 'x-pack/test/functional/es_archives/logstash_functional'; + const localIndexPatternString = 'logstash-*'; + const remoteIndexPatternString = 'ftr-remote:logstash-*'; + const localFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default', + }; + + const remoteFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default', + }; + let esNode: EsArchiver; + let fixtureDirs: { + lensBasic: string; + lensDefault: string; + }; + let indexPatternString: string; + before(async () => { + log.debug('Starting lens before method'); + await browser.setWindowSize(1280, 1200); + await kibanaServer.savedObjects.cleanStandardList(); + try { + config.get('esTestCluster.ccs'); + remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver'); + esNode = remoteEsArchiver; + fixtureDirs = remoteFixtures; + indexPatternString = remoteIndexPatternString; + } catch (error) { + esNode = esArchiver; + fixtureDirs = localFixtures; + indexPatternString = localIndexPatternString; + } + + await esNode.load(esArchive); + // changing the timepicker default here saves us from having to set it in Discover (~8s) + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update({ + defaultIndex: indexPatternString, + 'dateFormat:tz': 'UTC', + }); + await kibanaServer.importExport.load(fixtureDirs.lensBasic); + await kibanaServer.importExport.load(fixtureDirs.lensDefault); + }); + + after(async () => { + await esArchiver.unload(esArchive); + await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.importExport.unload(fixtureDirs.lensBasic); + await kibanaServer.importExport.unload(fixtureDirs.lensDefault); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + loadTestFile(require.resolve('./smokescreen.ts')); + loadTestFile(require.resolve('./tsdb.ts')); + loadTestFile(require.resolve('./vega_chart.ts')); + }); +}; diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/smokescreen.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/smokescreen.ts new file mode 100644 index 0000000000000..5015b4be2250c --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/smokescreen.ts @@ -0,0 +1,765 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { range } from 'lodash'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const find = getService('find'); + const listingTable = getService('listingTable'); + const testSubjects = getService('testSubjects'); + const elasticChart = getService('elasticChart'); + const filterBar = getService('filterBar'); + const retry = getService('retry'); + const config = getService('config'); + + describe('lens smokescreen tests', () => { + it('should allow creation of lens xy chart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: '@message.raw', + }); + + await PageObjects.lens.switchToVisualization('lnsDatatable'); + await PageObjects.lens.removeDimension('lnsDatatable_rows'); + await PageObjects.lens.switchToVisualization('bar_stacked'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'ip', + }); + + await PageObjects.lens.save('Afancilenstest'); + + // Ensure the visualization shows up in the visualize list, and takes + // us back to the visualization as we configured it. + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('Afancilenstest'); + await PageObjects.lens.clickVisualizeListItemTitle('Afancilenstest'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.waitForVisualization('xyVisChart'); + + expect(await PageObjects.lens.getTitle()).to.eql('Afancilenstest'); + + // .echLegendItem__title is the only viable way of getting the xy chart's + // legend item(s), so we're using a class selector here. + // 4th item is the other bucket + expect(await find.allByCssSelector('.echLegendItem')).to.have.length(4); + }); + + it('should create an xy visualization with filters aggregation', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsXYvis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); + await PageObjects.lens.goToTimeRange(); + // Change the IP field to filters + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', + operation: 'filters', + keepOpen: true, + }); + await PageObjects.lens.addFilterToAgg(`geo.src : CN`); + await PageObjects.lens.waitForVisualization('xyVisChart'); + + // Verify that the field was persisted from the transition + expect(await PageObjects.lens.getFiltersAggLabels()).to.eql([`"ip" : *`, `geo.src : CN`]); + expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); + }); + + it('should transition from metric to table to metric', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('Artistpreviouslyknownaslens'); + await PageObjects.lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('Maximum of bytes'); + expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('19,986'); + await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + }); + + it('should transition from a multi-layer stacked bar to a multi-layer line chart and correctly remove all layers', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.createLayer(); + + expect(await PageObjects.lens.hasChartSwitchWarning('line')).to.eql(false); + + await PageObjects.lens.switchToVisualization('line'); + await PageObjects.lens.configureDimension({ + dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.src', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'median', + field: 'bytes', + }); + + expect(await PageObjects.lens.getLayerCount()).to.eql(2); + await PageObjects.lens.removeLayer(); + await PageObjects.lens.removeLayer(); + await testSubjects.existOrFail('workspace-drag-drop-prompt'); + }); + + it('should edit settings of xy line chart', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsXYvis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.removeDimension('lnsXY_splitDimensionPanel'); + await PageObjects.lens.switchToVisualization('line'); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'max', + field: 'memory', + keepOpen: true, + }); + await PageObjects.lens.editDimensionLabel('Test of label'); + await PageObjects.lens.editDimensionFormat('Percent'); + await PageObjects.lens.editDimensionColor('#ff0000'); + await PageObjects.lens.openVisualOptions(); + + await PageObjects.lens.setCurvedLines('CURVE_MONOTONE_X'); + await PageObjects.lens.editMissingValues('Linear'); + + await PageObjects.lens.assertMissingValues('Linear'); + + await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await PageObjects.lens.assertColor('#ff0000'); + + await testSubjects.existOrFail('indexPattern-dimension-formatDecimals'); + + await PageObjects.lens.closeDimensionEditor(); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Test of label' + ); + }); + + it('should not show static value tab for data layers', async () => { + await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + // Quick functions and Formula tabs should be visible + expect(await testSubjects.exists('lens-dimensionTabs-quickFunctions')).to.eql(true); + expect(await testSubjects.exists('lens-dimensionTabs-formula')).to.eql(true); + // Static value tab should not be visible + expect(await testSubjects.exists('lens-dimensionTabs-static_value')).to.eql(false); + + await PageObjects.lens.closeDimensionEditor(); + }); + + it('should be able to add very long labels and still be able to remove a dimension', async () => { + await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + const longLabel = + 'Veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long label wrapping multiple lines'; + await PageObjects.lens.editDimensionLabel(longLabel); + await PageObjects.lens.waitForVisualization('xyVisChart'); + await PageObjects.lens.closeDimensionEditor(); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + longLabel + ); + expect(await PageObjects.lens.canRemoveDimension('lnsXY_yDimensionPanel')).to.equal(true); + await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + await testSubjects.missingOrFail('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + }); + + it('should allow creation of a multi-axis chart and switching multiple times', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await elasticChart.setNewChartUiDebugFlag(true); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('bar'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.dest', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'unique_count', + field: 'bytes', + keepOpen: true, + }); + + await PageObjects.lens.changeAxisSide('right'); + let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.axes?.y.length).to.eql(2); + expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(true); + + await PageObjects.lens.changeAxisSide('left'); + data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.axes?.y.length).to.eql(1); + expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(false); + + await PageObjects.lens.changeAxisSide('right'); + await PageObjects.lens.waitForVisualization('xyVisChart'); + + await PageObjects.lens.closeDimensionEditor(); + }); + + it('should show value labels on bar charts when enabled', async () => { + // enable value labels + await PageObjects.lens.openVisualOptions(); + await testSubjects.click('lns_valueLabels_inside'); + + // check for value labels + let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.bars?.[0].labels).not.to.eql(0); + + // switch to stacked bar chart + await PageObjects.lens.switchToVisualization('bar_stacked'); + + // check for value labels + data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.bars?.[0].labels).not.to.eql(0); + }); + + it('should override axis title', async () => { + const axisTitle = 'overridden axis'; + await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton'); + await testSubjects.setValue('lnsyLeftAxisTitle', axisTitle, { + clearWithKeyboard: true, + }); + + let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.axes?.y?.[1].title).to.eql(axisTitle); + + // hide the gridlines + await testSubjects.click('lnsshowyLeftAxisGridlines'); + + data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data?.axes?.y?.[1].gridlines.length).to.eql(0); + }); + + it('should transition from a multi-layer stacked bar to donut chart using suggestions', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.dest', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.createLayer(); + + await PageObjects.lens.configureDimension({ + dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.src', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.save('twolayerchart'); + await testSubjects.click('lnsSuggestion-donut > lnsSuggestion'); + + expect(await PageObjects.lens.getLayerCount()).to.eql(1); + expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( + 'Top 5 values of geo.dest' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + 'Average of bytes' + ); + }); + + it('should transition from line chart to donut chart and to bar chart', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsXYvis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); + await PageObjects.lens.goToTimeRange(); + expect(await PageObjects.lens.hasChartSwitchWarning('donut')).to.eql(true); + await PageObjects.lens.switchToVisualization('donut'); + + expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( + 'Top 3 values of ip' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + 'Average of bytes' + ); + + expect(await PageObjects.lens.hasChartSwitchWarning('bar')).to.eql(false); + await PageObjects.lens.switchToVisualization('bar'); + expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + 'Top 3 values of ip' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Average of bytes' + ); + }); + + it('should transition from bar chart to line chart using layer chart switch', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsXYvis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchLayerSeriesType('line'); + expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + '@timestamp' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Average of bytes' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + 'Top 3 values of ip' + ); + }); + + it('should transition from pie chart to treemap chart', async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsPieVis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsPieVis'); + await PageObjects.lens.goToTimeRange(); + expect(await PageObjects.lens.hasChartSwitchWarning('treemap')).to.eql(false); + await PageObjects.lens.switchToVisualization('treemap'); + expect( + await PageObjects.lens.getDimensionTriggersTexts('lnsPie_groupByDimensionPanel') + ).to.eql(['Top 7 values of geo.dest', 'Top 3 values of geo.src']); + expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + 'Average of bytes' + ); + }); + + it('should create a pie chart and switch to datatable', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('pie'); + await PageObjects.lens.configureDimension({ + dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + disableEmptyRows: true, + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + expect(await PageObjects.lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + + expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('@timestamp per 3 hours'); + expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('2015-09-20 00:00'); + expect(await PageObjects.lens.getDatatableHeaderText(1)).to.eql('Average of bytes'); + expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('6,011.351'); + }); + + it('should create a heatmap chart and transition to barchart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('heatmap', 'heat'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsHeatmap_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsHeatmap_yDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.dest', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsHeatmap_cellPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + expect(await PageObjects.lens.hasChartSwitchWarning('bar')).to.eql(false); + await PageObjects.lens.switchToVisualization('bar'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + '@timestamp' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Average of bytes' + ); + }); + + it('should create a valid XY chart with references', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'moving_average', + keepOpen: true, + }); + await PageObjects.lens.configureReference({ + operation: 'sum', + field: 'bytes', + }); + await PageObjects.lens.closeDimensionEditor(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'cumulative_sum', + keepOpen: true, + }); + await PageObjects.lens.configureReference({ + field: 'Records', + }); + await PageObjects.lens.closeDimensionEditor(); + + // Two Y axes that are both valid + expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); + }); + + it('should allow formatting on references', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsDatatable_rows > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + disableEmptyRows: true, + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsDatatable_metrics > lns-empty-dimension', + operation: 'moving_average', + keepOpen: true, + }); + await PageObjects.lens.configureReference({ + operation: 'sum', + field: 'bytes', + }); + await PageObjects.lens.editDimensionFormat('Number'); + await PageObjects.lens.closeDimensionEditor(); + + await PageObjects.lens.waitForVisualization(); + + const values = await Promise.all( + range(0, 6).map((index) => PageObjects.lens.getDatatableCellText(index, 1)) + ); + expect(values).to.eql([ + '-', + '222,420.00', + '702,050.00', + '1,879,613.33', + '3,482,256.25', + '4,359,953.00', + ]); + }); + + /** + * The edge cases are: + * + * 1. Showing errors when creating a partial configuration + * 2. Being able to drag in a new field while in partial config + * 3. Being able to switch charts while in partial config + */ + it('should handle edge cases in reference-based operations', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'cumulative_sum', + }); + expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + + await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); + expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(2); + + await PageObjects.lens.dragFieldToDimensionTrigger( + '@timestamp', + 'lnsXY_xDimensionPanel > lns-empty-dimension' + ); + expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + + expect(await PageObjects.lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql( + 'Cumulative sum of (incomplete)' + ); + }); + + it('should keep the field selection while transitioning to every reference-based operation', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'counter_rate', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'cumulative_sum', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'differences', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'moving_average', + }); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Moving average of Sum of bytes' + ); + }); + + it('should not leave an incomplete column in the visualization config with field-based operation', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + }); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + undefined + ); + }); + + it('should revert to previous configuration and not leave an incomplete column in the visualization config with reference-based operations', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'moving_average', + field: 'Records', + }); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Moving average of Count of records' + ); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'median', + isPreviousIncompatible: true, + keepOpen: true, + }); + + expect(await PageObjects.lens.isDimensionEditorOpen()).to.eql(true); + + await PageObjects.lens.closeDimensionEditor(); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Moving average of Count of records' + ); + }); + + it('should transition from unique count to last value', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'unique_count', + field: 'ip', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', + operation: 'last_value', + field: 'bytes', + isPreviousIncompatible: true, + }); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Last value of bytes' + ); + }); + + it('should allow to change index pattern', async () => { + let indexPatternString; + if (config.get('esTestCluster.ccs')) { + indexPatternString = 'ftr-remote:log*'; + } else { + indexPatternString = 'log*'; + } + await PageObjects.lens.switchFirstLayerIndexPattern(indexPatternString); + expect(await PageObjects.lens.getFirstLayerIndexPattern()).to.equal(indexPatternString); + }); + + it('should allow filtering by legend on an xy chart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'extension.raw', + }); + + await PageObjects.lens.filterLegend('jpg'); + const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); + expect(hasExtensionFilter).to.be(true); + + await filterBar.removeFilter('extension.raw'); + }); + + it('should allow filtering by legend on a pie chart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('pie'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'extension.raw', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'agent.raw', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.filterLegend('jpg'); + const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); + expect(hasExtensionFilter).to.be(true); + + await filterBar.removeFilter('extension.raw'); + }); + + it('should show visual options button group for a donut chart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.switchToVisualization('donut'); + + const hasVisualOptionsButton = await PageObjects.lens.hasVisualOptionsButton(); + expect(hasVisualOptionsButton).to.be(true); + + await PageObjects.lens.openVisualOptions(); + await retry.try(async () => { + expect(await PageObjects.lens.hasEmptySizeRatioButtonGroup()).to.be(true); + }); + }); + + it('should not show visual options button group for a pie chart', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.switchToVisualization('pie'); + + const hasVisualOptionsButton = await PageObjects.lens.hasVisualOptionsButton(); + expect(hasVisualOptionsButton).to.be(false); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/tsdb.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/tsdb.ts new file mode 100644 index 0000000000000..96b1d0125c955 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/tsdb.ts @@ -0,0 +1,980 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { partition } from 'lodash'; +import moment from 'moment'; +import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +const TEST_DOC_COUNT = 100; +const TIME_PICKER_FORMAT = 'MMM D, YYYY [@] HH:mm:ss.SSS'; +const timeSeriesMetrics: Record = { + bytes_gauge: 'gauge', + bytes_counter: 'counter', +}; +const timeSeriesDimensions = ['request', 'url']; + +type TestDoc = Record>; + +const testDocTemplate: TestDoc = { + agent: 'Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1', + bytes: 6219, + clientip: '223.87.60.27', + extension: 'deb', + geo: { + srcdest: 'US:US', + src: 'US', + dest: 'US', + coordinates: { lat: 39.41042861, lon: -88.8454325 }, + }, + host: 'artifacts.elastic.co', + index: 'kibana_sample_data_logs', + ip: '223.87.60.27', + machine: { ram: 8589934592, os: 'win 8' }, + memory: null, + message: + '223.87.60.27 - - [2018-07-22T00:39:02.912Z] "GET /elasticsearch/elasticsearch-6.3.2.deb_1 HTTP/1.1" 200 6219 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1"', + phpmemory: null, + referer: 'http://twitter.com/success/wendy-lawrence', + request: '/elasticsearch/elasticsearch-6.3.2.deb', + response: 200, + tags: ['success', 'info'], + '@timestamp': '2018-07-22T00:39:02.912Z', + url: 'https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.deb_1', + utc_time: '2018-07-22T00:39:02.912Z', + event: { dataset: 'sample_web_logs' }, + bytes_gauge: 0, + bytes_counter: 0, +}; + +function getDataMapping( + { tsdb, removeTSDBFields }: { tsdb: boolean; removeTSDBFields?: boolean } = { + tsdb: false, + } +): Record { + const dataStreamMapping: Record = { + '@timestamp': { + type: 'date', + }, + agent: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + bytes: { + type: 'long', + }, + bytes_counter: { + type: 'long', + }, + bytes_gauge: { + type: 'long', + }, + clientip: { + type: 'ip', + }, + event: { + properties: { + dataset: { + type: 'keyword', + }, + }, + }, + extension: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + geo: { + properties: { + coordinates: { + type: 'geo_point', + }, + dest: { + type: 'keyword', + }, + src: { + type: 'keyword', + }, + srcdest: { + type: 'keyword', + }, + }, + }, + host: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + index: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + ip: { + type: 'ip', + }, + machine: { + properties: { + os: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + ram: { + type: 'long', + }, + }, + }, + memory: { + type: 'double', + }, + message: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + phpmemory: { + type: 'long', + }, + referer: { + type: 'keyword', + }, + request: { + type: 'keyword', + }, + response: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + tags: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + timestamp: { + path: '@timestamp', + type: 'alias', + }, + url: { + type: 'keyword', + }, + utc_time: { + type: 'date', + }, + }; + + if (tsdb) { + // augment the current mapping + for (const [fieldName, fieldMapping] of Object.entries(dataStreamMapping || {})) { + if ( + timeSeriesMetrics[fieldName] && + (fieldMapping.type === 'double' || fieldMapping.type === 'long') + ) { + fieldMapping.time_series_metric = timeSeriesMetrics[fieldName]; + } + + if (timeSeriesDimensions.includes(fieldName) && fieldMapping.type === 'keyword') { + fieldMapping.time_series_dimension = true; + } + } + } else if (removeTSDBFields) { + for (const fieldName of Object.keys(timeSeriesMetrics)) { + delete dataStreamMapping[fieldName]; + } + } + return dataStreamMapping; +} + +function sumFirstNValues(n: number, bars: Array<{ y: number }>): number { + const indexes = Array(n) + .fill(1) + .map((_, i) => i); + let countSum = 0; + for (const index of indexes) { + if (bars[index]) { + countSum += bars[index].y; + } + } + return countSum; +} + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects(['common', 'timePicker', 'lens', 'dashboard']); + const testSubjects = getService('testSubjects'); + const find = getService('find'); + const kibanaServer = getService('kibanaServer'); + const es = getService('es'); + const log = getService('log'); + const dataStreams = getService('dataStreams'); + const elasticChart = getService('elasticChart'); + const indexPatterns = getService('indexPatterns'); + const esArchiver = getService('esArchiver'); + const comboBox = getService('comboBox'); + + const createDocs = async ( + esIndex: string, + { isStream, removeTSDBFields }: { isStream: boolean; removeTSDBFields?: boolean }, + startTime: string + ) => { + log.info( + `Adding ${TEST_DOC_COUNT} to ${esIndex} with starting time from ${moment + .utc(startTime, TIME_PICKER_FORMAT) + .format(TIME_PICKER_FORMAT)} to ${moment + .utc(startTime, TIME_PICKER_FORMAT) + .add(2 * TEST_DOC_COUNT, 'seconds') + .format(TIME_PICKER_FORMAT)}` + ); + const docs = Array(TEST_DOC_COUNT) + .fill(testDocTemplate) + .map((templateDoc, i) => { + const timestamp = moment + .utc(startTime, TIME_PICKER_FORMAT) + .add(TEST_DOC_COUNT + i, 'seconds') + .format(); + const doc: TestDoc = { + ...templateDoc, + '@timestamp': timestamp, + utc_time: timestamp, + bytes_gauge: Math.floor(Math.random() * 10000 * i), + bytes_counter: 5000, + }; + if (removeTSDBFields) { + for (const field of Object.keys(timeSeriesMetrics)) { + delete doc[field]; + } + } + return doc; + }); + + const result = await es.bulk( + { + index: esIndex, + body: docs.map((d) => `{"${isStream ? 'create' : 'index'}": {}}\n${JSON.stringify(d)}\n`), + }, + { meta: true } + ); + + const res = result.body; + + if (res.errors) { + const resultsWithErrors = res.items + .filter(({ index }) => index?.error) + .map(({ index }) => index?.error); + for (const error of resultsWithErrors) { + log.error(`Error: ${JSON.stringify(error)}`); + } + const [indexExists, dataStreamExists] = await Promise.all([ + es.indices.exists({ index: esIndex }), + es.indices.getDataStream({ name: esIndex }), + ]); + log.debug(`Index exists: ${indexExists} - Data stream exists: ${dataStreamExists}`); + } + log.info(`Indexed ${res.items.length} test data docs.`); + }; + + describe('lens tsdb', function () { + const tsdbIndex = 'kibana_sample_data_logstsdb'; + const tsdbDataView = tsdbIndex; + const tsdbEsArchive = 'test/functional/fixtures/es_archiver/kibana_sample_data_logs_tsdb'; + const fromTime = 'Apr 16, 2023 @ 00:00:00.000'; + const toTime = 'Jun 16, 2023 @ 00:00:00.000'; + + before(async () => { + log.info(`loading ${tsdbIndex} index...`); + await esArchiver.loadIfNeeded(tsdbEsArchive); + log.info(`creating a data view for "${tsdbDataView}"...`); + await indexPatterns.create( + { + title: tsdbDataView, + timeFieldName: '@timestamp', + }, + { override: true } + ); + log.info(`updating settings to use the "${tsdbDataView}" dataView...`); + await kibanaServer.uiSettings.update({ + 'dateFormat:tz': 'UTC', + defaultIndex: '0ae0bc7a-e4ca-405c-ab67-f2b5913f2a51', + 'timepicker:timeDefaults': `{ "from": "${fromTime}", "to": "${toTime}" }`, + }); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.uiSettings.replace({}); + await es.indices.delete({ index: [tsdbIndex] }); + }); + + describe('downsampling', () => { + const downsampleDataView: { index: string; dataView: string } = { index: '', dataView: '' }; + before(async () => { + const downsampledTargetIndex = await dataStreams.downsampleTSDBIndex(tsdbIndex, { + isStream: false, + }); + downsampleDataView.index = downsampledTargetIndex; + downsampleDataView.dataView = `${tsdbIndex},${downsampledTargetIndex}`; + + log.info(`creating a data view for "${downsampleDataView.dataView}"...`); + await indexPatterns.create( + { + title: downsampleDataView.dataView, + timeFieldName: '@timestamp', + }, + { override: true } + ); + }); + + after(async () => { + await es.indices.delete({ index: [downsampleDataView.index] }); + }); + + describe('for regular metric', () => { + it('defaults to median for non-rolled up metric', async () => { + await PageObjects.common.navigateToApp('lens'); + await PageObjects.lens.switchDataPanelIndexPattern(tsdbDataView); + await PageObjects.lens.waitForField('bytes_gauge'); + await PageObjects.lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Median of bytes_gauge' + ); + }); + + it('does not show a warning', async () => { + await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel'); + await testSubjects.missingOrFail('median-partial-warning'); + await PageObjects.lens.assertNoEditorWarning(); + await PageObjects.lens.closeDimensionEditor(); + }); + }); + + describe('for rolled up metric (downsampled)', () => { + it('defaults to average for rolled up metric', async () => { + await PageObjects.lens.switchDataPanelIndexPattern(downsampleDataView.dataView); + await PageObjects.lens.removeLayer(); + await PageObjects.lens.waitForField('bytes_gauge'); + await PageObjects.lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + 'Average of bytes_gauge' + ); + }); + it('shows warnings in editor when using median', async () => { + await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel'); + await testSubjects.existOrFail('median-partial-warning'); + await testSubjects.click('lns-indexPatternDimension-median'); + await PageObjects.lens.waitForVisualization('xyVisChart'); + await PageObjects.lens.assertMessageListContains( + 'Median of bytes_gauge uses a function that is unsupported by rolled up data. Select a different function or change the time range.', + 'warning' + ); + }); + it('shows warnings in dashboards as well', async () => { + await PageObjects.lens.save('New', false, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await PageObjects.lens.assertMessageListContains( + 'Median of bytes_gauge uses a function that is unsupported by rolled up data. Select a different function or change the time range.', + 'warning' + ); + }); + }); + }); + + describe('time series special field types support', () => { + before(async () => { + await PageObjects.common.navigateToApp('lens'); + await PageObjects.lens.switchDataPanelIndexPattern(tsdbDataView); + await PageObjects.lens.goToTimeRange(); + }); + + afterEach(async () => { + await PageObjects.lens.removeLayer(); + }); + + // skip count for now as it's a special function and will + // change automatically the unsupported field to Records when detected + const allOperations = [ + 'average', + 'max', + 'last_value', + 'median', + 'percentile', + 'percentile_rank', + 'standard_deviation', + 'sum', + 'unique_count', + ]; + const counterFieldsSupportedOps = ['min', 'max', 'counter_rate', 'last_value']; + const gaugeFieldsSupportedOps = allOperations; + + const operationsByFieldSupport = allOperations.map((name) => ({ + name, + // Quick way to make it match the UI name + label: `${name[0].toUpperCase()}${name.slice(1).replace('_', ' ')}`, + counter: counterFieldsSupportedOps.includes(name), + gauge: gaugeFieldsSupportedOps.includes(name), + })); + + for (const fieldType of ['counter', 'gauge'] as const) { + const [supportedOperations, unsupportedOperatons] = partition( + operationsByFieldSupport, + (op) => op[fieldType] + ); + if (supportedOperations.length) { + it(`should allow operations when supported by ${fieldType} field type`, async () => { + // Counter rate requires a date histogram dimension configured to work + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + // minimum supports all tsdb field types + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: `bytes_${fieldType}`, + keepOpen: true, + }); + + // now check if the provided function has no incompatibility tooltip + for (const supportedOp of supportedOperations) { + expect( + testSubjects.exists(`lns-indexPatternDimension-${supportedOp.name} incompatible`, { + timeout: 500, + }) + ).to.eql(supportedOp[fieldType]); + } + + for (const supportedOp of supportedOperations) { + // try to change to the provided function and check all is ok + await PageObjects.lens.selectOperation(supportedOp.name); + + expect( + await find.existsByCssSelector( + '[data-test-subj="indexPattern-field-selection-row"] .euiFormErrorText' + ) + ).to.be(false); + + // return in a clean state before checking the next operation + await PageObjects.lens.selectOperation('min'); + } + await PageObjects.lens.closeDimensionEditor(); + }); + } + if (unsupportedOperatons.length) { + it(`should notify the incompatibility of unsupported operations for the ${fieldType} field type`, async () => { + // Counter rate requires a date histogram dimension configured to work + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + // minimum supports all tsdb field types + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: `bytes_${fieldType}`, + keepOpen: true, + }); + + // now check if the provided function has the incompatibility tooltip + for (const unsupportedOp of unsupportedOperatons) { + expect( + testSubjects.exists( + `lns-indexPatternDimension-${unsupportedOp.name} incompatible`, + { + timeout: 500, + } + ) + ).to.eql(!unsupportedOp[fieldType]); + } + + for (const unsupportedOp of unsupportedOperatons) { + // try to change to the provided function and check if it's in an incompatibility state + await PageObjects.lens.selectOperation(unsupportedOp.name, true); + + const fieldSelectErrorEl = await find.byCssSelector( + '[data-test-subj="indexPattern-field-selection-row"] .euiFormErrorText' + ); + + expect(await fieldSelectErrorEl.getVisibleText()).to.be( + 'This field does not work with the selected function.' + ); + + // return in a clean state before checking the next operation + await PageObjects.lens.selectOperation('min'); + } + await PageObjects.lens.closeDimensionEditor(); + }); + } + } + + describe('show time series dimension groups within breakdown', () => { + it('should show the time series dimension group on field picker when configuring a breakdown', async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: 'bytes_counter', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', + operation: 'terms', + keepOpen: true, + }); + + const list = await comboBox.getOptionsList('indexPattern-dimension-field'); + expect(list).to.contain('Time series dimensions'); + await PageObjects.lens.closeDimensionEditor(); + }); + + it("should not show the time series dimension group on field picker if it's not a breakdown", async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: 'bytes_counter', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + keepOpen: true, + }); + const list = await comboBox.getOptionsList('indexPattern-dimension-field'); + expect(list).to.not.contain('Time series dimensions'); + await PageObjects.lens.closeDimensionEditor(); + }); + }); + }); + + describe('Scenarios with changing stream type', () => { + const now = moment().utc(); + const fromMoment = now.clone().subtract(1, 'hour'); + const toMoment = now.clone(); + const fromTimeForScenarios = fromMoment.format(TIME_PICKER_FORMAT); + const toTimeForScenarios = toMoment.format(TIME_PICKER_FORMAT); + + const getScenarios = ( + initialIndex: string + ): Array<{ + name: string; + indexes: Array<{ + index: string; + create?: boolean; + downsample?: boolean; + tsdb?: boolean; + removeTSDBFields?: boolean; + }>; + }> => [ + { + name: 'Dataview with no additional stream/index', + indexes: [{ index: initialIndex }], + }, + { + name: 'Dataview with an additional regular index', + indexes: [ + { index: initialIndex }, + { index: 'regular_index', create: true, removeTSDBFields: true }, + ], + }, + { + name: 'Dataview with an additional downsampled TSDB stream', + indexes: [ + { index: initialIndex }, + { index: 'tsdb_index_2', create: true, tsdb: true, downsample: true }, + ], + }, + { + name: 'Dataview with additional regular index and a downsampled TSDB stream', + indexes: [ + { index: initialIndex }, + { index: 'regular_index', create: true, removeTSDBFields: true }, + { index: 'tsdb_index_2', create: true, tsdb: true, downsample: true }, + ], + }, + { + name: 'Dataview with an additional TSDB stream', + indexes: [{ index: initialIndex }, { index: 'tsdb_index_2', create: true, tsdb: true }], + }, + ]; + + function runTestsForEachScenario( + initialIndex: string, + testingFn: ( + indexes: Array<{ + index: string; + create?: boolean; + downsample?: boolean; + tsdb?: boolean; + removeTSDBFields?: boolean; + }> + ) => void + ): void { + for (const { name, indexes } of getScenarios(initialIndex)) { + describe(name, () => { + let dataViewName: string; + let downsampledTargetIndex: string = ''; + + before(async () => { + for (const { index, create, downsample, tsdb, removeTSDBFields } of indexes) { + if (create) { + if (tsdb) { + await dataStreams.createDataStream( + index, + getDataMapping({ tsdb, removeTSDBFields }), + tsdb + ); + } else { + log.info(`creating a index "${index}" with mapping...`); + await es.indices.create({ + index, + mappings: { + properties: getDataMapping({ tsdb: Boolean(tsdb), removeTSDBFields }), + }, + }); + } + // add data to the newly created index + await createDocs( + index, + { isStream: Boolean(tsdb), removeTSDBFields }, + fromTimeForScenarios + ); + } + if (downsample) { + downsampledTargetIndex = await dataStreams.downsampleTSDBIndex(index, { + isStream: Boolean(tsdb), + }); + } + } + dataViewName = `${indexes.map(({ index }) => index).join(',')}${ + downsampledTargetIndex ? `,${downsampledTargetIndex}` : '' + }`; + log.info(`creating a data view for "${dataViewName}"...`); + await indexPatterns.create( + { + title: dataViewName, + timeFieldName: '@timestamp', + }, + { override: true } + ); + await PageObjects.common.navigateToApp('lens'); + await elasticChart.setNewChartUiDebugFlag(true); + // go to the + await PageObjects.lens.goToTimeRange( + fromTimeForScenarios, + moment + .utc(toTimeForScenarios, TIME_PICKER_FORMAT) + .add(2, 'hour') + .format(TIME_PICKER_FORMAT) // consider also new documents + ); + }); + + after(async () => { + for (const { index, create, tsdb } of indexes) { + if (create) { + if (tsdb) { + await dataStreams.deleteDataStream(index); + } else { + log.info(`deleting the index "${index}"...`); + await es.indices.delete({ + index, + }); + } + } + // no need to cleant he specific downsample index as everything linked to the stream + // is cleaned up automatically + } + }); + + beforeEach(async () => { + await PageObjects.lens.switchDataPanelIndexPattern(dataViewName); + await PageObjects.lens.removeLayer(); + }); + + testingFn(indexes); + }); + } + } + + describe('Data-stream upgraded to TSDB scenarios', () => { + const streamIndex = 'data_stream'; + // rollover does not allow to change name, it will just change backing index underneath + const streamConvertedToTsdbIndex = streamIndex; + + before(async () => { + log.info(`Creating "${streamIndex}" data stream...`); + await dataStreams.createDataStream(streamIndex, getDataMapping(), false); + + // add some data to the stream + await createDocs(streamIndex, { isStream: true }, fromTimeForScenarios); + + log.info(`Update settings for "${streamIndex}" dataView...`); + await kibanaServer.uiSettings.update({ + 'dateFormat:tz': 'UTC', + 'timepicker:timeDefaults': '{ "from": "now-1y", "to": "now" }', + }); + log.info(`Upgrade "${streamIndex}" stream to TSDB...`); + + const tsdbMapping = getDataMapping({ tsdb: true }); + await dataStreams.upgradeStreamToTSDB(streamIndex, tsdbMapping); + log.info( + `Add more data to new "${streamConvertedToTsdbIndex}" dataView (now with TSDB backing index)...` + ); + // add some more data when upgraded + await createDocs(streamConvertedToTsdbIndex, { isStream: true }, toTimeForScenarios); + }); + + after(async () => { + await dataStreams.deleteDataStream(streamIndex); + }); + + runTestsForEachScenario(streamConvertedToTsdbIndex, (indexes) => { + it('should detect the data stream has now been upgraded to TSDB', async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: `bytes_counter`, + keepOpen: true, + }); + + expect( + testSubjects.exists(`lns-indexPatternDimension-average incompatible`, { + timeout: 500, + }) + ).to.eql(false); + await PageObjects.lens.closeDimensionEditor(); + }); + + it(`should visualize a date histogram chart for counter field`, async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + // check the counter field works + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: `bytes_counter`, + }); + // and also that the count of documents should be "indexes.length" times overall + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'count', + }); + + await PageObjects.lens.waitForVisualization('xyVisChart'); + const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + 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); + 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); + + // 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; + // 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 + ); + }); + }); + }); + + describe('TSDB downgraded to regular data stream scenarios', () => { + const tsdbStream = 'tsdb_stream_dowgradable'; + // rollover does not allow to change name, it will just change backing index underneath + const tsdbConvertedToStream = tsdbStream; + + before(async () => { + log.info(`Creating "${tsdbStream}" data stream...`); + await dataStreams.createDataStream(tsdbStream, getDataMapping({ tsdb: true }), true); + + // add some data to the stream + await createDocs(tsdbStream, { isStream: true }, fromTimeForScenarios); + + log.info(`Update settings for "${tsdbStream}" dataView...`); + await kibanaServer.uiSettings.update({ + 'dateFormat:tz': 'UTC', + 'timepicker:timeDefaults': '{ "from": "now-1y", "to": "now" }', + }); + log.info( + `Dowgrade "${tsdbStream}" stream into regular stream "${tsdbConvertedToStream}"...` + ); + + await dataStreams.downgradeTSDBtoStream(tsdbStream, getDataMapping({ tsdb: true })); + log.info(`Add more data to new "${tsdbConvertedToStream}" dataView (no longer TSDB)...`); + // add some more data when upgraded + await createDocs(tsdbConvertedToStream, { isStream: true }, toTimeForScenarios); + }); + + after(async () => { + await dataStreams.deleteDataStream(tsdbConvertedToStream); + }); + + runTestsForEachScenario(tsdbConvertedToStream, (indexes) => { + it('should keep TSDB restrictions only if a tsdb stream is in the dataView mix', async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'min', + field: `bytes_counter`, + keepOpen: true, + }); + + expect( + testSubjects.exists(`lns-indexPatternDimension-average incompatible`, { + timeout: 500, + }) + ).to.eql(indexes.some(({ tsdb }) => tsdb)); + await PageObjects.lens.closeDimensionEditor(); + }); + + it(`should visualize a date histogram chart for counter field`, async () => { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + // just check the data is shown + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'count', + }); + + // 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 + await PageObjects.lens.waitForVisualization('xyVisChart'); + const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const bars = data.bars![0].bars; + const columnsToCheck = bars.length / 2; + log.info('Check count before the downgrade'); + // Before the upgrade the count is N times the indexes + expect(sumFirstNValues(columnsToCheck, bars)).to.be.greaterThan( + indexes.length * TEST_DOC_COUNT - 1 + ); + log.info('Check count after the downgrade'); + // later there are only documents for the upgraded stream + expect(sumFirstNValues(columnsToCheck, [...bars].reverse())).to.be.greaterThan( + TEST_DOC_COUNT - 1 + ); + }); + + it('should visualize data when moving the time window around the downgrade moment', async () => { + // check after the downgrade + await PageObjects.lens.goToTimeRange( + moment + .utc(fromTimeForScenarios, TIME_PICKER_FORMAT) + .subtract(1, 'hour') + .format(TIME_PICKER_FORMAT), + moment + .utc(fromTimeForScenarios, TIME_PICKER_FORMAT) + .add(1, 'hour') + .format(TIME_PICKER_FORMAT) // consider only new documents + ); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'date_histogram', + field: '@timestamp', + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'count', + }); + + 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); + + // check after the downgrade + await PageObjects.lens.goToTimeRange( + moment + .utc(toTimeForScenarios, TIME_PICKER_FORMAT) + .add(1, 'second') + .format(TIME_PICKER_FORMAT), + moment + .utc(toTimeForScenarios, TIME_PICKER_FORMAT) + .add(2, 'hour') + .format(TIME_PICKER_FORMAT) // consider also new documents + ); + + 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); + }); + }); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/vega_chart.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/vega_chart.ts new file mode 100644 index 0000000000000..e38c188a73096 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group1/vega_chart.ts @@ -0,0 +1,280 @@ +/* + * Copyright 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 { unzip } from 'lodash'; +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +const getTestSpec = (expression: string) => ` +{ +config: { "kibana": {"renderer": "svg"} } +$schema: https://vega.github.io/schema/vega/v5.json +marks: [{ + type: text + encode: { update: { text: { value: "Test" } } } +}] +signals: [ { + on: [{ + events: click + update: ${expression} + }] +}]}`; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'timePicker', + 'visualize', + 'visChart', + 'visEditor', + 'vegaChart', + ]); + const filterBar = getService('filterBar'); + const inspector = getService('inspector'); + const vegaDebugInspectorView = getService('vegaDebugInspector'); + const log = getService('log'); + const retry = getService('retry'); + const browser = getService('browser'); + + describe('vega chart in visualize app', () => { + before(async () => { + await PageObjects.visualize.initTests(); + log.debug('navigateToApp visualize'); + await PageObjects.visualize.navigateToNewVisualization(); + log.debug('clickVega'); + await PageObjects.visualize.clickVega(); + await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + }); + + describe('vega chart', () => { + describe('initial render', () => { + it('should have some initial vega spec text', async function () { + const vegaSpec = await PageObjects.vegaChart.getSpec(); + expect(vegaSpec).to.contain('{'); + expect(vegaSpec).to.contain('data'); + expect(vegaSpec.length).to.be.above(500); + }); + + it('should have view and control containers', async function () { + const view = await PageObjects.vegaChart.getViewContainer(); + expect(view).to.be.ok(); + const size = await view.getSize(); + expect(size).to.have.property('width'); + expect(size).to.have.property('height'); + expect(size.width).to.be.above(0); + expect(size.height).to.be.above(0); + + const controls = await PageObjects.vegaChart.getControlContainer(); + expect(controls).to.be.ok(); + }); + }); + + describe('with filters', () => { + before(async () => { + log.debug('setAbsoluteRange'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + afterEach(async () => { + await filterBar.removeAllFilters(); + }); + + it('should render different data in response to filter change', async function () { + await PageObjects.vegaChart.typeInSpec('"config": { "kibana": {"renderer": "svg"} },'); + await PageObjects.visEditor.clickGo(); + await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + const fullDataLabels = await PageObjects.vegaChart.getYAxisLabels(); + expect(fullDataLabels[0]).to.eql('0'); + expect(fullDataLabels[fullDataLabels.length - 1]).to.eql('1,600'); + await filterBar.addFilter({ field: '@tags.raw', operation: 'is', value: 'error' }); + await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + const filteredDataLabels = await PageObjects.vegaChart.getYAxisLabels(); + expect(filteredDataLabels[0]).to.eql('0'); + expect(filteredDataLabels[filteredDataLabels.length - 1]).to.eql('90'); + }); + }); + }); + + describe('Inspector Panel', () => { + it('should have inspector enabled', async () => { + await inspector.expectIsEnabled(); + }); + + describe('Request Tab', () => { + beforeEach(async () => { + await inspector.open(); + }); + + afterEach(async () => { + await inspector.close(); + }); + + it('should contain "Statistics", "Request", "Response" tabs', async () => { + await inspector.openInspectorRequestsView(); + + for (const getFn of [ + 'getOpenRequestDetailRequestButton', + 'getOpenRequestDetailResponseButton', + 'getOpenRequestStatisticButton', + ] as const) { + await retry.try(async () => { + const requestStatisticTab = await inspector[getFn](); + + expect(await requestStatisticTab.isEnabled()).to.be(true); + }); + } + }); + + it('should set the default query name if not given in the schema', async () => { + const singleExampleRequest = await inspector.hasSingleRequest(); + const selectedExampleRequest = await inspector.getSelectedOption(); + + expect(singleExampleRequest).to.be(true); + expect(selectedExampleRequest).to.equal('Unnamed request #0'); + }); + + it('should log the request statistic', async () => { + await inspector.openInspectorRequestsView(); + const rawTableData = await inspector.getTableData(); + + expect(unzip(rawTableData)[0].join(', ')).to.be( + 'Hits, Hits (total), Query time, Request timestamp' + ); + }); + }); + + describe('Debug Tab', () => { + beforeEach(async () => { + await inspector.open(); + }); + + afterEach(async () => { + await inspector.close(); + }); + + it('should contain "Data Sets", "Signal Values", "Spec" tabs', async () => { + await vegaDebugInspectorView.openVegaDebugInspectorView(); + + for (const getFn of [ + 'getOpenDataViewerButton', + 'getOpenSignalViewerButton', + 'getOpenSpecViewerButton', + ] as const) { + await retry.try(async () => { + const requestStatisticTab = await vegaDebugInspectorView[getFn](); + + expect(await requestStatisticTab.isEnabled()).to.be(true); + }); + } + }); + + it('should contain data on "Signal Values" tab', async () => { + await vegaDebugInspectorView.openVegaDebugInspectorView(); + await vegaDebugInspectorView.navigateToSignalViewerTab(); + + const { rows, columns } = await vegaDebugInspectorView.getGridTableData(); + + expect(columns.join(', ')).to.be('Signal, Value'); + expect(rows.length).to.be.greaterThan(0); + expect(rows[0].length).to.be(2); + }); + + it('should contain data on "Signal Values" tab', async () => { + await vegaDebugInspectorView.openVegaDebugInspectorView(); + await vegaDebugInspectorView.navigateToDataViewerTab(); + + const { rows, columns } = await vegaDebugInspectorView.getGridTableData(); + + expect(columns.length).to.be.greaterThan(0); + expect(rows.length).to.be.greaterThan(0); + }); + + it('should be able to copy vega spec to clipboard', async () => { + await vegaDebugInspectorView.openVegaDebugInspectorView(); + await vegaDebugInspectorView.navigateToSpecViewerTab(); + + const copyCopyToClipboardButton = await vegaDebugInspectorView.getCopyClipboardButton(); + + expect(await copyCopyToClipboardButton.isEnabled()).to.be(true); + + // The "clipboard-read" permission of the Permissions API must be granted + if (!(await browser.checkBrowserPermission('clipboard-read'))) { + return; + } + + await copyCopyToClipboardButton.click(); + + expect( + (await browser.getClipboardValue()).includes( + '"$schema": "https://vega.github.io/schema/vega-lite/' + ) + ).to.be(true); + }); + }); + }); + + describe('Vega extension functions', () => { + beforeEach(async () => { + const filtersCount = await filterBar.getFilterCount(); + if (filtersCount > 0) { + await filterBar.removeAllFilters(); + } + await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + }); + + const fillSpecAndGo = async (newSpec: string) => { + await PageObjects.vegaChart.fillSpec(newSpec); + await PageObjects.visEditor.clickGo(); + + const viewContainer = await PageObjects.vegaChart.getViewContainer(); + const textElement = await viewContainer.findByTagName('text'); + + await textElement.click(); + }; + + it('should update global time range by calling "kibanaSetTimeFilter" expression', async () => { + await fillSpecAndGo(getTestSpec('kibanaSetTimeFilter("2019", "2020")')); + + const currentTimeRange = await PageObjects.timePicker.getTimeConfig(); + + expect(currentTimeRange.start).to.be('Jan 1, 2019 @ 00:00:00.000'); + expect(currentTimeRange.end).to.be('Jan 1, 2020 @ 00:00:00.000'); + }); + + it('should set filter by calling "kibanaAddFilter" expression', async () => { + await fillSpecAndGo( + getTestSpec('kibanaAddFilter({ query_string: { query: "response:200" }})') + ); + + expect(await filterBar.getFilterCount()).to.be(1); + }); + + it('should remove filter by calling "kibanaRemoveFilter" expression', async () => { + await filterBar.addFilter({ field: 'response', operation: 'is', value: '200' }); + + expect(await filterBar.getFilterCount()).to.be(1); + + await fillSpecAndGo( + getTestSpec('kibanaRemoveFilter({ match_phrase: { response: "200" }})') + ); + + expect(await filterBar.getFilterCount()).to.be(0); + }); + + it('should remove all filters by calling "kibanaRemoveAllFilters" expression', async () => { + await filterBar.addFilter({ field: 'response', operation: 'is', value: '200' }); + await filterBar.addFilter({ field: 'response', operation: 'is', value: '500' }); + + expect(await filterBar.getFilterCount()).to.be(2); + + await fillSpecAndGo(getTestSpec('kibanaRemoveAllFilters()')); + + expect(await filterBar.getFilterCount()).to.be(0); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/index.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/index.ts new file mode 100644 index 0000000000000..40cbafbf62c30 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default ({ loadTestFile, getPageObject }: FtrProviderContext) => { + const svlCommonPage = getPageObject('svlCommonPage'); + + describe('Visualizations', function () { + before(async () => { + await svlCommonPage.login(); + }); + + loadTestFile(require.resolve('./group1')); + loadTestFile(require.resolve('./open_in_lens/agg_based')); + loadTestFile(require.resolve('./open_in_lens/tsvb')); + }); +}; diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/gauge.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/gauge.ts new file mode 100644 index 0000000000000..83228021d0bac --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/gauge.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const find = getService('find'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Gauge', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/gauge.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Gauge'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert aggregation with params', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('gaugeChart'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + expect(await dimensions[1].getVisibleText()).to.be('Static value: 0'); + expect(await dimensions[2].getVisibleText()).to.be('Static value: 100'); + + const elementWithInfo = await find.byCssSelector('.echScreenReaderOnly'); + const textContent = await elementWithInfo.getAttribute('textContent'); + expect(textContent).to.contain('Average machine.ram'); + expect(textContent).to.contain('horizontalBullet chart'); + expect(textContent).to.contain('Minimum:0'); + expect(textContent).to.contain('Maximum:100'); + expect(textContent).to.contain('Value:100'); + }); + + it('should not convert aggregation with not supported field type', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Unsupported field type'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('gaugeChart'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + expect(await dimensions[1].getVisibleText()).to.be('Static value: 0'); + expect(await dimensions[2].getVisibleText()).to.be('Static value: 15000000000'); + + const elementWithInfo = await find.byCssSelector('.echScreenReaderOnly'); + const textContent = await elementWithInfo.getAttribute('textContent'); + expect(textContent).to.contain('Average machine.ram'); + expect(textContent).to.contain('horizontalBullet chart'); + expect(textContent).to.contain('Minimum:0'); + expect(textContent).to.contain('Maximum:15000000000'); + expect(textContent).to.contain('Value:13104036080.615'); + + await dimensions[0].click(); + + await lens.openPalettePanel('lnsGauge'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { stop: '0', color: 'rgba(0, 104, 55, 1)' }, + { stop: '10000', color: 'rgba(183, 224, 117, 1)' }, + { stop: '20000', color: 'rgba(253, 191, 111, 1)' }, + { stop: '30000', color: 'rgba(165, 0, 38, 1)' }, + { stop: '15000000000', color: undefined }, + ]); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/goal.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/goal.ts new file mode 100644 index 0000000000000..e42d2c56662e3 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/goal.ts @@ -0,0 +1,201 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Goal', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Goal'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Goal - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert to Lens', async () => { + const visPanel = await panelActions.getPanelHeading('Goal - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Count', + subtitle: undefined, + extraText: '', + value: '140.05%', + color: 'rgba(245, 247, 250, 1)', + showingBar: true, + showingTrendline: false, + }, + ]); + }); + + it('should convert aggregation with params', async () => { + const visPanel = await panelActions.getPanelHeading('Goal - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + expect(await dimensions[1].getVisibleText()).to.be('Static value: 1'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Average machine.ram', + subtitle: undefined, + extraText: '', + value: '131,040,360.81%', + color: 'rgba(245, 247, 250, 1)', + showingBar: true, + showingTrendline: false, + }, + ]); + }); + + it('should convert sibling pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Goal - Sibling pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('Overall Max of Count'); + expect(await dimensions[1].getVisibleText()).to.be('Static value: 1'); + expect(await dimensions[2].getVisibleText()).to.be('@timestamp'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Overall Max of Count', + subtitle: undefined, + extraText: '', + value: '14.37%', + color: 'rgba(245, 247, 250, 1)', + showingBar: true, + showingTrendline: false, + }, + ]); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Goal - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + expect(await dimensions[1].getVisibleText()).to.be('Static value: 13300000000'); + expect(await dimensions[2].getVisibleText()).to.be('machine.os.raw: Descending'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(6); + expect(data).to.eql([ + { + title: 'osx', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,228,964,670.613', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: true, + }, + { + title: 'win 7', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,186,695,551.251', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: true, + }, + { + title: 'win xp', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,073,190,186.423', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: true, + }, + { + title: 'win 8', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,031,579,645.108', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: true, + }, + { + title: 'ios', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,009,497,206.823', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: true, + }, + { + title: undefined, + subtitle: undefined, + extraText: undefined, + value: undefined, + color: 'rgba(0, 0, 0, 0)', + showingTrendline: false, + showingBar: true, + }, + ]); + + await dimensions[0].click(); + + await lens.openPalettePanel('lnsMetric'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { stop: '0', color: 'rgba(0, 104, 55, 1)' }, + { stop: '13000000000', color: 'rgba(183, 224, 117, 1)' }, + { stop: '13100000000', color: 'rgba(253, 191, 111, 1)' }, + { stop: '13200000000', color: 'rgba(165, 0, 38, 1)' }, + { stop: '13300000000', color: undefined }, + ]); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/heatmap.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/heatmap.ts new file mode 100644 index 0000000000000..0e400f11443b2 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/heatmap.ts @@ -0,0 +1,182 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Heatmap', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/heatmap.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Heatmap'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item if no X-axis was specified', async () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - With Y-Axis only'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - With X-Axis only'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert to Lens', async () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - With X-Axis only'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('heatmapChart'); + await lens.enableEchDebugState(); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); + + // Must have Debug state + expect(debugState).to.not.be.eql(null); + + // 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([ + { + color: '#006837', + key: '1,322 - 1,717.5', + name: '1,322 - 1,717.5', + }, + { color: '#86CB66', key: '1,717.5 - 2,113', name: '1,717.5 - 2,113' }, + { + color: '#FEFEBD', + key: '2,113 - 2,508.5', + name: '2,113 - 2,508.5', + }, + { + color: '#F88D52', + key: '2,508.5 - 2,904', + name: '2,508.5 - 2,904', + }, + ]); + }); + + it('should convert to Lens if Y-axis is defined, but X-axis is not', async () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - With Y-Axis only'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('heatmapChart'); + await lens.enableEchDebugState(); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); + + // Must have Debug state + expect(debugState).to.not.be.eql(null); + + 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 () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - Color number'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('heatmapChart'); + await lens.enableEchDebugState(); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); + + // Must have Debug state + 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', + }, + ]); + }); + + it('should show respect heatmap custom color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Heatmap - Custom Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('heatmapChart'); + await lens.enableEchDebugState(); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); + + // Must have Debug state + expect(debugState).to.not.be.eql(null); + + expect(debugState.legend!.items).to.eql([ + { + color: '#006837', + key: '0 - 100', + name: '0 - 100', + }, + { + color: '#65BC62', + key: '100 - 200', + name: '100 - 200', + }, + { + color: '#D8EF8C', + key: '200 - 300', + name: '200 - 300', + }, + { + color: '#FEDF8B', + key: '300 - 400', + name: '300 - 400', + }, + { + color: '#F36D43', + key: '400 - 500', + name: '400 - 500', + }, + { + color: '#A50026', + key: '500 - 600', + name: '500 - 600', + }, + ]); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/index.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/index.ts new file mode 100644 index 0000000000000..0dcbf2584a21e --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/index.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EsArchiver } from '@kbn/es-archiver'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) { + const browser = getService('browser'); + const log = getService('log'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['timePicker']); + const config = getService('config'); + let remoteEsArchiver; + + describe('lens app - Agg based Vis Open in Lens', () => { + const esArchive = 'x-pack/test/functional/es_archives/logstash_functional'; + const localIndexPatternString = 'logstash-*'; + const remoteIndexPatternString = 'ftr-remote:logstash-*'; + const localFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default', + }; + + const remoteFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default', + }; + let esNode: EsArchiver; + let fixtureDirs: { + lensBasic: string; + lensDefault: string; + }; + let indexPatternString: string; + before(async () => { + log.debug('Starting lens before method'); + await browser.setWindowSize(1280, 1200); + try { + config.get('esTestCluster.ccs'); + remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver'); + esNode = remoteEsArchiver; + fixtureDirs = remoteFixtures; + indexPatternString = remoteIndexPatternString; + } catch (error) { + esNode = esArchiver; + fixtureDirs = localFixtures; + indexPatternString = localIndexPatternString; + } + + await esNode.load(esArchive); + // changing the timepicker default here saves us from having to set it in Discover (~8s) + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update({ + defaultIndex: indexPatternString, + 'dateFormat:tz': 'UTC', + }); + await kibanaServer.importExport.load(fixtureDirs.lensBasic); + await kibanaServer.importExport.load(fixtureDirs.lensDefault); + }); + + after(async () => { + await esArchiver.unload(esArchive); + await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.importExport.unload(fixtureDirs.lensBasic); + await kibanaServer.importExport.unload(fixtureDirs.lensDefault); + }); + + loadTestFile(require.resolve('./pie')); + loadTestFile(require.resolve('./metric')); + loadTestFile(require.resolve('./xy')); + loadTestFile(require.resolve('./gauge')); + loadTestFile(require.resolve('./goal')); + loadTestFile(require.resolve('./table')); + loadTestFile(require.resolve('./heatmap')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/metric.ts new file mode 100644 index 0000000000000..e78775241faaa --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/metric.ts @@ -0,0 +1,213 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Metric', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Metric'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should convert to Lens', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Count', + subtitle: undefined, + extraText: '', + value: '14,005', + color: 'rgba(245, 247, 250, 1)', + showingBar: false, + showingTrendline: false, + }, + ]); + }); + + it('should convert aggregation with params', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Average machine.ram', + subtitle: undefined, + extraText: '', + value: '13,104,036,080.615', + color: 'rgba(245, 247, 250, 1)', + showingBar: false, + showingTrendline: false, + }, + ]); + }); + + it('should convert sibling pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Sibling pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('Overall Max of Count'); + expect(await dimensions[1].getVisibleText()).to.be('@timestamp'); + + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(1); + expect(data).to.eql([ + { + title: 'Overall Max of Count', + subtitle: undefined, + extraText: '', + value: '1,437', + color: 'rgba(245, 247, 250, 1)', + showingBar: false, + showingTrendline: false, + }, + ]); + }); + + it('should not convert aggregation with not supported field type', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Unsupported field type'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + expect(await dimensions[1].getVisibleText()).to.be('machine.os.raw: Descending'); + const data = await lens.getMetricVisualizationData(); + expect(data.length).to.be.equal(6); + expect(data).to.eql([ + { + title: 'osx', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,228,964,670.613', + color: 'rgba(165, 0, 38, 1)', + showingBar: false, + showingTrendline: false, + }, + { + title: 'win 7', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,186,695,551.251', + color: 'rgba(253, 191, 111, 1)', + showingBar: false, + showingTrendline: false, + }, + { + title: 'win xp', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,073,190,186.423', + color: 'rgba(183, 224, 117, 1)', + showingBar: false, + showingTrendline: false, + }, + { + title: 'win 8', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,031,579,645.108', + color: 'rgba(183, 224, 117, 1)', + showingBar: false, + showingTrendline: false, + }, + { + title: 'ios', + subtitle: 'Average machine.ram', + extraText: '', + value: '13,009,497,206.823', + color: 'rgba(183, 224, 117, 1)', + showingBar: false, + showingTrendline: false, + }, + { + title: undefined, + subtitle: undefined, + extraText: undefined, + value: undefined, + color: 'rgba(0, 0, 0, 0)', + showingBar: false, + showingTrendline: false, + }, + ]); + + await dimensions[0].click(); + + await lens.openPalettePanel('lnsMetric'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { + color: 'rgba(0, 104, 55, 1)', + stop: '12000000000', + }, + { + color: 'rgba(183, 224, 117, 1)', + stop: '13000000000', + }, + { + color: 'rgba(253, 191, 111, 1)', + stop: '13100000000', + }, + { + color: 'rgba(165, 0, 38, 1)', + stop: '13200000000', + }, + { + color: undefined, + stop: '13300000000', + }, + ]); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/pie.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/pie.ts new file mode 100644 index 0000000000000..550f2e6286c08 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/pie.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const pieChart = getService('pieChart'); + const testSubjects = getService('testSubjects'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Pie', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/pie.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Pie'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should hide the "Convert to Lens" menu item if no split slices were defined', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - No split slices'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should hide the "Convert to Lens" menu item if more than 3 split slices were defined', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - 4 layers'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - 1 Split slice'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert aggregation with params', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('partitionVisChart'); + + expect(await lens.getLayerCount()).to.be(1); + + const sliceByText = await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel', 0); + const sizeByText = await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel', 0); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(sliceByText).to.be('machine.os.raw: Descending'); + expect(sizeByText).to.be('Sum of machine.ram'); + }); + + it('should convert terms to slice by', async () => { + const expectedTableData = ['ios', 'osx', 'win 7', 'win 8', 'win xp']; + + const visPanel = await panelActions.getPanelHeading('Pie - Basic count'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('partitionVisChart'); + await lens.enableEchDebugState(); + + const sliceByText = await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel', 0); + const sizeByText = await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel', 0); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(sliceByText).to.be('machine.os.raw: Descending'); + expect(sizeByText).to.be('Count'); + + await pieChart.expectPieChartLabels(expectedTableData); + }); + + it('should convert Donut type correctly', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - Basic count'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('partitionVisChart'); + + const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); + const type = await chartSwitcher.getVisibleText(); + expect(type).to.be('Donut'); + }); + + it('should convert Pie types correctly', async () => { + const visPanel = await panelActions.getPanelHeading('Pie - Non Donut'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('partitionVisChart'); + + const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); + const type = await chartSwitcher.getVisibleText(); + expect(type).to.be('Pie'); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/table.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/table.ts new file mode 100644 index 0000000000000..66c7538670b6e --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/table.ts @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Table', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/table.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - Table'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should not allow converting of unsupported aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Unsupported Agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Agg with params'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert aggregation with params', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + }); + + it('should convert total function to summary row', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Summary row'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + const summaryRowFunction = await testSubjects.find('lnsDatatable_summaryrow_function'); + expect(await summaryRowFunction.getVisibleText()).to.be('Sum'); + }); + + it('should convert sibling pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Sibling pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const metricText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + const splitRowText = await lens.getDimensionTriggerText('lnsDatatable_rows', 0); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(metricText).to.be('Overall Max of Count'); + expect(splitRowText).to.be('@timestamp'); + }); + + it('should convert parent pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Parent pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const metricText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + const splitRowText = await lens.getDimensionTriggerText('lnsDatatable_rows', 0); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(metricText).to.be('Cumulative Sum of Count'); + expect(splitRowText).to.be('@timestamp'); + }); + + it('should convert split rows and split table to split table rows', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Split rows and tables'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const metricText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + const splitRowText1 = await lens.getDimensionTriggerText('lnsDatatable_rows', 0); + const splitRowText2 = await lens.getDimensionTriggerText('lnsDatatable_rows', 1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(metricText).to.be('Count'); + expect(splitRowText1).to.be('@timestamp'); + expect(splitRowText2).to.be('bytes: Descending'); + }); + + it('should convert percentage column', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Percentage Column'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await lens.getLayerCount()).to.be(1); + + const metricText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + const percentageColumnText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 1); + + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger', 0, 1); + const format = await testSubjects.find('indexPattern-dimension-format'); + expect(await format.getVisibleText()).to.be('Percent'); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(metricText).to.be('Count'); + expect(percentageColumnText).to.be('Count percentages'); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/xy.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/xy.ts new file mode 100644 index 0000000000000..4833dc3aaba37 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/agg_based/xy.ts @@ -0,0 +1,250 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('XY', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/xy.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - XY'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should not allow converting if dot size aggregation is defined', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Dot size metric'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting if split chart is defined', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Split chart'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting if more than one axis left/right/top/bottom are defined', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Multiple Y Axes'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting if several split series are defined', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Multiple Split Series'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting if sibling pipeline agg and split series are defined', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Sibling pipeline agg w/ split'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of unsupported aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Unsupported Agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert in different layers if metrics have different chart types', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Differing Layers'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(2); + const layersSettings = await testSubjects.findAll('lns_layer_settings'); + expect(layersSettings.length).to.be(2); + expect(await layersSettings[0].getVisibleText()).to.be('Area'); + expect(await layersSettings[1].getVisibleText()).to.be('Bar vertical'); + const yDimensionText1 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const yDimensionText2 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 1); + expect(yDimensionText1).to.be('Count'); + expect(yDimensionText2).to.be('Max memory'); + }); + }); + + it('should convert in one layer if metrics have the same chart type', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Similar Layers'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + const layersSettings = await testSubjects.findAll('lns_layer_settings'); + expect(layersSettings.length).to.be(1); + expect(await layersSettings[0].getVisibleText()).to.be('Bar vertical'); + const yDimensionText1 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const yDimensionText2 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 1); + expect(yDimensionText1).to.be('Count'); + expect(yDimensionText2).to.be('Max memory'); + }); + }); + + it('should convert parent pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Parent pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const splitText = await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel', 0); + expect(yDimensionText).to.be('Cumulative Sum of Count'); + expect(splitText).to.be('@timestamp'); + }); + }); + + it('should convert sibling pipeline aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Sibling pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await lens.getLayerCount()).to.be(1); + + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const splitText = await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel', 0); + + expect(yDimensionText).to.be('Overall Max of Count'); + expect(splitText).to.be('@timestamp'); + + await lens.openDimensionEditor('lnsXY_splitDimensionPanel > lns-dimensionTrigger'); + const collapseBy = await testSubjects.find('indexPattern-collapse-by'); + expect(await collapseBy.getAttribute('value')).to.be('max'); + }); + + it('should draw a reference line', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Reference line'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(2); + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Count'); + const referenceLineDimensionText = await lens.getDimensionTriggerText( + 'lnsXY_yReferenceLineLeftPanel', + 0 + ); + + expect(referenceLineDimensionText).to.be('Static value: 10'); + }); + }); + + it('should convert line stacked to area stacked chart', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Stacked lines'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + const layersSettings = await testSubjects.findAll('lns_layer_settings'); + expect(layersSettings.length).to.be(1); + expect(await layersSettings[0].getVisibleText()).to.be('Area stacked'); + }); + }); + + it('should convert percentage charts', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Percentage chart'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + const layersSettings = await testSubjects.findAll('lns_layer_settings'); + expect(layersSettings.length).to.be(1); + expect(await layersSettings[0].getVisibleText()).to.be('Area percentage'); + }); + }); + + it('should convert horizontal bar', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Horizontal Bar'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + const layersSettings = await testSubjects.findAll('lns_layer_settings'); + expect(layersSettings.length).to.be(1); + expect(await layersSettings[0].getVisibleText()).to.be('Bar horizontal'); + }); + }); + + it('should convert y-axis positions', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Axis positions'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await lens.getLayerCount()).to.be(1); + + const yDimensionText1 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const yDimensionText2 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 1); + expect(yDimensionText1).to.be('Count'); + expect(yDimensionText2).to.be('Max memory'); + + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + let axisPosition = await lens.getSelectedAxisSide(); + expect(axisPosition).to.be('Left'); + await lens.closeDimensionEditor(); + + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger', 0, 1); + axisPosition = await lens.getSelectedAxisSide(); + expect(axisPosition).to.be('Right'); + }); + + it('should convert split series', async () => { + const visPanel = await panelActions.getPanelHeading('XY - Split Series'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + const expectedData = ['win 8', 'win xp', 'win 7', 'ios', 'osx']; + await lens.enableEchDebugState(); + const data = await lens.getCurrentChartDebugState('xyVisChart'); + await retry.try(async () => { + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Count'); + const splitDimensionText = await lens.getDimensionTriggerText( + 'lnsXY_splitDimensionPanel', + 0 + ); + expect(splitDimensionText).to.be('machine.os.raw: Descending'); + }); + expect(data?.legend?.items.map((item) => item.name)).to.eql(expectedData); + }); + + it('should convert x-axis', async () => { + const visPanel = await panelActions.getPanelHeading('XY - X Axis'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + const expectedData = ['Count']; + await lens.enableEchDebugState(); + const data = await lens.getCurrentChartDebugState('xyVisChart'); + await retry.try(async () => { + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Count'); + const xDimensionText = await lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0); + expect(xDimensionText).to.be('machine.os.raw: Descending'); + }); + expect(data?.legend?.items.map((item) => item.name)).to.eql(expectedData); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/dashboard.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/dashboard.ts new file mode 100644 index 0000000000000..ea05c3453dc7b --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/dashboard.ts @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard, canvas } = getPageObjects([ + 'visualize', + 'lens', + 'timePicker', + 'dashboard', + 'canvas', + ]); + const dashboardCustomizePanel = getService('dashboardCustomizePanel'); + const dashboardBadgeActions = getService('dashboardBadgeActions'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Dashboard to TSVB to Lens', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/dashboard.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + }); + + it('should convert a by value TSVB viz to a Lens viz', async () => { + await dashboard.gotoDashboardEditMode('Convert to Lens - Dashboard - TSVB - 1'); + await timePicker.setDefaultAbsoluteRange(); + + await dashboard.waitForRenderComplete(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await dashboardPanelActions.customizePanel(); + await dashboardCustomizePanel.enableCustomTimeRange(); + await dashboardCustomizePanel.openDatePickerQuickMenu(); + await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); + await dashboardCustomizePanel.clickSaveButton(); + await dashboard.waitForRenderComplete(); + await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + + const visPanel = await panelActions.getPanelHeading('My TSVB to Lens viz 1'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(await dimensions[1].getVisibleText()).to.be('Count of records'); + }); + + await lens.replaceInDashboard(); + await retry.try(async () => { + const embeddableCount = await canvas.getEmbeddableCount(); + expect(embeddableCount).to.eql(originalEmbeddableCount); + }); + const titles = await dashboard.getPanelTitles(); + expect(titles[0]).to.be('My TSVB to Lens viz 1 (converted)'); + await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + await panelActions.removePanel(); + }); + + it('should convert a by reference TSVB viz to a Lens viz', async () => { + await dashboard.gotoDashboardEditMode('Convert to Lens - Dashboard - TSVB - 2'); + // await dashboard.gotoDashboardEditMode('Convert to Lens - Dashboard - Metric'); + await timePicker.setDefaultAbsoluteRange(); + + // save it to library + const originalPanel = await testSubjects.find('embeddablePanelHeading-'); + await panelActions.saveToLibrary('My TSVB to Lens viz 2', originalPanel); + + await dashboard.waitForRenderComplete(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await dashboardPanelActions.customizePanel(); + await dashboardCustomizePanel.enableCustomTimeRange(); + await dashboardCustomizePanel.openDatePickerQuickMenu(); + await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); + await dashboardCustomizePanel.clickSaveButton(); + await dashboard.waitForRenderComplete(); + await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + + const visPanel = await panelActions.getPanelHeading('My TSVB to Lens viz 2'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(await dimensions[1].getVisibleText()).to.be('Count of records'); + }); + + await lens.replaceInDashboard(); + await retry.try(async () => { + const embeddableCount = await canvas.getEmbeddableCount(); + expect(embeddableCount).to.eql(originalEmbeddableCount); + }); + + const panel = await testSubjects.find(`embeddablePanelHeading-MyTSVBtoLensviz2(converted)`); + const descendants = await testSubjects.findAllDescendant( + 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', + panel + ); + expect(descendants.length).to.equal(0); + const titles = await dashboard.getPanelTitles(); + expect(titles[0]).to.be('My TSVB to Lens viz 2 (converted)'); + await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + await panelActions.removePanel(); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/gauge.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/gauge.ts new file mode 100644 index 0000000000000..7839328869123 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/gauge.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const find = getService('find'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Gauge', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/gauge.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - TSVB - Gauge'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert to Lens', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + const metricData = await lens.getMetricVisualizationData(); + expect(metricData[0].title).to.eql('Count of records'); + }); + + it('should convert metric with params', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Value count'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + await retry.try(async () => { + const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); + expect(layers).to.have.length(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('Count of bytes'); + expect(await dimensions[1].getVisibleText()).to.be('overall_max(count(bytes))'); + }); + }); + + it('should not allow converting of unsupported metric', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Unsupported metric'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of invalid panel', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Invalid panel'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + await retry.try(async () => { + const closePalettePanels = await testSubjects.findAll( + 'lns-indexPattern-PalettePanelContainerBack' + ); + if (closePalettePanels.length) { + await lens.closePalettePanel(); + await lens.closeDimensionEditor(); + } + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + + await dimensions[0].click(); + + await lens.openPalettePanel('lnsMetric'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { stop: '', color: 'rgba(104, 188, 0, 1)' }, + { stop: '10', color: 'rgba(84, 179, 153, 1)' }, + { stop: '100', color: 'rgba(84, 160, 0, 1)' }, + { stop: '', color: undefined }, + ]); + }); + }); + + it('should bring the ignore global filters configured at series level over', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Ignore global filters series'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + + it('should bring the ignore global filters configured at panel level over', async () => { + const visPanel = await panelActions.getPanelHeading('Gauge - Ignore global filters panel'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/index.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/index.ts new file mode 100644 index 0000000000000..26a2f8cfe55fe --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/index.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EsArchiver } from '@kbn/es-archiver'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) { + const browser = getService('browser'); + const log = getService('log'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['timePicker']); + const config = getService('config'); + let remoteEsArchiver; + + describe('lens app - TSVB Open in Lens', () => { + const esArchive = 'x-pack/test/functional/es_archives/logstash_functional'; + const localIndexPatternString = 'logstash-*'; + const remoteIndexPatternString = 'ftr-remote:logstash-*'; + const localFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/default', + }; + + const remoteFixtures = { + lensBasic: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/lens_basic.json', + lensDefault: 'x-pack/test/functional/fixtures/kbn_archiver/lens/ccs/default', + }; + let esNode: EsArchiver; + let fixtureDirs: { + lensBasic: string; + lensDefault: string; + }; + let indexPatternString: string; + before(async () => { + log.debug('Starting lens before method'); + await browser.setWindowSize(1280, 1200); + try { + config.get('esTestCluster.ccs'); + remoteEsArchiver = getService('remoteEsArchiver' as 'esArchiver'); + esNode = remoteEsArchiver; + fixtureDirs = remoteFixtures; + indexPatternString = remoteIndexPatternString; + } catch (error) { + esNode = esArchiver; + fixtureDirs = localFixtures; + indexPatternString = localIndexPatternString; + } + + await esNode.load(esArchive); + // changing the timepicker default here saves us from having to set it in Discover (~8s) + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update({ + defaultIndex: indexPatternString, + 'dateFormat:tz': 'UTC', + }); + await kibanaServer.importExport.load(fixtureDirs.lensBasic); + await kibanaServer.importExport.load(fixtureDirs.lensDefault); + }); + + after(async () => { + await esArchiver.unload(esArchive); + await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.importExport.unload(fixtureDirs.lensBasic); + await kibanaServer.importExport.unload(fixtureDirs.lensDefault); + }); + + loadTestFile(require.resolve('./metric')); + loadTestFile(require.resolve('./gauge')); + loadTestFile(require.resolve('./timeseries')); + loadTestFile(require.resolve('./dashboard')); + loadTestFile(require.resolve('./top_n')); + loadTestFile(require.resolve('./table')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/metric.ts new file mode 100644 index 0000000000000..cfd8ecb23c238 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/metric.ts @@ -0,0 +1,134 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Metric', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/metric.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - TSVB - Metric'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should convert to Lens', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + const metricData = await lens.getMetricVisualizationData(); + expect(metricData[0].title).to.eql('Count of records'); + }); + + it('should draw static value', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Static value'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + expect(await dimensions[0].getVisibleText()).to.be('10'); + }); + }); + + it('should convert metric agg with params', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + expect(await dimensions[0].getVisibleText()).to.be('Count of bytes'); + }); + }); + + it('should not allow converting of unsupported metric', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Unsupported metric'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of invalid panel', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Invalid panel'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + await retry.try(async () => { + const closePalettePanels = await testSubjects.findAll( + 'lns-indexPattern-PalettePanelContainerBack' + ); + if (closePalettePanels.length) { + await lens.closePalettePanel(); + await lens.closeDimensionEditor(); + } + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(1); + + await dimensions[0].click(); + + await lens.openPalettePanel('lnsMetric'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { stop: '10', color: 'rgba(84, 179, 153, 1)' }, + { stop: '', color: undefined }, + ]); + }); + }); + + it('should bring the ignore global filters configured at series level over', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Ignore global filters series'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + + it('should bring the ignore global filters configured at panel level over', async () => { + const visPanel = await panelActions.getPanelHeading('Metric - Ignore global filters panel'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('mtrVis'); + + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/table.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/table.ts new file mode 100644 index 0000000000000..6e03af2667a12 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/table.ts @@ -0,0 +1,178 @@ +/* + * Copyright 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. + */ + +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Table', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/table.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - TSVB - Table'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should allow converting a count aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should not allow converting of not valid panel', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Invalid panel'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of unsupported aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Unsupported agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting sibling pipeline aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Sibling pipeline agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting parent pipeline aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Parent pipeline agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting invalid aggregation function', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Invalid agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting series with different aggregation function or aggregation by', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Different agg function'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert last value mode to reduced time range', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Last value mode'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + await testSubjects.click('indexPattern-advanced-accordion'); + const reducedTimeRange = await testSubjects.find('indexPattern-dimension-reducedTimeRange'); + expect(await reducedTimeRange.getVisibleText()).to.be('1 minute (1m)'); + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + const metricDimensionText = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + expect(metricDimensionText).to.be('Count of records last 1m'); + }); + }); + + it('should convert static value to the metric dimension', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Static value'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + const metricDimensionText1 = await lens.getDimensionTriggerText('lnsDatatable_metrics', 0); + const metricDimensionText2 = await lens.getDimensionTriggerText('lnsDatatable_metrics', 1); + expect(metricDimensionText1).to.be('Count of records'); + expect(metricDimensionText2).to.be('10'); + }); + }); + + it('should convert aggregate by to split row dimension', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Agg by'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + const splitRowsText1 = await lens.getDimensionTriggerText('lnsDatatable_rows', 0); + const splitRowsText2 = await lens.getDimensionTriggerText('lnsDatatable_rows', 1); + expect(splitRowsText1).to.be('Top 10 values of machine.os.raw'); + expect(splitRowsText2).to.be('Top 10 values of clientip'); + }); + + await lens.openDimensionEditor('lnsDatatable_rows > lns-dimensionTrigger', 0, 1); + const collapseBy = await testSubjects.find('indexPattern-collapse-by'); + expect(await collapseBy.getAttribute('value')).to.be('sum'); + }); + + it('should convert group by field with custom label', async () => { + const visPanel = await panelActions.getPanelHeading('Table - GroupBy label'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + const splitRowsText = await lens.getDimensionTriggerText('lnsDatatable_rows', 0); + expect(splitRowsText).to.be('test'); + }); + }); + + it('should convert color ranges', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Color ranges'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + await retry.try(async () => { + const closePalettePanels = await testSubjects.findAll( + 'lns-indexPattern-PalettePanelContainerBack' + ); + if (closePalettePanels.length) { + await lens.closePalettePanel(); + await lens.closeDimensionEditor(); + } + + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + + await lens.openPalettePanel('lnsDatatable'); + const colorStops = await lens.getPaletteColorStops(); + + expect(colorStops).to.eql([ + { stop: '10', color: 'rgba(84, 179, 153, 1)' }, + { stop: '100', color: 'rgba(84, 160, 0, 1)' }, + { stop: '', color: undefined }, + ]); + }); + }); + + it('should bring the ignore global filters configured at panel level over', async () => { + const visPanel = await panelActions.getPanelHeading('Table - Ignore global filters panel'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('lnsDataTable'); + + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/timeseries.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/timeseries.ts new file mode 100644 index 0000000000000..f2552326019fc --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/timeseries.ts @@ -0,0 +1,170 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const find = getService('find'); + const filterBar = getService('filterBar'); + const queryBar = getService('queryBar'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Time Series', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/timeseries.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - TSVB - Timeseries'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item for a count aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('visualizes field to Lens and loads fields to the dimesion editor', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + await retry.try(async () => { + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('@timestamp'); + expect(await dimensions[1].getVisibleText()).to.be('Count of records'); + }); + }); + + it('should preserve app filters in lens', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - With filter'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await filterBar.hasFilter('extension', 'css')).to.be(true); + }); + + it('should preserve query in lens', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - With query'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); + }); + + it('should draw a reference line', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Reference line'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + await retry.try(async () => { + const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); + + const referenceLineDimensions = await testSubjects.findAllDescendant( + 'lns-dimensionTrigger', + layers[1] + ); + expect(referenceLineDimensions).to.have.length(1); + expect(await referenceLineDimensions[0].getVisibleText()).to.be('Static value: 10'); + + const dimensions = await testSubjects.findAllDescendant('lns-dimensionTrigger', layers[0]); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('@timestamp'); + expect(await dimensions[1].getVisibleText()).to.be('Count of records'); + }); + }); + + it('should convert metric agg with params', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Agg with params'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(2); + expect(await dimensions[0].getVisibleText()).to.be('@timestamp'); + expect(await dimensions[1].getVisibleText()).to.eql( + 'Counter rate of machine.ram per second' + ); + }); + }); + + it('should not allow converting of invalid panel', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Invalid panel'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of unsupported aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Unsupported aggregations'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert parent pipeline aggregation with terms', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Parent pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('@timestamp'); + expect(await dimensions[1].getVisibleText()).to.eql('Cumulative sum of Records'); + expect(await dimensions[2].getVisibleText()).to.eql('Top 10 values of extension.raw'); + }); + }); + + it('should convert sibling pipeline aggregation with terms', async () => { + const visPanel = await panelActions.getPanelHeading('Timeseries - Sibling pipeline agg'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + await retry.try(async () => { + expect(await lens.getLayerCount()).to.be(1); + + const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); + expect(dimensions).to.have.length(3); + expect(await dimensions[0].getVisibleText()).to.be('@timestamp'); + expect(await dimensions[1].getVisibleText()).to.eql('overall_average(count())'); + expect(await dimensions[2].getVisibleText()).to.eql('Top 10 values of extension.raw'); + }); + }); + + it('should bring the ignore global filters configured at series level over', async () => { + const visPanel = await panelActions.getPanelHeading( + 'Timeseries - Ignore global filters series' + ); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + + it('should bring the ignore global filters configured at panel level over', async () => { + const visPanel = await panelActions.getPanelHeading( + 'Timeseries - Ignore global filters panel' + ); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/top_n.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/top_n.ts new file mode 100644 index 0000000000000..247133e14ded4 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/open_in_lens/tsvb/top_n.ts @@ -0,0 +1,170 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']); + + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const filterBar = getService('filterBar'); + const queryBar = getService('queryBar'); + const panelActions = getService('dashboardPanelActions'); + const kibanaServer = getService('kibanaServer'); + + describe('Top N', function describeIndexTests() { + const fixture = + 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/tsvb/top_n.json'; + + before(async () => { + await kibanaServer.importExport.load(fixture); + }); + + after(async () => { + await kibanaServer.importExport.unload(fixture); + }); + + beforeEach(async () => { + await dashboard.navigateToApp(); // required for svl until dashboard PO navigation is fixed + await dashboard.gotoDashboardEditMode('Convert to Lens - TSVB - Top N'); + await timePicker.setDefaultAbsoluteRange(); + }); + + it('should show the "Convert to Lens" menu item for a count aggregation', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Basic'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + }); + + it('should not allow converting of invalid panel', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Invalid panel'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should not allow converting of unsupported aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Unsupported agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should hide the "Convert to Lens" menu item for a sibling pipeline aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Sibling pipeline agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should hide the "Convert to Lens" menu item for a parent pipeline aggregations', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Parent pipeline agg'); + expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + }); + + it('should convert to horizontal bar', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Horizontal bar'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); + const type = await chartSwitcher.getVisibleText(); + expect(type).to.be('Bar horizontal'); + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Maximum of memory'); + }); + }); + + it('should convert group by to vertical axis', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Group by'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + + const xDimensionText = await lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0); + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(xDimensionText).to.be('Top 10 values of extension.raw'); + expect(yDimensionText).to.be('Count of records'); + }); + }); + + it('should convert last value mode to reduced time range', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Last value'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await testSubjects.click('indexPattern-advanced-accordion'); + const reducedTimeRange = await testSubjects.find('indexPattern-dimension-reducedTimeRange'); + expect(await reducedTimeRange.getVisibleText()).to.be('1 minute (1m)'); + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(1); + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Count of records last 1m'); + }); + }); + + it('should convert static value to the separate layer with y dimension', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Static value'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + const layerCount = await lens.getLayerCount(); + expect(layerCount).to.be(2); + const yDimensionText1 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + const yDimensionText2 = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 1); + expect(yDimensionText1).to.be('Count of records'); + expect(yDimensionText2).to.be('10'); + }); + }); + + it('visualizes field to Lens and loads fields to the dimesion editor', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Basic'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + await retry.try(async () => { + const yDimensionText = await lens.getDimensionTriggerText('lnsXY_yDimensionPanel', 0); + expect(yDimensionText).to.be('Count of records'); + }); + }); + + it('should preserve app filters in lens', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - With filter'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await filterBar.hasFilter('extension', 'css')).to.be(true); + }); + + it('should preserve query in lens', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - With query'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + + expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); + }); + + it('should bring the ignore global filters configured at series level over', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Ignore global filters series'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + + it('should bring the ignore global filters configured at panel level over', async () => { + const visPanel = await panelActions.getPanelHeading('Top N - Ignore global filters panel'); + await panelActions.convertToLens(visPanel); + await lens.waitForVisualization('xyVisChart'); + expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts b/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts new file mode 100644 index 0000000000000..191c99643642c --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const baseTestConfig = await readConfigFile(require.resolve('../config.ts')); + + return { + ...baseTestConfig.getAll(), + testFiles: [require.resolve('../../common/visualizations')], + junit: { + reportName: 'Serverless Observability Functional Tests - Common Group 2', + }, + }; +} diff --git a/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group2.ts b/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group2.ts new file mode 100644 index 0000000000000..19fbe190fc4c2 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group2.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const baseTestConfig = await readConfigFile(require.resolve('../config.ts')); + + return { + ...baseTestConfig.getAll(), + testFiles: [require.resolve('../../common/visualizations')], + junit: { + reportName: 'Serverless Search Functional Tests - Common Group 2', + }, + }; +} diff --git a/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts b/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts new file mode 100644 index 0000000000000..ec66a5a5f4f2b --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const baseTestConfig = await readConfigFile(require.resolve('../config.ts')); + + return { + ...baseTestConfig.getAll(), + testFiles: [require.resolve('../../common/visualizations')], + junit: { + reportName: 'Serverless Security Functional Tests - Common Group 2', + }, + }; +} diff --git a/x-pack/test_serverless/tsconfig.json b/x-pack/test_serverless/tsconfig.json index 66bef3ea9911c..6b00c6c4c8bf6 100644 --- a/x-pack/test_serverless/tsconfig.json +++ b/x-pack/test_serverless/tsconfig.json @@ -50,6 +50,7 @@ "@kbn/data-plugin", "@kbn/dev-utils", "@kbn/bfetch-plugin", + "@kbn/es-archiver", "@kbn/rule-data-utils", "@kbn/rison", "@kbn/std", From 88b85eb874e8313f4c4e90863959f38b67ce3f98 Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Wed, 4 Oct 2023 17:02:08 -0400 Subject: [PATCH 105/170] Get the assetClient ready for building inventory prototype (#167692) --- .buildkite/ftr_configs.yml | 3 +- x-pack/plugins/asset_manager/common/config.ts | 8 - .../asset_manager/common/constants_routes.ts | 1 + .../plugins/asset_manager/common/types_api.ts | 23 +- .../asset_manager/common/types_client.ts | 10 +- x-pack/plugins/asset_manager/docs/api.md | 24 +- .../public/lib/public_assets_client.test.ts | 35 +- .../public/lib/public_assets_client.ts | 16 +- .../{get_hosts_by_signals.ts => get_hosts.ts} | 15 +- .../accessors/hosts/get_hosts_by_assets.ts | 27 -- .../server/lib/accessors/hosts/index.ts | 19 -- .../server/lib/accessors/index.ts | 19 -- .../lib/accessors/services/get_services.ts | 59 ++++ .../services/get_services_by_assets.ts | 46 --- .../services/get_services_by_signals.ts | 41 --- .../server/lib/accessors/services/index.ts | 20 -- .../server/lib/asset_client.test.ts | 306 ++++++++++++++++++ .../asset_manager/server/lib/asset_client.ts | 44 +-- .../server/lib/asset_client_types.ts | 28 ++ .../server/lib/collectors/services.ts | 3 + .../asset_manager/server/lib/parse_ean.ts | 16 + .../lib/validators/validate_date_range.ts | 59 ++++ .../server/lib/validators/validation_error.ts | 20 ++ x-pack/plugins/asset_manager/server/plugin.ts | 14 +- .../server/routes/assets/hosts.ts | 16 +- .../server/routes/assets/services.ts | 46 ++- x-pack/plugins/asset_manager/server/types.ts | 7 +- x-pack/plugins/asset_manager/tsconfig.json | 5 +- .../metrics_data_access/server/client_mock.ts | 23 ++ .../metrics_data_access/server/index.ts | 1 + ...ssets_source.ts => config_when_enabled.ts} | 3 +- .../config_with_signals_source.ts | 98 ------ .../tests/{with_assets_source => }/assets.ts | 6 +- .../{with_assets_source => }/assets_diff.ts | 6 +- .../assets_related.ts | 6 +- .../tests/{with_signals_source => }/basics.ts | 6 +- .../tests/{with_signals_source => }/hosts.ts | 4 +- .../tests/{with_assets_source => }/index.ts | 6 +- .../{with_assets_source => }/sample_assets.ts | 4 +- .../{with_signals_source => }/services.ts | 6 +- .../tests/with_assets_source/basics.ts | 29 -- .../tests/with_signals_source/index.ts | 15 - .../apis/asset_manager/types.ts | 2 +- 43 files changed, 700 insertions(+), 445 deletions(-) rename x-pack/plugins/asset_manager/server/lib/accessors/hosts/{get_hosts_by_signals.ts => get_hosts.ts} (60%) delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_assets.ts delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/hosts/index.ts delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/index.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/services/get_services.ts delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_assets.ts delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_signals.ts delete mode 100644 x-pack/plugins/asset_manager/server/lib/accessors/services/index.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/asset_client.test.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/asset_client_types.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/parse_ean.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/validators/validate_date_range.ts create mode 100644 x-pack/plugins/asset_manager/server/lib/validators/validation_error.ts create mode 100644 x-pack/plugins/metrics_data_access/server/client_mock.ts rename x-pack/test/api_integration/apis/asset_manager/{config_with_assets_source.ts => config_when_enabled.ts} (96%) delete mode 100644 x-pack/test/api_integration/apis/asset_manager/config_with_signals_source.ts rename x-pack/test/api_integration/apis/asset_manager/tests/{with_assets_source => }/assets.ts (98%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_assets_source => }/assets_diff.ts (98%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_assets_source => }/assets_related.ts (98%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_signals_source => }/basics.ts (87%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_signals_source => }/hosts.ts (94%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_assets_source => }/index.ts (73%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_assets_source => }/sample_assets.ts (98%) rename x-pack/test/api_integration/apis/asset_manager/tests/{with_signals_source => }/services.ts (95%) delete mode 100644 x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/basics.ts delete mode 100644 x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/index.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 1fc0967ffe712..409d3f7927544 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -69,7 +69,6 @@ disabled: - x-pack/test/plugin_api_perf/config.js - x-pack/test/screenshot_creation/config.ts - x-pack/test/fleet_packages/config.ts - - x-pack/test/api_integration/apis/asset_manager/config_with_assets_source.ts # Scalability testing config that we run in its own pipeline - x-pack/test/scalability/config.ts @@ -174,7 +173,7 @@ enabled: - x-pack/test/api_integration/config_security_trial.ts - x-pack/test/api_integration/apis/aiops/config.ts - x-pack/test/api_integration/apis/asset_manager/config_when_disabled.ts - - x-pack/test/api_integration/apis/asset_manager/config_with_signals_source.ts + - x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts - x-pack/test/api_integration/apis/cases/config.ts - x-pack/test/api_integration/apis/cloud_security_posture/config.ts - x-pack/test/api_integration/apis/console/config.ts diff --git a/x-pack/plugins/asset_manager/common/config.ts b/x-pack/plugins/asset_manager/common/config.ts index 0a57e37d497bb..22d1c2ace4578 100644 --- a/x-pack/plugins/asset_manager/common/config.ts +++ b/x-pack/plugins/asset_manager/common/config.ts @@ -23,14 +23,6 @@ export const configSchema = schema.object({ }, { defaultValue: INDEX_DEFAULTS } ), - // Choose an explicit source for asset queries. - // NOTE: This will eventually need to be able to cleverly switch - // between these values based on the availability of data in the - // indices, and possibly for each asset kind/type value. - // For now, we set this explicitly. - lockedSource: schema.oneOf([schema.literal('assets'), schema.literal('signals')], { - defaultValue: 'signals', - }), }); export type AssetManagerConfig = TypeOf; diff --git a/x-pack/plugins/asset_manager/common/constants_routes.ts b/x-pack/plugins/asset_manager/common/constants_routes.ts index 1aef43f7383bd..d256e4264a035 100644 --- a/x-pack/plugins/asset_manager/common/constants_routes.ts +++ b/x-pack/plugins/asset_manager/common/constants_routes.ts @@ -16,3 +16,4 @@ export const GET_RELATED_ASSETS = base('/assets/related'); export const GET_ASSETS_DIFF = base('/assets/diff'); export const GET_HOSTS = base('/assets/hosts'); +export const GET_SERVICES = base('/assets/services'); diff --git a/x-pack/plugins/asset_manager/common/types_api.ts b/x-pack/plugins/asset_manager/common/types_api.ts index 11b5ea4bda3a4..3b63f26819202 100644 --- a/x-pack/plugins/asset_manager/common/types_api.ts +++ b/x-pack/plugins/asset_manager/common/types_api.ts @@ -196,6 +196,10 @@ export const sizeRT = rt.union([ createLiteralValueFromUndefinedRT(10), ]); export const assetDateRT = rt.union([dateRt, datemathStringRt]); + +/** + * Hosts + */ export const getHostAssetsQueryOptionsRT = rt.exact( rt.partial({ from: assetDateRT, @@ -204,8 +208,25 @@ export const getHostAssetsQueryOptionsRT = rt.exact( }) ); export type GetHostAssetsQueryOptions = rt.TypeOf; - export const getHostAssetsResponseRT = rt.type({ hosts: rt.array(assetRT), }); export type GetHostAssetsResponse = rt.TypeOf; + +/** + * Services + */ +export const getServiceAssetsQueryOptionsRT = rt.exact( + rt.partial({ + from: assetDateRT, + to: assetDateRT, + size: sizeRT, + parent: rt.string, + }) +); + +export type GetServiceAssetsQueryOptions = rt.TypeOf; +export const getServiceAssetsResponseRT = rt.type({ + services: rt.array(assetRT), +}); +export type GetServiceAssetsResponse = rt.TypeOf; diff --git a/x-pack/plugins/asset_manager/common/types_client.ts b/x-pack/plugins/asset_manager/common/types_client.ts index 350a168da8965..79d2c11e42abf 100644 --- a/x-pack/plugins/asset_manager/common/types_client.ts +++ b/x-pack/plugins/asset_manager/common/types_client.ts @@ -5,13 +5,13 @@ * 2.0. */ -export interface GetHostsOptionsPublic { +export interface SharedAssetsOptionsPublic { from: string; - to: string; + to?: string; } -export interface GetServicesOptionsPublic { - from: string; - to: string; +export type GetHostsOptionsPublic = SharedAssetsOptionsPublic; + +export interface GetServicesOptionsPublic extends SharedAssetsOptionsPublic { parent?: string; } diff --git a/x-pack/plugins/asset_manager/docs/api.md b/x-pack/plugins/asset_manager/docs/api.md index 755abfe4be373..66a1984297c16 100644 --- a/x-pack/plugins/asset_manager/docs/api.md +++ b/x-pack/plugins/asset_manager/docs/api.md @@ -165,9 +165,11 @@ it will be able to pull the properly-scoped client dependencies off of that requ ### Client methods +TODO: Link to a centralized asset document example that each response can reference? + #### getHosts -Get a group of host assets found within a specified time range. +Get a list of host assets found within a specified time range. | Parameter | Type | Required? | Description | | :-------- | :-------------- | :-------- | :--------------------------------------------------------------------- | @@ -184,4 +186,22 @@ Get a group of host assets found within a specified time range. } ``` -TODO: Link to a centralized asset document example that each response can reference? +#### getServices + +Get a list of service assets found within a specified time range. + +| Parameter | Type | Required? | Description | +| :-------- | :-------------- | :-------- | :--------------------------------------------------------------------- | +| from | datetime string | yes | ISO date string representing the START of the time range being queried | +| to | datetime string | yes | ISO date string representing the END of the time range being queried | +| parent | string | no | EAN value for a given parent service to filter services by | + +**Response** + +```json +{ + "services": [ + ...found service assets + ] +} +``` diff --git a/x-pack/plugins/asset_manager/public/lib/public_assets_client.test.ts b/x-pack/plugins/asset_manager/public/lib/public_assets_client.test.ts index 93cc541a34af4..5eca030e832db 100644 --- a/x-pack/plugins/asset_manager/public/lib/public_assets_client.test.ts +++ b/x-pack/plugins/asset_manager/public/lib/public_assets_client.test.ts @@ -40,9 +40,40 @@ describe('Public assets client', () => { it('should return the direct results of http.get', async () => { const client = new PublicAssetsClient(http); - http.get.mockResolvedValueOnce('my result'); + http.get.mockResolvedValueOnce('my hosts'); const result = await client.getHosts({ from: 'x', to: 'y' }); - expect(result).toBe('my result'); + expect(result).toBe('my hosts'); + }); + }); + + describe('getServices', () => { + it('should call the REST API', async () => { + const client = new PublicAssetsClient(http); + await client.getServices({ from: 'x', to: 'y' }); + expect(http.get).toBeCalledTimes(1); + }); + + it('should include specified "from" and "to" parameters in http.get query', async () => { + const client = new PublicAssetsClient(http); + await client.getServices({ from: 'x', to: 'y' }); + expect(http.get).toBeCalledWith(routePaths.GET_SERVICES, { + query: { from: 'x', to: 'y' }, + }); + }); + + it('should include specified "parent" parameter in http.get query', async () => { + const client = new PublicAssetsClient(http); + await client.getServices({ from: 'x', to: 'y', parent: 'container:123' }); + expect(http.get).toBeCalledWith(routePaths.GET_SERVICES, { + query: { from: 'x', to: 'y', parent: 'container:123' }, + }); + }); + + it('should return the direct results of http.get', async () => { + const client = new PublicAssetsClient(http); + http.get.mockResolvedValueOnce('my services'); + const result = await client.getServices({ from: 'x', to: 'y' }); + expect(result).toBe('my services'); }); }); }); diff --git a/x-pack/plugins/asset_manager/public/lib/public_assets_client.ts b/x-pack/plugins/asset_manager/public/lib/public_assets_client.ts index dd18386868f94..9509e61e073a6 100644 --- a/x-pack/plugins/asset_manager/public/lib/public_assets_client.ts +++ b/x-pack/plugins/asset_manager/public/lib/public_assets_client.ts @@ -6,9 +6,9 @@ */ import { HttpStart } from '@kbn/core/public'; -import { GetHostsOptionsPublic } from '../../common/types_client'; -import { GetHostAssetsResponse } from '../../common/types_api'; -import { GET_HOSTS } from '../../common/constants_routes'; +import { GetHostsOptionsPublic, GetServicesOptionsPublic } from '../../common/types_client'; +import { GetHostAssetsResponse, GetServiceAssetsResponse } from '../../common/types_api'; +import { GET_HOSTS, GET_SERVICES } from '../../common/constants_routes'; import { IPublicAssetsClient } from '../types'; export class PublicAssetsClient implements IPublicAssetsClient { @@ -23,4 +23,14 @@ export class PublicAssetsClient implements IPublicAssetsClient { return results; } + + async getServices(options: GetServicesOptionsPublic) { + const results = await this.http.get(GET_SERVICES, { + query: { + ...options, + }, + }); + + return results; + } } diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_signals.ts b/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts.ts similarity index 60% rename from x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_signals.ts rename to x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts.ts index 93e601ae00f9c..632b234b5512f 100644 --- a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_signals.ts +++ b/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts.ts @@ -6,12 +6,17 @@ */ import { Asset } from '../../../../common/types_api'; -import { GetHostsOptionsInjected } from '.'; import { collectHosts } from '../../collectors/hosts'; +import { GetHostsOptionsPublic } from '../../../../common/types_client'; +import { + AssetClientDependencies, + AssetClientOptionsWithInjectedValues, +} from '../../asset_client_types'; -export async function getHostsBySignals( - options: GetHostsOptionsInjected -): Promise<{ hosts: Asset[] }> { +export type GetHostsOptions = GetHostsOptionsPublic & AssetClientDependencies; +export type GetHostsOptionsInjected = AssetClientOptionsWithInjectedValues; + +export async function getHosts(options: GetHostsOptionsInjected): Promise<{ hosts: Asset[] }> { const metricsIndices = await options.metricsClient.getMetricIndices({ savedObjectsClient: options.savedObjectsClient, }); @@ -19,7 +24,7 @@ export async function getHostsBySignals( const { assets } = await collectHosts({ client: options.elasticsearchClient, from: options.from, - to: options.to, + to: options.to || 'now', sourceIndices: { metrics: metricsIndices, logs: options.sourceIndices.logs, diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_assets.ts b/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_assets.ts deleted file mode 100644 index f975df1cd82f4..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/get_hosts_by_assets.ts +++ /dev/null @@ -1,27 +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 { Asset } from '../../../../common/types_api'; -import { GetHostsOptionsInjected } from '.'; -import { getAssets } from '../../get_assets'; - -export async function getHostsByAssets( - options: GetHostsOptionsInjected -): Promise<{ hosts: Asset[] }> { - const hosts = await getAssets({ - elasticsearchClient: options.elasticsearchClient, - filters: { - kind: 'host', - from: options.from, - to: options.to, - }, - }); - - return { - hosts, - }; -} diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/index.ts b/x-pack/plugins/asset_manager/server/lib/accessors/hosts/index.ts deleted file mode 100644 index 1b60268d85389..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/hosts/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { AssetClientDependencies } from '../../../types'; -import type { GetHostsOptionsPublic } from '../../../../common/types_client'; -import type { OptionsWithInjectedValues } from '..'; - -export type GetHostsOptions = GetHostsOptionsPublic & AssetClientDependencies; -export type GetHostsOptionsInjected = OptionsWithInjectedValues; - -export interface HostIdentifier { - 'asset.ean': string; - 'asset.id': string; - 'asset.name'?: string; -} diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/index.ts b/x-pack/plugins/asset_manager/server/lib/accessors/index.ts deleted file mode 100644 index 6fd9254a2182e..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/index.ts +++ /dev/null @@ -1,19 +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 { APMDataAccessConfig } from '@kbn/apm-data-access-plugin/server'; -import { MetricsDataClient } from '@kbn/metrics-data-access-plugin/server'; -import { SavedObjectsClientContract } from '@kbn/core/server'; -import { AssetManagerConfig } from '../../../common/config'; - -export interface InjectedValues { - sourceIndices: AssetManagerConfig['sourceIndices']; - getApmIndices: (soClient: SavedObjectsClientContract) => Promise; - metricsClient: MetricsDataClient; -} - -export type OptionsWithInjectedValues = T & InjectedValues; diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services.ts b/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services.ts new file mode 100644 index 0000000000000..2df13930e2ed7 --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Asset } from '../../../../common/types_api'; +import { collectServices } from '../../collectors/services'; +import { parseEan } from '../../parse_ean'; +import { GetServicesOptionsPublic } from '../../../../common/types_client'; +import { + AssetClientDependencies, + AssetClientOptionsWithInjectedValues, +} from '../../asset_client_types'; + +export type GetServicesOptions = GetServicesOptionsPublic & AssetClientDependencies; +export type GetServicesOptionsInjected = AssetClientOptionsWithInjectedValues; + +export async function getServices( + options: GetServicesOptionsInjected +): Promise<{ services: Asset[] }> { + const filters = []; + + if (options.parent) { + const { kind, id } = parseEan(options.parent); + + if (kind === 'host') { + filters.push({ + bool: { + should: [{ term: { 'host.name': id } }, { term: { 'host.hostname': id } }], + minimum_should_match: 1, + }, + }); + } + + if (kind === 'container') { + filters.push({ + bool: { + should: [{ term: { 'container.id': id } }], + minimum_should_match: 1, + }, + }); + } + } + + const apmIndices = await options.getApmIndices(options.savedObjectsClient); + const { assets } = await collectServices({ + client: options.elasticsearchClient, + from: options.from, + to: options.to || 'now', + sourceIndices: { + apm: apmIndices, + }, + filters, + }); + + return { services: assets }; +} diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_assets.ts b/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_assets.ts deleted file mode 100644 index 8e69bcbff4625..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_assets.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Asset } from '../../../../common/types_api'; -import { GetServicesOptionsInjected } from '.'; -import { getAssets } from '../../get_assets'; -import { getAllRelatedAssets } from '../../get_all_related_assets'; - -export async function getServicesByAssets( - options: GetServicesOptionsInjected -): Promise<{ services: Asset[] }> { - if (options.parent) { - return getServicesByParent(options); - } - - const services = await getAssets({ - elasticsearchClient: options.elasticsearchClient, - filters: { - kind: 'service', - from: options.from, - to: options.to, - }, - }); - - return { services }; -} - -async function getServicesByParent( - options: GetServicesOptionsInjected -): Promise<{ services: Asset[] }> { - const { descendants } = await getAllRelatedAssets(options.elasticsearchClient, { - from: options.from, - to: options.to, - maxDistance: 5, - kind: ['service'], - size: 100, - relation: 'descendants', - ean: options.parent!, - }); - - return { services: descendants as Asset[] }; -} diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_signals.ts b/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_signals.ts deleted file mode 100644 index 720d6b3e30531..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/services/get_services_by_signals.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Asset } from '../../../../common/types_api'; -import { GetServicesOptionsInjected } from '.'; -import { collectServices } from '../../collectors/services'; - -export async function getServicesBySignals( - options: GetServicesOptionsInjected -): Promise<{ services: Asset[] }> { - const filters = []; - - if (options.parent) { - filters.push({ - bool: { - should: [ - { term: { 'host.name': options.parent } }, - { term: { 'host.hostname': options.parent } }, - ], - minimum_should_match: 1, - }, - }); - } - - const apmIndices = await options.getApmIndices(options.savedObjectsClient); - const { assets } = await collectServices({ - client: options.elasticsearchClient, - from: options.from, - to: options.to, - sourceIndices: { - apm: apmIndices, - }, - filters, - }); - - return { services: assets }; -} diff --git a/x-pack/plugins/asset_manager/server/lib/accessors/services/index.ts b/x-pack/plugins/asset_manager/server/lib/accessors/services/index.ts deleted file mode 100644 index e8b52e4924c4d..0000000000000 --- a/x-pack/plugins/asset_manager/server/lib/accessors/services/index.ts +++ /dev/null @@ -1,20 +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 { AssetClientDependencies } from '../../../types'; -import { GetServicesOptionsPublic } from '../../../../common/types_client'; -import { OptionsWithInjectedValues } from '..'; - -export type GetServicesOptions = GetServicesOptionsPublic & AssetClientDependencies; -export type GetServicesOptionsInjected = OptionsWithInjectedValues; - -export interface ServiceIdentifier { - 'asset.ean': string; - 'asset.id': string; - 'asset.name'?: string; - 'service.environment'?: string; -} diff --git a/x-pack/plugins/asset_manager/server/lib/asset_client.test.ts b/x-pack/plugins/asset_manager/server/lib/asset_client.test.ts new file mode 100644 index 0000000000000..a9bd5791bc51a --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/asset_client.test.ts @@ -0,0 +1,306 @@ +/* + * Copyright 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, + elasticsearchClientMock, +} from '@kbn/core-elasticsearch-client-server-mocks'; +import { AssetClient } from './asset_client'; +import { MetricsDataClient, MetricsDataClientMock } from '@kbn/metrics-data-access-plugin/server'; +import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; +import { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { AssetsValidationError } from './validators/validation_error'; +import { GetApmIndicesMethod } from './asset_client_types'; + +// Helper function allows test to verify error was thrown, +// verify error is of the right class type, and error has +// the expected metadata such as statusCode on it +function expectToThrowValidationErrorWithStatusCode( + testFn: () => Promise, + expectedError: Partial = {} +) { + return expect(async () => { + try { + return await testFn(); + } catch (error: any) { + if (error instanceof AssetsValidationError) { + if (expectedError.statusCode) { + expect(error.statusCode).toEqual(expectedError.statusCode); + } + if (expectedError.message) { + expect(error.message).toEqual(expect.stringContaining(expectedError.message)); + } + } + throw error; + } + }).rejects.toThrow(AssetsValidationError); +} + +function createGetApmIndicesMock(): jest.Mocked { + return jest.fn(async (client: SavedObjectsClientContract) => ({ + transaction: 'apm-mock-transaction-indices', + span: 'apm-mock-span-indices', + error: 'apm-mock-error-indices', + metric: 'apm-mock-metric-indices', + onboarding: 'apm-mock-onboarding-indices', + sourcemap: 'apm-mock-sourcemap-indices', + })); +} + +function createAssetClient( + metricsDataClient: MetricsDataClient, + getApmIndicesMock: jest.Mocked +) { + return new AssetClient({ + sourceIndices: { + logs: 'my-logs*', + }, + getApmIndices: getApmIndicesMock, + metricsClient: metricsDataClient, + }); +} + +describe('Server assets client', () => { + let metricsDataClientMock: MetricsDataClient = MetricsDataClientMock.create(); + let getApmIndicesMock: jest.Mocked = createGetApmIndicesMock(); + let esClientMock: ElasticsearchClientMock = + elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + let soClientMock: jest.Mocked; + + beforeEach(() => { + // Reset mocks + esClientMock = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + soClientMock = savedObjectsClientMock.create(); + metricsDataClientMock = MetricsDataClientMock.create(); + getApmIndicesMock = createGetApmIndicesMock(); + + // ES returns no results, just enough structure to not blow up + esClientMock.search.mockResolvedValueOnce({ + took: 1, + timed_out: false, + _shards: { + failed: 0, + successful: 1, + total: 1, + }, + hits: { + hits: [], + }, + }); + }); + + describe('class instantiation', () => { + it('should successfully instantiate', () => { + createAssetClient(metricsDataClientMock, getApmIndicesMock); + }); + }); + + describe('getHosts', () => { + it('should query Elasticsearch correctly', async () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + await client.getHosts({ + from: 'now-5d', + to: 'now-3d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }); + + expect(metricsDataClientMock.getMetricIndices).toHaveBeenCalledTimes(1); + expect(metricsDataClientMock.getMetricIndices).toHaveBeenCalledWith({ + savedObjectsClient: soClientMock, + }); + + const dsl = esClientMock.search.mock.lastCall?.[0] as SearchRequest | undefined; + const { bool } = dsl?.query || {}; + expect(bool).toBeDefined(); + + expect(bool?.filter).toEqual([ + { + range: { + '@timestamp': { + gte: 'now-5d', + lte: 'now-3d', + }, + }, + }, + ]); + + expect(bool?.must).toEqual([ + { + exists: { + field: 'host.hostname', + }, + }, + ]); + + expect(bool?.should).toEqual([ + { exists: { field: 'kubernetes.node.name' } }, + { exists: { field: 'kubernetes.pod.uid' } }, + { exists: { field: 'container.id' } }, + ]); + }); + + it('should reject with 400 for invalid "from" date', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getHosts({ + from: 'now-1zz', + to: 'now-3d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + + it('should reject with 400 for invalid "to" date', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getHosts({ + from: 'now-5d', + to: 'now-3fe', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + + it('should reject with 400 when "from" is a date that is after "to"', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getHosts({ + from: 'now', + to: 'now-5d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + + it('should reject with 400 when "from" is in the future', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getHosts({ + from: 'now+1d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + }); + + describe('getServices', () => { + it('should query Elasticsearch correctly', async () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + await client.getServices({ + from: 'now-5d', + to: 'now-3d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }); + + expect(getApmIndicesMock).toHaveBeenCalledTimes(1); + expect(getApmIndicesMock).toHaveBeenCalledWith(soClientMock); + + const dsl = esClientMock.search.mock.lastCall?.[0] as SearchRequest | undefined; + const { bool } = dsl?.query || {}; + expect(bool).toBeDefined(); + + expect(bool?.filter).toEqual([ + { + range: { + '@timestamp': { + gte: 'now-5d', + lte: 'now-3d', + }, + }, + }, + ]); + + expect(bool?.must).toEqual([ + { + exists: { + field: 'service.name', + }, + }, + ]); + + expect(bool?.should).toBeUndefined(); + }); + + it('should reject with 400 for invalid "from" date', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expect(() => + client.getServices({ + from: 'now-1zz', + to: 'now-3d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }) + ).rejects.toThrow(AssetsValidationError); + }); + + it('should reject with 400 for invalid "to" date', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getServices({ + from: 'now-5d', + to: 'now-3fe', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + + it('should reject with 400 when "from" is a date that is after "to"', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getServices({ + from: 'now', + to: 'now-5d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + + it('should reject with 400 when "from" is in the future', () => { + const client = createAssetClient(metricsDataClientMock, getApmIndicesMock); + + return expectToThrowValidationErrorWithStatusCode( + () => + client.getServices({ + from: 'now+1d', + elasticsearchClient: esClientMock, + savedObjectsClient: soClientMock, + }), + { statusCode: 400 } + ); + }); + }); +}); diff --git a/x-pack/plugins/asset_manager/server/lib/asset_client.ts b/x-pack/plugins/asset_manager/server/lib/asset_client.ts index 8bf23313c663e..0349d50b7fd21 100644 --- a/x-pack/plugins/asset_manager/server/lib/asset_client.ts +++ b/x-pack/plugins/asset_manager/server/lib/asset_client.ts @@ -5,53 +5,31 @@ * 2.0. */ -import { APMDataAccessConfig } from '@kbn/apm-data-access-plugin/server'; -import { MetricsDataClient } from '@kbn/metrics-data-access-plugin/server'; -import { SavedObjectsClientContract } from '@kbn/core/server'; -import { AssetManagerConfig } from '../../common/config'; import { Asset } from '../../common/types_api'; -import { OptionsWithInjectedValues } from './accessors'; -import { GetHostsOptions } from './accessors/hosts'; -import { GetServicesOptions } from './accessors/services'; -import { getHostsByAssets } from './accessors/hosts/get_hosts_by_assets'; -import { getHostsBySignals } from './accessors/hosts/get_hosts_by_signals'; -import { getServicesByAssets } from './accessors/services/get_services_by_assets'; -import { getServicesBySignals } from './accessors/services/get_services_by_signals'; - -interface AssetClientClassOptions { - sourceIndices: AssetManagerConfig['sourceIndices']; - source: AssetManagerConfig['lockedSource']; - getApmIndices: (soClient: SavedObjectsClientContract) => Promise; - metricsClient: MetricsDataClient; -} +import { getHosts, GetHostsOptions } from './accessors/hosts/get_hosts'; +import { getServices, GetServicesOptions } from './accessors/services/get_services'; +import { AssetClientBaseOptions, AssetClientOptionsWithInjectedValues } from './asset_client_types'; +import { validateStringDateRange } from './validators/validate_date_range'; export class AssetClient { - constructor(private baseOptions: AssetClientClassOptions) {} + constructor(private baseOptions: AssetClientBaseOptions) {} - injectOptions(options: T): OptionsWithInjectedValues { + injectOptions(options: T): AssetClientOptionsWithInjectedValues { return { ...options, - sourceIndices: this.baseOptions.sourceIndices, - getApmIndices: this.baseOptions.getApmIndices, - metricsClient: this.baseOptions.metricsClient, + ...this.baseOptions, }; } async getHosts(options: GetHostsOptions): Promise<{ hosts: Asset[] }> { + validateStringDateRange(options.from, options.to); const withInjected = this.injectOptions(options); - if (this.baseOptions.source === 'assets') { - return await getHostsByAssets(withInjected); - } else { - return await getHostsBySignals(withInjected); - } + return await getHosts(withInjected); } async getServices(options: GetServicesOptions): Promise<{ services: Asset[] }> { + validateStringDateRange(options.from, options.to); const withInjected = this.injectOptions(options); - if (this.baseOptions.source === 'assets') { - return await getServicesByAssets(withInjected); - } else { - return await getServicesBySignals(withInjected); - } + return await getServices(withInjected); } } diff --git a/x-pack/plugins/asset_manager/server/lib/asset_client_types.ts b/x-pack/plugins/asset_manager/server/lib/asset_client_types.ts new file mode 100644 index 0000000000000..a15886ce3a00a --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/asset_client_types.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { APMDataAccessConfig } from '@kbn/apm-data-access-plugin/server'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { MetricsDataClient } from '@kbn/metrics-data-access-plugin/server'; +import { AssetManagerConfig } from '../../common/config'; + +export type GetApmIndicesMethod = ( + soClient: SavedObjectsClientContract +) => Promise; +export interface AssetClientDependencies { + elasticsearchClient: ElasticsearchClient; + savedObjectsClient: SavedObjectsClientContract; +} + +export interface AssetClientBaseOptions { + sourceIndices: AssetManagerConfig['sourceIndices']; + getApmIndices: GetApmIndicesMethod; + metricsClient: MetricsDataClient; +} + +export type AssetClientOptionsWithInjectedValues = T & AssetClientBaseOptions; diff --git a/x-pack/plugins/asset_manager/server/lib/collectors/services.ts b/x-pack/plugins/asset_manager/server/lib/collectors/services.ts index cf41dc96cd3f7..e000860c9f4c5 100644 --- a/x-pack/plugins/asset_manager/server/lib/collectors/services.ts +++ b/x-pack/plugins/asset_manager/server/lib/collectors/services.ts @@ -6,6 +6,7 @@ */ import { estypes } from '@elastic/elasticsearch'; +import { debug } from '../../../common/debug_log'; import { Asset } from '../../../common/types_api'; import { CollectorOptions, QUERY_MAX_SIZE } from '.'; @@ -94,6 +95,8 @@ export async function collectServices({ dsl.aggs!.services!.composite!.after = afterKey; } + debug(dsl); + const esResponse = await client.search(dsl); const { after_key: nextKey, buckets = [] } = (esResponse.aggregations?.services || {}) as any; diff --git a/x-pack/plugins/asset_manager/server/lib/parse_ean.ts b/x-pack/plugins/asset_manager/server/lib/parse_ean.ts new file mode 100644 index 0000000000000..e466549a1830f --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/parse_ean.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function parseEan(ean: string) { + const [kind, id, ...rest] = ean.split(':'); + + if (!kind || !id || rest.length > 0) { + throw new Error(`${ean} is not a valid EAN`); + } + + return { kind, id }; +} diff --git a/x-pack/plugins/asset_manager/server/lib/validators/validate_date_range.ts b/x-pack/plugins/asset_manager/server/lib/validators/validate_date_range.ts new file mode 100644 index 0000000000000..144e9c4eabccb --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/validators/validate_date_range.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import datemath from '@kbn/datemath'; +import { Moment } from 'moment'; +import { AssetsValidationError } from './validation_error'; + +export function validateStringDateRange(from: string, to?: string) { + const parsedFrom = validateESDate(from); + validateDateInPast(parsedFrom); + if (to) { + const parsedTo = validateESDate(to); + validateDateRangeOrder(parsedFrom, parsedTo); + } +} + +export function validateDateInPast(date: Moment) { + const now = datemath.parse('now')!; + if (date.isAfter(now)) { + throw new AssetsValidationError(`Date cannot be in the future ${date.toISOString()}`, { + statusCode: 400, + }); + } +} + +export function validateDateRangeOrder(from: Moment, to: Moment) { + if (from.isAfter(to)) { + throw new AssetsValidationError( + `Invalid date range - given "from" value (${from.toISOString()}) is after given "to" value (${to.toISOString()})`, + { + statusCode: 400, + } + ); + } +} + +export function validateESDate(dateString: string) { + try { + const parsed = datemath.parse(dateString); + if (typeof parsed === 'undefined') { + throw new Error('Date string was parsed as undefined'); + } + if (parsed.toString() === 'Invalid date') { + throw new Error('Date string produced an invalid date'); + } + return parsed; + } catch (error: any) { + throw new AssetsValidationError( + `"${dateString}" is not a valid Elasticsearch date value - ${error}`, + { + statusCode: 400, + } + ); + } +} diff --git a/x-pack/plugins/asset_manager/server/lib/validators/validation_error.ts b/x-pack/plugins/asset_manager/server/lib/validators/validation_error.ts new file mode 100644 index 0000000000000..0f094971fc528 --- /dev/null +++ b/x-pack/plugins/asset_manager/server/lib/validators/validation_error.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +interface ErrorOptions { + statusCode?: number; +} + +export class AssetsValidationError extends Error { + public statusCode: number; + + constructor(message: string, { statusCode = 400 }: ErrorOptions = {}) { + super(message); + this.name = 'AssetsValidationError'; + this.statusCode = statusCode; + } +} diff --git a/x-pack/plugins/asset_manager/server/plugin.ts b/x-pack/plugins/asset_manager/server/plugin.ts index 24563b5e0fbc1..6ea93a4302f49 100644 --- a/x-pack/plugins/asset_manager/server/plugin.ts +++ b/x-pack/plugins/asset_manager/server/plugin.ts @@ -57,7 +57,6 @@ export class AssetManagerServerPlugin this.logger.info('Server is enabled'); const assetClient = new AssetClient({ - source: this.config.lockedSource, sourceIndices: this.config.sourceIndices, getApmIndices: plugins.apmDataAccess.getApmIndices, metricsClient: plugins.metricsDataAccess.client, @@ -77,14 +76,11 @@ export class AssetManagerServerPlugin return; } - // create/update assets-* index template - if (this.config.lockedSource === 'assets') { - upsertTemplate({ - esClient: core.elasticsearch.client.asInternalUser, - template: assetsIndexTemplateConfig, - logger: this.logger, - }); - } + upsertTemplate({ + esClient: core.elasticsearch.client.asInternalUser, + template: assetsIndexTemplateConfig, + logger: this.logger, + }); return {}; } diff --git a/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts b/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts index f7780f2ef4a6c..b260193647b4f 100644 --- a/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts +++ b/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts @@ -5,7 +5,6 @@ * 2.0. */ -import datemath from '@kbn/datemath'; import { createRouteValidationFunction } from '@kbn/io-ts-utils'; import { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; import { GetHostAssetsQueryOptions, getHostAssetsQueryOptionsRT } from '../../../common/types_api'; @@ -13,6 +12,7 @@ import { debug } from '../../../common/debug_log'; import { SetupRouteOptions } from '../types'; import * as routePaths from '../../../common/constants_routes'; import { getClientsFromContext } from '../utils'; +import { AssetsValidationError } from '../../lib/validators/validation_error'; export function hostsRoutes({ router, @@ -27,13 +27,12 @@ export function hostsRoutes({ }, async (context, req, res) => { const { from = 'now-24h', to = 'now' } = req.query || {}; - const { elasticsearchClient, savedObjectsClient } = await getClientsFromContext(context); try { const response = await assetClient.getHosts({ - from: datemath.parse(from)!.toISOString(), - to: datemath.parse(to)!.toISOString(), + from, + to, elasticsearchClient, savedObjectsClient, }); @@ -41,6 +40,15 @@ export function hostsRoutes({ return res.ok({ body: response }); } catch (error: unknown) { debug('Error while looking up HOST asset records', error); + + if (error instanceof AssetsValidationError) { + return res.customError({ + statusCode: error.statusCode, + body: { + message: `Error while looking up host asset records - ${error.message}`, + }, + }); + } return res.customError({ statusCode: 500, body: { message: 'Error while looking up host asset records - ' + `${error}` }, diff --git a/x-pack/plugins/asset_manager/server/routes/assets/services.ts b/x-pack/plugins/asset_manager/server/routes/assets/services.ts index 3852a0bb60d11..0e7103512ebf9 100644 --- a/x-pack/plugins/asset_manager/server/routes/assets/services.ts +++ b/x-pack/plugins/asset_manager/server/routes/assets/services.ts @@ -5,33 +5,17 @@ * 2.0. */ -import * as rt from 'io-ts'; -import datemath from '@kbn/datemath'; -import { - dateRt, - inRangeFromStringRt, - datemathStringRt, - createRouteValidationFunction, - createLiteralValueFromUndefinedRT, -} from '@kbn/io-ts-utils'; +import { createRouteValidationFunction } from '@kbn/io-ts-utils'; import { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; +import { + GetServiceAssetsQueryOptions, + getServiceAssetsQueryOptionsRT, +} from '../../../common/types_api'; import { debug } from '../../../common/debug_log'; import { SetupRouteOptions } from '../types'; -import { ASSET_MANAGER_API_BASE } from '../../../common/constants_routes'; +import * as routePaths from '../../../common/constants_routes'; import { getClientsFromContext } from '../utils'; - -const sizeRT = rt.union([inRangeFromStringRt(1, 100), createLiteralValueFromUndefinedRT(10)]); -const assetDateRT = rt.union([dateRt, datemathStringRt]); -const getServiceAssetsQueryOptionsRT = rt.exact( - rt.partial({ - from: assetDateRT, - to: assetDateRT, - size: sizeRT, - parent: rt.string, - }) -); - -export type GetServiceAssetsQueryOptions = rt.TypeOf; +import { AssetsValidationError } from '../../lib/validators/validation_error'; export function servicesRoutes({ router, @@ -40,7 +24,7 @@ export function servicesRoutes({ // GET /assets/services router.get( { - path: `${ASSET_MANAGER_API_BASE}/assets/services`, + path: routePaths.GET_SERVICES, validate: { query: createRouteValidationFunction(getServiceAssetsQueryOptionsRT), }, @@ -50,8 +34,8 @@ export function servicesRoutes({ const { elasticsearchClient, savedObjectsClient } = await getClientsFromContext(context); try { const response = await assetClient.getServices({ - from: datemath.parse(from)!.toISOString(), - to: datemath.parse(to)!.toISOString(), + from, + to, parent, elasticsearchClient, savedObjectsClient, @@ -60,6 +44,16 @@ export function servicesRoutes({ return res.ok({ body: response }); } catch (error: unknown) { debug('Error while looking up SERVICE asset records', error); + + if (error instanceof AssetsValidationError) { + return res.customError({ + statusCode: error.statusCode, + body: { + message: `Error while looking up service asset records - ${error.message}`, + }, + }); + } + return res.customError({ statusCode: 500, body: { message: 'Error while looking up service asset records - ' + `${error}` }, diff --git a/x-pack/plugins/asset_manager/server/types.ts b/x-pack/plugins/asset_manager/server/types.ts index 431378c7c9a9f..a3e2b2346e383 100644 --- a/x-pack/plugins/asset_manager/server/types.ts +++ b/x-pack/plugins/asset_manager/server/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; +import { ElasticsearchClient } from '@kbn/core/server'; import { ApmDataAccessPluginSetup, ApmDataAccessPluginStart, @@ -23,8 +23,3 @@ export interface AssetManagerPluginSetupDependencies { export interface AssetManagerPluginStartDependencies { apmDataAccess: ApmDataAccessPluginStart; } - -export interface AssetClientDependencies { - elasticsearchClient: ElasticsearchClient; - savedObjectsClient: SavedObjectsClientContract; -} diff --git a/x-pack/plugins/asset_manager/tsconfig.json b/x-pack/plugins/asset_manager/tsconfig.json index 35972189e5287..231cdfb4648e1 100644 --- a/x-pack/plugins/asset_manager/tsconfig.json +++ b/x-pack/plugins/asset_manager/tsconfig.json @@ -23,6 +23,9 @@ "@kbn/apm-data-access-plugin", "@kbn/core-http-browser-mocks", "@kbn/logging", - "@kbn/metrics-data-access-plugin" + "@kbn/metrics-data-access-plugin", + "@kbn/core-elasticsearch-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-api-server-mocks" ] } diff --git a/x-pack/plugins/metrics_data_access/server/client_mock.ts b/x-pack/plugins/metrics_data_access/server/client_mock.ts new file mode 100644 index 0000000000000..327c2890dd264 --- /dev/null +++ b/x-pack/plugins/metrics_data_access/server/client_mock.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MetricsDataClient } from './client/client'; + +export const MetricsDataClientMock = { + create: () => + ({ + getDefaultMetricIndices: jest.fn(async () => 'default-metrics-indices'), + getMetricIndices: jest.fn(async () => 'metric-indices'), + updateMetricIndices: jest.fn(async () => ({ + id: 'id', + type: 'mock-type', + attributes: { metricIndices: 'updated-indices' }, + references: [], + })), + setDefaultMetricIndicesHandler: jest.fn(), + } as unknown as MetricsDataClient), +}; diff --git a/x-pack/plugins/metrics_data_access/server/index.ts b/x-pack/plugins/metrics_data_access/server/index.ts index 919f5f357856e..e76f2201b340a 100644 --- a/x-pack/plugins/metrics_data_access/server/index.ts +++ b/x-pack/plugins/metrics_data_access/server/index.ts @@ -18,6 +18,7 @@ export type { export { metricsDataSourceSavedObjectName } from './saved_objects/metrics_data_source'; export { MetricsDataClient } from './client'; +export { MetricsDataClientMock } from './client_mock'; export function plugin(context: PluginInitializerContext) { return new MetricsDataPlugin(context); diff --git a/x-pack/test/api_integration/apis/asset_manager/config_with_assets_source.ts b/x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts similarity index 96% rename from x-pack/test/api_integration/apis/asset_manager/config_with_assets_source.ts rename to x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts index 8d499ea3b82a2..71f73f9acb1f3 100644 --- a/x-pack/test/api_integration/apis/asset_manager/config_with_assets_source.ts +++ b/x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts @@ -38,7 +38,7 @@ export default async function createTestConfig({ return { ...baseIntegrationTestsConfig.getAll(), - testFiles: [require.resolve('./tests/with_assets_source')], + testFiles: [require.resolve('./tests')], services: { ...services, assetsSynthtraceEsClient: (context: InheritedFtrProviderContext) => { @@ -87,7 +87,6 @@ export default async function createTestConfig({ serverArgs: [ ...baseIntegrationTestsConfig.get('kbnTestServer.serverArgs'), '--xpack.assetManager.alphaEnabled=true', - `--xpack.assetManager.lockedSource=assets`, ], }, }; diff --git a/x-pack/test/api_integration/apis/asset_manager/config_with_signals_source.ts b/x-pack/test/api_integration/apis/asset_manager/config_with_signals_source.ts deleted file mode 100644 index 1d1c94673e0db..0000000000000 --- a/x-pack/test/api_integration/apis/asset_manager/config_with_signals_source.ts +++ /dev/null @@ -1,98 +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 { - ApmSynthtraceEsClient, - ApmSynthtraceKibanaClient, - AssetsSynthtraceEsClient, - createLogger, - InfraSynthtraceEsClient, - LogLevel, -} from '@kbn/apm-synthtrace'; -import { FtrConfigProviderContext, kbnTestConfig } from '@kbn/test'; -import url from 'url'; -import { FtrProviderContext as InheritedFtrProviderContext } from '../../ftr_provider_context'; -import { InheritedServices } from './types'; - -interface AssetManagerConfig { - services: InheritedServices & { - assetsSynthtraceEsClient: ( - context: InheritedFtrProviderContext - ) => Promise; - infraSynthtraceEsClient: ( - context: InheritedFtrProviderContext - ) => Promise; - apmSynthtraceEsClient: (context: InheritedFtrProviderContext) => Promise; - }; -} - -export default async function createTestConfig({ - readConfigFile, -}: FtrConfigProviderContext): Promise { - const baseIntegrationTestsConfig = await readConfigFile(require.resolve('../../config.ts')); - const services = baseIntegrationTestsConfig.get('services'); - - return { - ...baseIntegrationTestsConfig.getAll(), - testFiles: [require.resolve('./tests/with_signals_source')], - services: { - ...services, - assetsSynthtraceEsClient: (context: InheritedFtrProviderContext) => { - return new AssetsSynthtraceEsClient({ - client: context.getService('es'), - logger: createLogger(LogLevel.info), - refreshAfterIndex: true, - }); - }, - infraSynthtraceEsClient: (context: InheritedFtrProviderContext) => { - return new InfraSynthtraceEsClient({ - client: context.getService('es'), - logger: createLogger(LogLevel.info), - refreshAfterIndex: true, - }); - }, - apmSynthtraceEsClient: async (context: InheritedFtrProviderContext) => { - const servers = baseIntegrationTestsConfig.get('servers'); - - const kibanaServer = servers.kibana as url.UrlObject; - const kibanaServerUrl = url.format(kibanaServer); - const kibanaServerUrlWithAuth = url - .format({ - ...url.parse(kibanaServerUrl), - auth: `elastic:${kbnTestConfig.getUrlParts().password}`, - }) - .slice(0, -1); - - const kibanaClient = new ApmSynthtraceKibanaClient({ - target: kibanaServerUrlWithAuth, - logger: createLogger(LogLevel.debug), - }); - const kibanaVersion = await kibanaClient.fetchLatestApmPackageVersion(); - await kibanaClient.installApmPackage(kibanaVersion); - - return new ApmSynthtraceEsClient({ - client: context.getService('es'), - logger: createLogger(LogLevel.info), - version: kibanaVersion, - refreshAfterIndex: true, - }); - }, - }, - kbnTestServer: { - ...baseIntegrationTestsConfig.get('kbnTestServer'), - serverArgs: [ - ...baseIntegrationTestsConfig.get('kbnTestServer.serverArgs'), - '--xpack.assetManager.alphaEnabled=true', - `--xpack.assetManager.lockedSource=signals`, - ], - }, - }; -} - -export type CreateTestConfig = Awaited>; - -export type AssetManagerServices = CreateTestConfig['services']; diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets.ts b/x-pack/test/api_integration/apis/asset_manager/tests/assets.ts similarity index 98% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/assets.ts index f5069a274ebb3..7514513971688 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/assets.ts @@ -7,9 +7,9 @@ import { AssetWithoutTimestamp } from '@kbn/assetManager-plugin/common/types_api'; import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; -import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from '../helpers'; -import { ASSETS_ENDPOINT } from '../constants'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from './helpers'; +import { ASSETS_ENDPOINT } from './constants'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_diff.ts b/x-pack/test/api_integration/apis/asset_manager/tests/assets_diff.ts similarity index 98% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_diff.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/assets_diff.ts index 15cf1a64dafaa..79c2db74d3f95 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_diff.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/assets_diff.ts @@ -9,9 +9,9 @@ import { sortBy } from 'lodash'; import { AssetWithoutTimestamp } from '@kbn/assetManager-plugin/common/types_api'; import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; -import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from '../helpers'; -import { ASSETS_ENDPOINT } from '../constants'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from './helpers'; +import { ASSETS_ENDPOINT } from './constants'; const DIFF_ENDPOINT = `${ASSETS_ENDPOINT}/diff`; diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_related.ts b/x-pack/test/api_integration/apis/asset_manager/tests/assets_related.ts similarity index 98% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_related.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/assets_related.ts index 2cb05d89ed618..58d4988fd7ab4 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/assets_related.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/assets_related.ts @@ -9,9 +9,9 @@ import { pick } from 'lodash'; import { Asset, AssetWithoutTimestamp } from '@kbn/assetManager-plugin/common/types_api'; import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; -import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from '../helpers'; -import { ASSETS_ENDPOINT } from '../constants'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from './helpers'; +import { ASSETS_ENDPOINT } from './constants'; const RELATED_ASSETS_ENDPOINT = `${ASSETS_ENDPOINT}/related`; diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/basics.ts b/x-pack/test/api_integration/apis/asset_manager/tests/basics.ts similarity index 87% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/basics.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/basics.ts index ea64d5898b265..d0d44b88f68c1 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/basics.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/basics.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -21,8 +21,8 @@ export default function ({ getService }: FtrProviderContext) { }); describe('assets index templates', () => { - it('should not be installed', async () => { - await esSupertest.get('/_index_template/assets').expect(404); + it('should always be installed', async () => { + await esSupertest.get('/_index_template/assets').expect(200); }); }); }); diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/hosts.ts b/x-pack/test/api_integration/apis/asset_manager/tests/hosts.ts similarity index 94% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/hosts.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/hosts.ts index 87b9a96944b56..1dab6373ddc9b 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/hosts.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/hosts.ts @@ -7,8 +7,8 @@ import { timerange, infra } from '@kbn/apm-synthtrace-client'; import expect from '@kbn/expect'; -import { ASSETS_ENDPOINT } from '../constants'; -import { FtrProviderContext } from '../../types'; +import { ASSETS_ENDPOINT } from './constants'; +import { FtrProviderContext } from '../types'; const HOSTS_ASSETS_ENDPOINT = `${ASSETS_ENDPOINT}/hosts`; diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/index.ts b/x-pack/test/api_integration/apis/asset_manager/tests/index.ts similarity index 73% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/index.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/index.ts index d92db4cff9958..f64733fa2e062 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/index.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/index.ts @@ -4,11 +4,13 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('Asset Manager API Endpoints - with assets source', () => { + describe('Asset Manager API Endpoints', () => { loadTestFile(require.resolve('./basics')); + loadTestFile(require.resolve('./hosts')); + loadTestFile(require.resolve('./services')); loadTestFile(require.resolve('./sample_assets')); loadTestFile(require.resolve('./assets')); loadTestFile(require.resolve('./assets_diff')); diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/sample_assets.ts b/x-pack/test/api_integration/apis/asset_manager/tests/sample_assets.ts similarity index 98% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/sample_assets.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/sample_assets.ts index 618f5f49f8892..a9e7ebab188e8 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/sample_assets.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/sample_assets.ts @@ -7,8 +7,8 @@ import { Asset } from '@kbn/assetManager-plugin/common/types_api'; import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; -import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from '../helpers'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { createSampleAssets, deleteSampleAssets, viewSampleAssetDocs } from './helpers'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/services.ts b/x-pack/test/api_integration/apis/asset_manager/tests/services.ts similarity index 95% rename from x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/services.ts rename to x-pack/test/api_integration/apis/asset_manager/tests/services.ts index 1dea627a2a918..dc00a025021c0 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/services.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/services.ts @@ -8,8 +8,8 @@ import { omit } from 'lodash'; import { apm, timerange } from '@kbn/apm-synthtrace-client'; import expect from '@kbn/expect'; -import { ASSETS_ENDPOINT } from '../constants'; -import { FtrProviderContext } from '../../types'; +import { ASSETS_ENDPOINT } from './constants'; +import { FtrProviderContext } from '../types'; const SERVICES_ASSETS_ENDPOINT = `${ASSETS_ENDPOINT}/services`; @@ -49,7 +49,7 @@ export default function ({ getService }: FtrProviderContext) { .query({ from, to, - parent: 'my-host-1', + parent: 'host:my-host-1', }) .expect(200); diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/basics.ts b/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/basics.ts deleted file mode 100644 index 451d49605a213..0000000000000 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_assets_source/basics.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; - -export default function ({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - const esSupertest = getService('esSupertest'); - - describe('during basic startup', () => { - describe('ping endpoint', () => { - it('returns a successful response', async () => { - const response = await supertest.get('/api/asset-manager/ping').expect(200); - expect(response.body).to.eql({ message: 'Asset Manager OK' }); - }); - }); - - describe('assets index template', () => { - it('should be installed', async () => { - await esSupertest.get('/_index_template/assets').expect(200); - }); - }); - }); -} diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/index.ts b/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/index.ts deleted file mode 100644 index 7c9c5fb4ae626..0000000000000 --- a/x-pack/test/api_integration/apis/asset_manager/tests/with_signals_source/index.ts +++ /dev/null @@ -1,15 +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 { FtrProviderContext } from '../../../../ftr_provider_context'; - -export default function ({ loadTestFile }: FtrProviderContext) { - describe('Asset Manager API Endpoints - with signals source', () => { - loadTestFile(require.resolve('./basics')); - loadTestFile(require.resolve('./hosts')); - loadTestFile(require.resolve('./services')); - }); -} diff --git a/x-pack/test/api_integration/apis/asset_manager/types.ts b/x-pack/test/api_integration/apis/asset_manager/types.ts index ba52dcb88a5b6..3a2b1656928fc 100644 --- a/x-pack/test/api_integration/apis/asset_manager/types.ts +++ b/x-pack/test/api_integration/apis/asset_manager/types.ts @@ -7,7 +7,7 @@ import { GenericFtrProviderContext } from '@kbn/test'; import { FtrProviderContext as InheritedFtrProviderContext } from '../../ftr_provider_context'; -import { AssetManagerServices } from './config_with_signals_source'; +import { AssetManagerServices } from './config_when_enabled'; export type InheritedServices = InheritedFtrProviderContext extends GenericFtrProviderContext< infer TServices, From 620ee8d185a7e95d5b2a1c51e4297698ff49529a Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 4 Oct 2023 18:17:13 -0400 Subject: [PATCH 106/170] Fix EuiBottomBar in serverless (#166840) --- .../src/ui/project/navigation.tsx | 1 + src/core/public/styles/_base.scss | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx index ae5c8c773e449..adc6b3f28c2e5 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/navigation.tsx @@ -20,6 +20,7 @@ export const ProjectNavigation: React.FC = ({ children }) => { return ( Date: Wed, 4 Oct 2023 18:26:49 -0400 Subject: [PATCH 107/170] [Cloud Security][Telemetry] Create a unified cloud accounts collector (#167203) ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. Adds Cloud Security Telemetry to track all cloud accounts from products `CSPM`,`KSPM`, and`CNVM` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../get_identifier_runtime_mapping.ts | 1 - .../get_package_policy_id_mapping.ts | 23 + ...et_safe_kspm_cluster_id_runtime_mapping.ts | 2 +- .../cloud_accounts_stats_collector.ts | 411 ++++++++++++++++++ .../installation_stats_collector.ts | 59 ++- .../lib/telemetry/collectors/register.ts | 4 + .../server/lib/telemetry/collectors/schema.ts | 26 ++ .../server/lib/telemetry/collectors/types.ts | 112 ++++- .../schema/xpack_plugins.json | 66 +++ 9 files changed, 699 insertions(+), 5 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts create mode 100644 x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/cloud_accounts_stats_collector.ts diff --git a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts index 7a732b9ae62e6..e077574d449ec 100644 --- a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts +++ b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts @@ -20,7 +20,6 @@ export const getIdentifierRuntimeMapping = (): MappingRuntimeFields => ({ !doc["rule.benchmark.posture_type"].empty; def orchestratorIdAvailable = doc.containsKey("orchestrator.cluster.id") && !doc["orchestrator.cluster.id"].empty; - if (!postureTypeAvailable) { def identifier = orchestratorIdAvailable ? doc["orchestrator.cluster.id"].value : doc["cluster_id"].value; diff --git a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts new file mode 100644 index 0000000000000..5d76176758af6 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +export const getPackagePolicyIdRuntimeMapping = (): MappingRuntimeFields => ({ + package_policy_identifier: { + type: 'keyword', + script: { + source: ` + def packagePolicyIdAvailable = doc.containsKey("cloud_security_posture.package_policy.id") && + !doc["cloud_security_posture.package_policy.id"].empty; + if (packagePolicyIdAvailable) { + emit(doc["cloud_security_posture.package_policy.id"].value); + } + `, + }, + }, +}); diff --git a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_safe_kspm_cluster_id_runtime_mapping.ts b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_safe_kspm_cluster_id_runtime_mapping.ts index 4baa297781472..eed3eba2f7220 100644 --- a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_safe_kspm_cluster_id_runtime_mapping.ts +++ b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_safe_kspm_cluster_id_runtime_mapping.ts @@ -20,7 +20,7 @@ export const getSafeKspmClusterIdRuntimeMapping = (): MappingRuntimeFields => ({ !doc["orchestrator.cluster.id"].empty; def clusterIdAvailable = doc.containsKey("cluster_id") && !doc["cluster_id"].empty; - + if (orchestratorIdAvailable) { emit(doc["orchestrator.cluster.id"].value); } else if (clusterIdAvailable) { diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/cloud_accounts_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/cloud_accounts_stats_collector.ts new file mode 100644 index 0000000000000..82de2d010a35e --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/cloud_accounts_stats_collector.ts @@ -0,0 +1,411 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { Logger } from '@kbn/core/server'; +import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import { getPackagePolicyIdRuntimeMapping } from '../../../../common/runtime_mappings/get_package_policy_id_mapping'; +import { getIdentifierRuntimeMapping } from '../../../../common/runtime_mappings/get_identifier_runtime_mapping'; +import { calculatePostureScore } from '../../../../common/utils/helpers'; +import type { + AccountEntity, + AccountsStats, + CloudProviderKey, + CloudSecurityAccountsStats, +} from './types'; +import { + CSPM_POLICY_TEMPLATE, + KSPM_POLICY_TEMPLATE, + LATEST_FINDINGS_INDEX_DEFAULT_NS, + LATEST_VULNERABILITIES_INDEX_DEFAULT_NS, + VULN_MGMT_POLICY_TEMPLATE, +} from '../../../../common/constants'; + +export const getPostureAccountsStatsQuery = (index: string): SearchRequest => ({ + index, + runtime_mappings: { ...getIdentifierRuntimeMapping(), ...getPackagePolicyIdRuntimeMapping() }, + query: { + match_all: {}, + }, + aggs: { + accounts: { + terms: { + field: 'asset_identifier', + order: { + _count: 'desc', + }, + size: 100, + }, + aggs: { + cloud_provider: { + top_metrics: { + metrics: { + field: 'cloud.provider', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + latest_doc_updated_timestamp: { + top_metrics: { + metrics: { + field: '@timestamp', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + benchmark_id: { + top_metrics: { + metrics: { + field: 'rule.benchmark.id', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + benchmark_version: { + top_metrics: { + metrics: { + field: 'rule.benchmark.version', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + benchmark_name: { + top_metrics: { + metrics: { + field: 'rule.benchmark.name', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + passed_findings_count: { + filter: { + bool: { + filter: [ + { + bool: { + should: [ + { + term: { + 'result.evaluation': 'passed', + }, + }, + ], + minimum_should_match: 1, + }, + }, + ], + }, + }, + }, + failed_findings_count: { + filter: { + bool: { + filter: [ + { + bool: { + should: [ + { + term: { + 'result.evaluation': 'failed', + }, + }, + ], + minimum_should_match: 1, + }, + }, + ], + }, + }, + }, + // KSPM QUERY FIELDS + kubernetes_version: { + top_metrics: { + metrics: { + field: 'cloudbeat.kubernetes.version', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + resources: { + filter: { + bool: { + filter: [ + { + bool: { + should: [ + { + term: { + 'resource.sub_type': 'Pod', + }, + }, + ], + minimum_should_match: 1, + }, + }, + ], + }, + }, + aggs: { + pods_count: { + cardinality: { + field: 'resource.id', + }, + }, + }, + }, + nodes_count: { + cardinality: { + field: 'host.name', + }, + }, + agents_count: { + cardinality: { + field: 'agent.id', + }, + }, + package_policy_id: { + terms: { + field: 'package_policy_identifier', + order: { + _count: 'desc', + }, + size: 100, + }, + }, + }, + }, + }, + + size: 0, + _source: false, +}); + +export const getVulnMgmtAccountsStatsQuery = (index: string): SearchRequest => ({ + index, + runtime_mappings: getPackagePolicyIdRuntimeMapping(), + query: { + match_all: {}, + }, + aggs: { + accounts: { + terms: { + field: 'cloud.account.id', + order: { + _count: 'desc', + }, + size: 100, + }, + aggs: { + latest_doc_updated_timestamp: { + top_metrics: { + metrics: { + field: '@timestamp', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + cloud_provider: { + top_metrics: { + metrics: { + field: 'cloud.provider', + }, + size: 1, + sort: { + '@timestamp': 'desc', + }, + }, + }, + package_policy_id: { + terms: { + field: 'package_policy_identifier', + order: { + _count: 'desc', + }, + size: 100, + }, + }, + }, + }, + }, + size: 0, + _source: false, +}); + +const cloudBaseStats = (account: AccountEntity) => ({ + account_id: account.key, + latest_doc_count: account.doc_count, + latest_doc_updated_timestamp: account.latest_doc_updated_timestamp.top[0].metrics['@timestamp'], + cloud_provider: account.cloud_provider.top[0].metrics['cloud.provider'], + package_policy_id: account.package_policy_id?.buckets[0]?.key ?? null, +}); + +const getPostureManagementStats = (account: AccountEntity) => ({ + posture_management_stats: { + posture_score: calculatePostureScore( + account.passed_findings_count.doc_count, + account.failed_findings_count.doc_count + ), + passed_findings_count: account.passed_findings_count.doc_count, + failed_findings_count: account.failed_findings_count.doc_count, + benchmark_name: account.benchmark_name.top[0].metrics['rule.benchmark.name'], + benchmark_version: account.benchmark_version.top[0].metrics['rule.benchmark.version'], + }, +}); + +const getKspmStats = (account: AccountEntity) => ({ + kspm_stats: { + kubernetes_version: account.kubernetes_version.top[0].metrics['cloudbeat.kubernetes.version'], + agents_count: account.agents_count.value, + nodes_count: account.nodes_count.value, + pods_count: account.resources.pods_count.value, + }, +}); + +const kspmCloudProviders: Record = { + cis_eks: 'aws', + cis_gke: 'gcp', + cis_k8s: null, + cis_ake: 'azure', +}; +const cspmBenchmarkIds = ['cis_aws', 'cis_azure', 'cis_gcp']; +const kspmBenchmarkIds = ['cis_eks', 'cis_ake', 'cis_gke', 'cis_k8s']; + +const getCloudProvider = (ruleBenchmarkId: CloudProviderKey) => { + return kspmCloudProviders[ruleBenchmarkId]; +}; + +const getPostureType = (ruleBenchmarkId: string) => { + if (cspmBenchmarkIds.includes(ruleBenchmarkId)) { + return CSPM_POLICY_TEMPLATE; + } else if (kspmBenchmarkIds.includes(ruleBenchmarkId)) { + return KSPM_POLICY_TEMPLATE; + } + return undefined; +}; + +export const getCloudAccountsStats = ( + aggregatedResourcesStats: AccountsStats, + logger: Logger +): CloudSecurityAccountsStats[] => { + const accounts = aggregatedResourcesStats.accounts.buckets; + + const cloudAccountsStats = accounts.map((account) => { + const cloudAccount = cloudBaseStats(account); + const postureType = getPostureType( + account.benchmark_id?.top?.[0]?.metrics['rule.benchmark.id'] + ); + + if (!postureType) { + return { + ...cloudAccount, + product: VULN_MGMT_POLICY_TEMPLATE, + }; + } + + if (postureType === CSPM_POLICY_TEMPLATE) { + return { + ...cloudAccount, + product: CSPM_POLICY_TEMPLATE, + ...getPostureManagementStats(account), + }; + } + + return { + ...cloudAccount, + product: KSPM_POLICY_TEMPLATE, + ...getPostureManagementStats(account), + ...getKspmStats(account), + cloud_provider: getCloudProvider( + account.benchmark_id.top[0].metrics['rule.benchmark.id'] as CloudProviderKey + ), + }; + }); + + logger.info('Cloud Account Stats telemetry: accounts stats was sent'); + + return cloudAccountsStats; +}; + +export const getIndexAccountStats = async ( + esClient: ElasticsearchClient, + logger: Logger, + index: string, + getAccountQuery: (index: string) => SearchRequest +) => { + const accountsStatsResponse = await esClient.search( + getAccountQuery(index) + ); + + return accountsStatsResponse.aggregations + ? getCloudAccountsStats(accountsStatsResponse.aggregations, logger) + : []; +}; + +export const getAllCloudAccountsStats = async ( + esClient: ElasticsearchClient, + logger: Logger +): Promise => { + try { + const indices = [LATEST_FINDINGS_INDEX_DEFAULT_NS, LATEST_VULNERABILITIES_INDEX_DEFAULT_NS]; + const [findingIndex, vulnerabilitiesIndex] = await Promise.all( + indices.map(async (index) => ({ + exists: await esClient.indices.exists({ + index, + }), + name: index, + })) + ); + + let postureIndexAccountStats: CloudSecurityAccountsStats[] = []; + let vulnerabilityIndexAccountStats: CloudSecurityAccountsStats[] = []; + + if (!findingIndex.exists && !vulnerabilitiesIndex.exists) return []; + if (findingIndex.exists) { + postureIndexAccountStats = await getIndexAccountStats( + esClient, + logger, + findingIndex.name, + getPostureAccountsStatsQuery + ); + } + + if (vulnerabilitiesIndex.exists) { + vulnerabilityIndexAccountStats = await getIndexAccountStats( + esClient, + logger, + vulnerabilitiesIndex.name, + getVulnMgmtAccountsStatsQuery + ); + } + + return [...postureIndexAccountStats, ...vulnerabilityIndexAccountStats]; + } catch (e) { + logger.error(`Failed to get cloud account stats v2 ${e}`); + logger.error(`Failed to get cloud account stats v2 ${e.stack}`); + return []; + } +}; diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts index 038ed35abac97..25211172d7c89 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts @@ -13,15 +13,69 @@ import { SO_SEARCH_LIMIT, } from '@kbn/fleet-plugin/common'; import { agentPolicyService } from '@kbn/fleet-plugin/server/services'; -import type { CloudSecurityInstallationStats } from './types'; +import type { + CloudbeatConfigKeyType, + CloudSecurityInstallationStats, + SetupAccessOption, +} from './types'; import type { CspServerPluginStart, CspServerPluginStartDeps } from '../../../types'; import { CLOUD_SECURITY_POSTURE_PACKAGE_NAME } from '../../../../common/constants'; +interface CredentialMappings { + 'gcp.credentials.file': 'credentials file'; + 'gcp.credentials.json': 'credentials json'; + shared_credential_file: 'credentials file'; + role_arn: 'role'; +} + const getEnabledInputStreamVars = (packagePolicy: PackagePolicy) => { const enabledInput = packagePolicy.inputs.find((input) => input.enabled); return enabledInput?.streams[0].vars; }; +const getEnabledIsSetupAutomatic = (packagePolicy: PackagePolicy) => { + const cloudbeatConfig: Record = { + 'cloudbeat/cis_aws': 'cloud_formation_template_url', + 'cloudbeat/vuln_mgmt_aws': 'cloud_formation_template_url', + 'cloudbeat/cis_gcp': 'cloud_shell_url', + 'cloudbeat/cis_azure': 'arm_template_url', + }; + + const enabledInput = packagePolicy.inputs.find((input) => input.enabled); + + if (!enabledInput) return false; + + const configKey = cloudbeatConfig[enabledInput.type as CloudbeatConfigKeyType]; + + return !!configKey && !!enabledInput.config?.[configKey]?.value; +}; + +const getSetupAccessOption = ( + packagePolicy: PackagePolicy +): CloudSecurityInstallationStats['setup_access_option'] => { + const inputStreamVars = getEnabledInputStreamVars(packagePolicy); + + if (!inputStreamVars) return null; + + const credentialMappings: Record = { + 'gcp.credentials.file': 'credentials file', + 'gcp.credentials.json': 'credentials json', + shared_credential_file: 'credentials file', + role_arn: 'role', + }; + + for (const [key, config] of Object.entries(inputStreamVars)) { + if (config?.value && credentialMappings[key as keyof CredentialMappings]) { + return credentialMappings[key as keyof CredentialMappings]; + } + } + + if (inputStreamVars.session_token) return 'temporary access'; + if (inputStreamVars.access_key && inputStreamVars.secret_access_key) return 'direct access'; + + return null; +}; + const getAccountTypeField = ( packagePolicy: PackagePolicy ): CloudSecurityInstallationStats['account_type'] => { @@ -47,6 +101,7 @@ const getInstalledPackagePolicies = ( const agentCounts = agentPolicies?.find((agentPolicy) => agentPolicy?.id === packagePolicy.policy_id)?.agents ?? 0; + const isSetupAutomatic = getEnabledIsSetupAutomatic(packagePolicy); return { package_policy_id: packagePolicy.id, @@ -57,6 +112,8 @@ const getInstalledPackagePolicies = ( agent_policy_id: packagePolicy.policy_id, agent_count: agentCounts, account_type: getAccountTypeField(packagePolicy), + is_setup_automatic: isSetupAutomatic, + setup_access_option: isSetupAutomatic ? null : getSetupAccessOption(packagePolicy), }; } ); diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts index f41497cd80bb4..919adae18446c 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts @@ -16,6 +16,7 @@ import { getAccountsStats } from './accounts_stats_collector'; import { getRulesStats } from './rules_stats_collector'; import { getInstallationStats } from './installation_stats_collector'; import { getAlertsStats } from './alert_stats_collector'; +import { getAllCloudAccountsStats } from './cloud_accounts_stats_collector'; export function registerCspmUsageCollector( logger: Logger, @@ -58,6 +59,7 @@ export function registerCspmUsageCollector( rulesStats, installationStats, alertsStats, + cloudAccountStats, ] = await Promise.all([ awaitPromiseSafe('Indices', getIndicesStats(esClient, soClient, coreServices, logger)), awaitPromiseSafe('Accounts', getAccountsStats(esClient, logger)), @@ -68,6 +70,7 @@ export function registerCspmUsageCollector( getInstallationStats(esClient, soClient, coreServices, logger) ), awaitPromiseSafe('Alerts', getAlertsStats(esClient, logger)), + awaitPromiseSafe('Cloud Accounts', getAllCloudAccountsStats(esClient, logger)), ]); return { indices: indicesStats, @@ -76,6 +79,7 @@ export function registerCspmUsageCollector( rules_stats: rulesStats, installation_stats: installationStats, alerts_stats: alertsStats, + cloud_account_stats: cloudAccountStats, }; }, schema: cspmUsageSchema, diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/schema.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/schema.ts index 5441992618192..498566b7cb082 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/schema.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/schema.ts @@ -154,6 +154,8 @@ export const cspmUsageSchema: MakeSchemaFrom = { created_at: { type: 'date' }, agent_count: { type: 'long' }, account_type: { type: 'keyword' }, + is_setup_automatic: { type: 'boolean' }, + setup_access_option: { type: 'keyword' }, }, }, alerts_stats: { @@ -167,4 +169,28 @@ export const cspmUsageSchema: MakeSchemaFrom = { alerts_acknowledged_count: { type: 'long' }, }, }, + cloud_account_stats: { + type: 'array', + items: { + account_id: { type: 'keyword' }, + cloud_provider: { type: 'keyword' }, + product: { type: 'keyword' }, + package_policy_id: { type: 'keyword' }, + latest_doc_count: { type: 'long' }, + latest_doc_updated_timestamp: { type: 'date' }, + posture_management_stats: { + posture_score: { type: 'long' }, + benchmark_name: { type: 'keyword' }, + benchmark_version: { type: 'keyword' }, + passed_findings_count: { type: 'long' }, + failed_findings_count: { type: 'long' }, + }, + kspm_stats: { + kubernetes_version: { type: 'keyword' }, + agents_count: { type: 'short' }, + nodes_count: { type: 'short' }, + pods_count: { type: 'short' }, + }, + }, + }, }; diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts index f1162e24d3168..cb8d6eec64dcb 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { AggregationsMultiBucketBase } from '@elastic/elasticsearch/lib/api/types'; import { CspStatusCode } from '../../../../common/types'; export type CloudSecurityUsageCollectorType = @@ -13,7 +14,15 @@ export type CloudSecurityUsageCollectorType = | 'Resources' | 'Rules' | 'Installation' - | 'Alerts'; + | 'Alerts' + | 'Cloud Accounts'; + +export type CloudProviderKey = 'cis_eks' | 'cis_gke' | 'cis_k8s' | 'cis_ake'; +export type CloudbeatConfigKeyType = + | 'cloudbeat/cis_aws' + | 'cloudbeat/vuln_mgmt_aws' + | 'cloudbeat/cis_gcp' + | 'cloudbeat/cis_azure'; export interface CspmUsage { indices: CspmIndicesStats; @@ -22,6 +31,7 @@ export interface CspmUsage { rules_stats: CspmRulesStats[]; installation_stats: CloudSecurityInstallationStats[]; alerts_stats: CloudSecurityAlertsStats[]; + cloud_account_stats: CloudSecurityAccountsStats[]; } export interface PackageSetupStatus { @@ -58,6 +68,32 @@ export interface CspmResourcesStats { passed_findings_count: number; failed_findings_count: number; } + +export interface CloudSecurityAccountsStats { + account_id: string; + product: string; + cloud_provider: string | null; + package_policy_id: string | null; + posture_management_stats?: CloudPostureAccountsStats; + kspm_stats?: KSPMAccountsStats; + latest_doc_count: number; + latest_doc_updated_timestamp: string; +} +export interface CloudPostureAccountsStats { + posture_score: number; + benchmark_name: string; + benchmark_version: string; + passed_findings_count: number; + failed_findings_count: number; +} + +export interface KSPMAccountsStats { + kubernetes_version: string | null; + agents_count: number; + nodes_count: number; + pods_count: number; +} + export interface CspmAccountsStats { account_id: string; posture_score: number; @@ -65,9 +101,9 @@ export interface CspmAccountsStats { benchmark_id: string; benchmark_name: string; benchmark_version: string; - kubernetes_version: string | null; passed_findings_count: number; failed_findings_count: number; + kubernetes_version: string | null; agents_count: number; nodes_count: number; pods_count: number; @@ -87,6 +123,13 @@ export interface CspmRulesStats { failed_findings_count: number; } +export type SetupAccessOption = + | 'temporary access' + | 'direct access' + | 'role' + | 'credentials file' + | 'credentials json' + | null; export interface CloudSecurityInstallationStats { package_policy_id: string; feature: string; @@ -95,7 +138,9 @@ export interface CloudSecurityInstallationStats { deployment_mode: string; created_at: string; agent_count: number; + is_setup_automatic: boolean; account_type?: 'single-account' | 'organization-account'; + setup_access_option: SetupAccessOption; } export interface CloudSecurityAlertsStats { @@ -106,3 +151,66 @@ export interface CloudSecurityAlertsStats { alerts_closed_count: number; alerts_acknowledged_count: number; } + +export interface Value { + value: number; +} +export interface BenchmarkName { + metrics: { 'rule.benchmark.name': string }; +} + +export interface BenchmarkVersion { + metrics: { 'rule.benchmark.version': string }; +} + +export interface BenchmarkId { + metrics: { 'rule.benchmark.id': string }; +} + +export interface CloudProvider { + metrics: { 'cloud.provider': string }; +} + +export interface KubernetesVersion { + metrics: { 'cloudbeat.kubernetes.version': string }; +} + +export interface PackagePolicyId { + metrics: { 'cloud_security_posture.package_policy.id': string }; +} + +export interface LatestDocTimestamp { + metrics: { '@timestamp': string }; +} + +export interface AccountsStats { + accounts: { + buckets: AccountEntity[]; + }; +} +export interface AccountEntity { + key: string; // account_id + doc_count: number; // latest findings doc count + passed_findings_count: AggregationsMultiBucketBase; + failed_findings_count: AggregationsMultiBucketBase; + package_policy_id: { + doc_count_error_upper_bound: number; + sum_other_doc_count: number; + buckets: Array<{ + key: string; // package_policy_id + doc_count: number; + }>; + }; + cloud_provider: { top: CloudProvider[] }; + latest_doc_updated_timestamp: { top: LatestDocTimestamp[] }; + benchmark_id: { top: BenchmarkId[] }; + benchmark_name: { top: BenchmarkName[] }; + benchmark_version: { top: BenchmarkVersion[] }; + kubernetes_version: { top: KubernetesVersion[] }; + agents_count: Value; + nodes_count: Value; + pods_count: Value; + resources: { + pods_count: Value; + }; +} 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 be6ceb1dab3b7..69002ce27c593 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -7604,6 +7604,12 @@ }, "account_type": { "type": "keyword" + }, + "is_setup_automatic": { + "type": "boolean" + }, + "setup_access_option": { + "type": "keyword" } } } @@ -7632,6 +7638,66 @@ } } } + }, + "cloud_account_stats": { + "type": "array", + "items": { + "properties": { + "account_id": { + "type": "keyword" + }, + "cloud_provider": { + "type": "keyword" + }, + "product": { + "type": "keyword" + }, + "package_policy_id": { + "type": "keyword" + }, + "latest_doc_count": { + "type": "long" + }, + "latest_doc_updated_timestamp": { + "type": "date" + }, + "posture_management_stats": { + "properties": { + "posture_score": { + "type": "long" + }, + "benchmark_name": { + "type": "keyword" + }, + "benchmark_version": { + "type": "keyword" + }, + "passed_findings_count": { + "type": "long" + }, + "failed_findings_count": { + "type": "long" + } + } + }, + "kspm_stats": { + "properties": { + "kubernetes_version": { + "type": "keyword" + }, + "agents_count": { + "type": "short" + }, + "nodes_count": { + "type": "short" + }, + "pods_count": { + "type": "short" + } + } + } + } + } } } }, From 99266280ff5af8e4bf1cb0728cf061b79e9e797c Mon Sep 17 00:00:00 2001 From: Garrett Spong Date: Wed, 4 Oct 2023 17:03:04 -0600 Subject: [PATCH 108/170] [Security Solution][Elastic AI Assistant] Fixes get Knowledge Base status not using the default model (#168040) ## Summary After the introduction of https://github.com/elastic/kibana/pull/167522 which fetches the default ELSER model, we weren't instantiating the `esStore` within the get Knowledge Base status route with the default model, so it was falling back to `.elser_model_1` and failing to report the correct status in the UI (even though all documents were loaded). Also updated the evaluation endpoint to use the `getElser` default model when instantiating agents to evaluate. --- .../elasticsearch_store/elasticsearch_store.test.ts | 10 +++++----- .../elasticsearch_store/elasticsearch_store.ts | 2 +- .../langchain/embeddings/elasticsearch_embeddings.ts | 2 +- .../langchain/executors/openai_functions_executor.ts | 3 ++- x-pack/plugins/elastic_assistant/server/plugin.ts | 2 +- .../server/routes/evaluate/post_evaluate.ts | 11 +++++++++-- .../knowledge_base/get_knowledge_base_status.ts | 10 +++++++--- 7 files changed, 26 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts index d645aaa7b2656..94ac161d7abb1 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts @@ -104,7 +104,7 @@ describe('ElasticsearchStore', () => { inference: { field_map: { text: 'text_field' }, inference_config: { text_expansion: { results_field: 'tokens' } }, - model_id: '.elser_model_1', + model_id: '.elser_model_2', target_field: 'vector', }, }, @@ -130,12 +130,12 @@ describe('ElasticsearchStore', () => { trained_model_configs: [{ fully_defined: true }], } as MlGetTrainedModelsResponse); - const isInstalled = await esStore.isModelInstalled('.elser_model_1'); + const isInstalled = await esStore.isModelInstalled('.elser_model_2'); expect(isInstalled).toBe(true); expect(mockEsClient.ml.getTrainedModels).toHaveBeenCalledWith({ include: 'definition_status', - model_id: '.elser_model_1', + model_id: '.elser_model_2', }); }); }); @@ -217,7 +217,7 @@ describe('ElasticsearchStore', () => { }, vector: { tokens: {}, - model_id: '.elser_model_1', + model_id: '.elser_model_2', }, text: 'documents', }, @@ -242,7 +242,7 @@ describe('ElasticsearchStore', () => { { text_expansion: { 'vector.tokens': { - model_id: '.elser_model_1', + model_id: '.elser_model_2', model_text: query, }, }, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts index fc8b686552c73..99ce5fd39439d 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts @@ -54,7 +54,7 @@ export class ElasticsearchStore extends VectorStore { this.esClient = esClient; this.index = index ?? KNOWLEDGE_BASE_INDEX_PATTERN; this.logger = logger; - this.model = model ?? '.elser_model_1'; + this.model = model ?? '.elser_model_2'; } /** diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/embeddings/elasticsearch_embeddings.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/embeddings/elasticsearch_embeddings.ts index b95d665b503fe..be7babb36ab89 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/embeddings/elasticsearch_embeddings.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/embeddings/elasticsearch_embeddings.ts @@ -22,7 +22,7 @@ export class ElasticsearchEmbeddings extends Embeddings { /** * TODO: Use inference API if not re-indexing to create embedding vectors, e.g. * - * POST _ml/trained_models/.elser_model_1/_infer + * POST _ml/trained_models/.elser_model_2/_infer * { * "docs":[{"text_field": "The fool doth think he is wise, but the wise man knows himself to be a fool."}] * } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts index f1c85211975b6..608b15eed384f 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts @@ -25,6 +25,7 @@ export const callOpenAIFunctionsExecutor = async ({ actions, connectorId, esClient, + elserId, langChainMessages, llmType, logger, @@ -44,7 +45,7 @@ export const callOpenAIFunctionsExecutor = async ({ }); // ELSER backed ElasticsearchStore for Knowledge Base - const esStore = new ElasticsearchStore(esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger); + const esStore = new ElasticsearchStore(esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, elserId); const chain = RetrievalQAChain.fromLLM(llm, esStore.asRetriever()); const tools: Tool[] = [ diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index dbe32ebe16efc..827b428c97803 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -91,7 +91,7 @@ export class ElasticAssistantPlugin // Actions Connector Execute (LLM Wrapper) postActionsConnectorExecuteRoute(router, getElserId); // Evaluate - postEvaluateRoute(router); + postEvaluateRoute(router, getElserId); return { actions: plugins.actions, }; diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index 8a4305dfb43db..ed3ff729b623e 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -12,7 +12,7 @@ import { v4 as uuidv4 } from 'uuid'; import { buildResponse } from '../../lib/build_response'; import { buildRouteValidation } from '../../schemas/common'; -import { ElasticAssistantRequestHandlerContext } from '../../types'; +import { ElasticAssistantRequestHandlerContext, GetElser } from '../../types'; import { EVALUATE } from '../../../common/constants'; import { PostEvaluateBody, PostEvaluatePathQuery } from '../../schemas/evaluate/post_evaluate'; import { performEvaluation } from '../../lib/model_evaluator/evaluation'; @@ -36,7 +36,10 @@ const AGENT_EXECUTOR_MAP: Record = { OpenAIFunctionsExecutor: callOpenAIFunctionsExecutor, }; -export const postEvaluateRoute = (router: IRouter) => { +export const postEvaluateRoute = ( + router: IRouter, + getElser: GetElser +) => { router.post( { path: EVALUATE, @@ -89,6 +92,9 @@ export const postEvaluateRoute = (router: IRouter = { ...request, @@ -115,6 +121,7 @@ export const postEvaluateRoute = (router: IRouter Date: Wed, 4 Oct 2023 19:30:45 -0700 Subject: [PATCH 109/170] [Reporting] Improve language for error when CSV row total was indeterminable (#167843) ## Summary Closes https://github.com/elastic/kibana/issues/153250 --- .../__snapshots__/generate_csv.test.ts.snap | 28 +- .../kbn-generate-csv/src/generate_csv.test.ts | 1557 +++++++++-------- packages/kbn-generate-csv/src/generate_csv.ts | 10 +- packages/kbn-generate-csv/src/i18n_texts.ts | 6 + 4 files changed, 810 insertions(+), 791 deletions(-) diff --git a/packages/kbn-generate-csv/src/__snapshots__/generate_csv.test.ts.snap b/packages/kbn-generate-csv/src/__snapshots__/generate_csv.test.ts.snap index c10911d7687d3..da0f6a4560640 100644 --- a/packages/kbn-generate-csv/src/__snapshots__/generate_csv.test.ts.snap +++ b/packages/kbn-generate-csv/src/__snapshots__/generate_csv.test.ts.snap @@ -1,71 +1,71 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`fields from job.columns (7.13+ generated) cells can be multi-value 1`] = ` +exports[`CsvGenerator fields from job.columns (7.13+ generated) cells can be multi-value 1`] = ` "product,category coconut,\\"cool, rad\\" " `; -exports[`fields from job.columns (7.13+ generated) columns can be top-level fields such as _id and _index 1`] = ` +exports[`CsvGenerator fields from job.columns (7.13+ generated) columns can be top-level fields such as _id and _index 1`] = ` "\\"_id\\",\\"_index\\",product,category \\"my-cool-id\\",\\"my-cool-index\\",coconut,\\"cool, rad\\" " `; -exports[`fields from job.columns (7.13+ generated) default column names come from tabify 1`] = ` +exports[`CsvGenerator fields from job.columns (7.13+ generated) default column names come from tabify 1`] = ` "\\"_id\\",\\"_index\\",\\"_score\\",category,product \\"my-cool-id\\",\\"my-cool-index\\",\\"'-\\",\\"cool, rad\\",coconut " `; -exports[`fields from job.searchSource.getFields() (7.12 generated) cells can be multi-value 1`] = ` +exports[`CsvGenerator fields from job.searchSource.getFields() (7.12 generated) cells can be multi-value 1`] = ` "\\"_id\\",sku \\"my-cool-id\\",\\"This is a cool SKU., This is also a cool SKU.\\" " `; -exports[`fields from job.searchSource.getFields() (7.12 generated) provides top-level underscored fields as columns 1`] = ` +exports[`CsvGenerator fields from job.searchSource.getFields() (7.12 generated) provides top-level underscored fields as columns 1`] = ` "\\"_id\\",\\"_index\\",date,message \\"my-cool-id\\",\\"my-cool-index\\",\\"2020-12-31T00:14:28.000Z\\",\\"it's nice to see you\\" " `; -exports[`fields from job.searchSource.getFields() (7.12 generated) sorts the fields when they are to be used as table column names 1`] = ` +exports[`CsvGenerator fields from job.searchSource.getFields() (7.12 generated) sorts the fields when they are to be used as table column names 1`] = ` "\\"_id\\",\\"_index\\",\\"_score\\",date,\\"message_t\\",\\"message_u\\",\\"message_v\\",\\"message_w\\",\\"message_x\\",\\"message_y\\",\\"message_z\\" \\"my-cool-id\\",\\"my-cool-index\\",\\"'-\\",\\"2020-12-31T00:14:28.000Z\\",\\"test field T\\",\\"test field U\\",\\"test field V\\",\\"test field W\\",\\"test field X\\",\\"test field Y\\",\\"test field Z\\" " `; -exports[`formats a search result to CSV content 1`] = ` +exports[`CsvGenerator formats a search result to CSV content 1`] = ` "date,ip,message \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"This is a great message!\\" " `; -exports[`formats an empty search result to CSV content 1`] = ` +exports[`CsvGenerator formats an empty search result to CSV content 1`] = ` "date,ip,message " `; -exports[`formulas can check for formulas, without escaping them 1`] = ` +exports[`CsvGenerator formulas can check for formulas, without escaping them 1`] = ` "date,ip,message \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"=SUM(A1:A2)\\" " `; -exports[`formulas escapes formula values in a cell, doesn't warn the csv contains formulas 1`] = ` +exports[`CsvGenerator formulas escapes formula values in a cell, doesn't warn the csv contains formulas 1`] = ` "date,ip,message \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"'=SUM(A1:A2)\\" " `; -exports[`formulas escapes formula values in a header, doesn't warn the csv contains formulas 1`] = ` +exports[`CsvGenerator formulas escapes formula values in a header, doesn't warn the csv contains formulas 1`] = ` "date,ip,\\"'=SUM(A1:A2)\\" \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"This is great data\\" " `; -exports[`keeps order of the columns during the scroll 1`] = ` +exports[`CsvGenerator keeps order of the columns during the scroll 1`] = ` "\\"_id\\",\\"_index\\",\\"_score\\",a,b \\"'-\\",\\"'-\\",\\"'-\\",a1,b1 \\"'-\\",\\"'-\\",\\"'-\\",\\"'-\\",b2 @@ -73,7 +73,7 @@ exports[`keeps order of the columns during the scroll 1`] = ` " `; -exports[`uses the pit ID to page all the data 1`] = ` +exports[`CsvGenerator uses the pit ID to page all the data 1`] = ` "date,ip,message \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"hit from the initial search\\" \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"hit from the initial search\\" @@ -178,7 +178,7 @@ exports[`uses the pit ID to page all the data 1`] = ` " `; -exports[`warns if max size was reached 1`] = ` +exports[`CsvGenerator warns if max size was reached 1`] = ` "date,ip,message \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"super cali fragile istic XPLA docious\\" \\"2020-12-31T00:14:28.000Z\\",\\"110.135.176.89\\",\\"super cali fragile istic XPLA docious\\" diff --git a/packages/kbn-generate-csv/src/generate_csv.test.ts b/packages/kbn-generate-csv/src/generate_csv.test.ts index 874c58aeb8469..52f15d6a82c49 100644 --- a/packages/kbn-generate-csv/src/generate_csv.test.ts +++ b/packages/kbn-generate-csv/src/generate_csv.test.ts @@ -32,394 +32,110 @@ const createMockJob = (baseObj: any = {}): JobParams => ({ ...baseObj, }); -let mockEsClient: IScopedClusterClient; -let mockDataClient: IScopedSearchClient; -let mockConfig: CsvConfig; -let mockLogger: jest.Mocked; -let uiSettingsClient: IUiSettingsClient; -let stream: jest.Mocked; -let content: string; - -const searchSourceMock = { - ...searchSourceInstanceMock, - getSearchRequestBody: jest.fn(() => ({})), -}; - -const mockSearchSourceService: jest.Mocked = { - create: jest.fn().mockReturnValue(searchSourceMock), - createEmpty: jest.fn().mockReturnValue(searchSourceMock), - telemetry: jest.fn(), - inject: jest.fn(), - extract: jest.fn(), - getAllMigrations: jest.fn(), -}; - -const mockPitId = 'oju9fs3698s3902f02-8qg3-u9w36oiewiuyew6'; - -const getMockRawResponse = (hits: Array> = [], total = hits.length) => ({ - took: 1, - timed_out: false, - pit_id: mockPitId, - _shards: { total: 1, successful: 1, failed: 0, skipped: 0 }, - hits: { hits, total, max_score: 0 }, -}); - -const mockDataClientSearchDefault = jest.fn().mockImplementation( - (): Rx.Observable<{ rawResponse: SearchResponse }> => - Rx.of({ - rawResponse: getMockRawResponse(), - }) -); - -const mockFieldFormatsRegistry = { - deserialize: jest - .fn() - .mockImplementation(() => ({ id: 'string', convert: jest.fn().mockImplementation(identity) })), -} as unknown as FieldFormatsRegistry; - -beforeEach(async () => { - content = ''; - stream = { write: jest.fn((chunk) => (content += chunk)) } as unknown as typeof stream; - mockEsClient = elasticsearchServiceMock.createScopedClusterClient(); - mockDataClient = dataPluginMock.createStartContract().search.asScoped({} as any); - mockDataClient.search = mockDataClientSearchDefault; - - mockEsClient.asCurrentUser.openPointInTime = jest.fn().mockResolvedValueOnce({ id: mockPitId }); - - uiSettingsClient = uiSettingsServiceMock - .createStartContract() - .asScopedToClient(savedObjectsClientMock.create()); - uiSettingsClient.get = jest.fn().mockImplementation((key): any => { - switch (key) { - case UI_SETTINGS_CSV_QUOTE_VALUES: - return true; - case UI_SETTINGS_CSV_SEPARATOR: - return ','; - case UI_SETTINGS_DATEFORMAT_TZ: - return 'Browser'; - } - }); - - mockConfig = { - checkForFormulas: true, - escapeFormulaValues: true, - maxSizeBytes: 180000, - useByteOrderMarkEncoding: false, - scroll: { size: 500, duration: '30s' }, +describe('CsvGenerator', () => { + let mockEsClient: IScopedClusterClient; + let mockDataClient: IScopedSearchClient; + let mockConfig: CsvConfig; + let mockLogger: jest.Mocked; + let uiSettingsClient: IUiSettingsClient; + let stream: jest.Mocked; + let content: string; + + const searchSourceMock = { + ...searchSourceInstanceMock, + getSearchRequestBody: jest.fn(() => ({})), }; - searchSourceMock.getField = jest.fn((key: string) => { - switch (key) { - case 'pit': - return { id: mockPitId }; - case 'index': - return { - fields: { - getByName: jest.fn(() => []), - getByType: jest.fn(() => []), - }, - metaFields: ['_id', '_index', '_type', '_score'], - getFormatterForField: jest.fn(), - getIndexPattern: () => 'logstash-*', - }; - } - }); - - mockLogger = loggingSystemMock.createLogger(); -}); - -it('formats an empty search result to CSV content', async () => { - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - const csvResult = await generateCsv.generateData(); - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(false); -}); - -it('formats a search result to CSV content', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - fields: { - date: `["2020-12-31T00:14:28.000Z"]`, - ip: `["110.135.176.89"]`, - message: `["This is a great message!"]`, - }, - } as unknown as estypes.SearchHit, - ]), - }) - ); - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - const csvResult = await generateCsv.generateData(); - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(false); -}); - -const HITS_TOTAL = 100; - -it('calculates the bytes of the content', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse( - range(0, HITS_TOTAL).map( - () => - ({ - fields: { - message: ['this is a great message'], - }, - } as unknown as estypes.SearchHit) - ) - ), - }) - ); - - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - const csvResult = await generateCsv.generateData(); - expect(csvResult.max_size_reached).toBe(false); - expect(csvResult.warnings).toEqual([]); -}); - -it('warns if max size was reached', async () => { - const TEST_MAX_SIZE = 500; - mockConfig = { - checkForFormulas: true, - escapeFormulaValues: true, - maxSizeBytes: TEST_MAX_SIZE, - useByteOrderMarkEncoding: false, - scroll: { size: 500, duration: '30s' }, + const mockSearchSourceService: jest.Mocked = { + create: jest.fn().mockReturnValue(searchSourceMock), + createEmpty: jest.fn().mockReturnValue(searchSourceMock), + telemetry: jest.fn(), + inject: jest.fn(), + extract: jest.fn(), + getAllMigrations: jest.fn(), }; - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse( - range(0, HITS_TOTAL).map( - () => - ({ - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: ['super cali fragile istic XPLA docious'], - }, - } as unknown as estypes.SearchHit) - ) - ), - }) - ); - - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - const csvResult = await generateCsv.generateData(); - expect(csvResult.max_size_reached).toBe(true); - expect(csvResult.warnings).toEqual([]); - expect(content).toMatchSnapshot(); -}); - -it('uses the pit ID to page all the data', async () => { - mockDataClient.search = jest - .fn() - .mockImplementationOnce(() => - Rx.of({ - rawResponse: getMockRawResponse( - range(0, HITS_TOTAL / 10).map( - () => - ({ - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: ['hit from the initial search'], - }, - } as unknown as estypes.SearchHit) - ), - HITS_TOTAL - ), - }) - ) - .mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse( - range(0, HITS_TOTAL / 10).map( - () => - ({ - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: ['hit from a subsequent scroll'], - }, - } as unknown as estypes.SearchHit) - ) - ), - }) - ); - - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - const csvResult = await generateCsv.generateData(); - expect(csvResult.warnings).toEqual([]); - expect(content).toMatchSnapshot(); - - expect(mockDataClient.search).toHaveBeenCalledTimes(10); - expect(mockDataClient.search).toBeCalledWith( - { params: { body: {}, ignore_throttled: undefined } }, - { strategy: 'es', transport: { maxRetries: 0, requestTimeout: '30s' } } - ); - - expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledTimes(1); - expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( - { - ignore_unavailable: true, - index: 'logstash-*', - keep_alive: '30s', - }, - { maxRetries: 0, requestTimeout: '30s' } - ); - - expect(mockEsClient.asCurrentUser.closePointInTime).toHaveBeenCalledTimes(1); - expect(mockEsClient.asCurrentUser.closePointInTime).toHaveBeenCalledWith({ - body: { id: mockPitId }, + const mockPitId = 'oju9fs3698s3902f02-8qg3-u9w36oiewiuyew6'; + + const getMockRawResponse = ( + hits: Array> = [], + total = hits.length + ) => ({ + took: 1, + timed_out: false, + pit_id: mockPitId, + _shards: { total: 1, successful: 1, failed: 0, skipped: 0 }, + hits: { hits, total, max_score: 0 }, }); -}); -it('keeps order of the columns during the scroll', async () => { - mockDataClient.search = jest - .fn() - .mockImplementationOnce(() => - Rx.of({ - rawResponse: getMockRawResponse( - [{ fields: { a: ['a1'], b: ['b1'] } } as unknown as estypes.SearchHit], - 3 - ), - }) - ) - .mockImplementationOnce(() => - Rx.of({ - rawResponse: getMockRawResponse( - [{ fields: { b: ['b2'] } } as unknown as estypes.SearchHit], - 3 - ), - }) - ) - .mockImplementationOnce(() => + const mockDataClientSearchDefault = jest.fn().mockImplementation( + (): Rx.Observable<{ rawResponse: SearchResponse }> => Rx.of({ - rawResponse: getMockRawResponse( - [{ fields: { a: ['a3'], c: ['c3'] } } as unknown as estypes.SearchHit], - 3 - ), + rawResponse: getMockRawResponse(), }) - ); - - const generateCsv = new CsvGenerator( - createMockJob({ searchSource: {}, columns: [] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream ); - await generateCsv.generateData(); - expect(content).toMatchSnapshot(); -}); + const mockFieldFormatsRegistry = { + deserialize: jest.fn().mockImplementation(() => ({ + id: 'string', + convert: jest.fn().mockImplementation(identity), + })), + } as unknown as FieldFormatsRegistry; + + beforeEach(async () => { + content = ''; + stream = { write: jest.fn((chunk) => (content += chunk)) } as unknown as typeof stream; + mockEsClient = elasticsearchServiceMock.createScopedClusterClient(); + mockDataClient = dataPluginMock.createStartContract().search.asScoped({} as any); + mockDataClient.search = mockDataClientSearchDefault; + + mockEsClient.asCurrentUser.openPointInTime = jest.fn().mockResolvedValueOnce({ id: mockPitId }); + + uiSettingsClient = uiSettingsServiceMock + .createStartContract() + .asScopedToClient(savedObjectsClientMock.create()); + uiSettingsClient.get = jest.fn().mockImplementation((key): any => { + switch (key) { + case UI_SETTINGS_CSV_QUOTE_VALUES: + return true; + case UI_SETTINGS_CSV_SEPARATOR: + return ','; + case UI_SETTINGS_DATEFORMAT_TZ: + return 'Browser'; + } + }); -describe('fields from job.searchSource.getFields() (7.12 generated)', () => { - it('cells can be multi-value', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, + mockConfig = { + checkForFormulas: true, + escapeFormulaValues: true, + maxSizeBytes: 180000, + useByteOrderMarkEncoding: false, + scroll: { size: 500, duration: '30s' }, + }; + + searchSourceMock.getField = jest.fn((key: string) => { + switch (key) { + case 'pit': + return { id: mockPitId }; + case 'index': + return { fields: { - sku: [`This is a cool SKU.`, `This is also a cool SKU.`], + getByName: jest.fn(() => []), + getByType: jest.fn(() => []), }, - }, - ]), - }) - ); + metaFields: ['_id', '_index', '_type', '_score'], + getFormatterForField: jest.fn(), + getIndexPattern: () => 'logstash-*', + }; + } + }); + mockLogger = loggingSystemMock.createLogger(); + }); + + it('formats an empty search result to CSV content', async () => { const generateCsv = new CsvGenerator( - createMockJob({ searchSource: {}, columns: ['_id', 'sku'] }), + createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, { es: mockEsClient, @@ -434,39 +150,27 @@ describe('fields from job.searchSource.getFields() (7.12 generated)', () => { mockLogger, stream ); - await generateCsv.generateData(); - + const csvResult = await generateCsv.generateData(); expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(false); }); - it('provides top-level underscored fields as columns', async () => { + it('formats a search result to CSV content', async () => { mockDataClient.search = jest.fn().mockImplementation(() => Rx.of({ rawResponse: getMockRawResponse([ { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, fields: { - date: ['2020-12-31T00:14:28.000Z'], - message: [`it's nice to see you`], + date: `["2020-12-31T00:14:28.000Z"]`, + ip: `["110.135.176.89"]`, + message: `["This is a great message!"]`, }, - }, + } as unknown as estypes.SearchHit, ]), }) ); - const generateCsv = new CsvGenerator( - createMockJob({ - searchSource: { - query: { query: '', language: 'kuery' }, - sort: [{ '@date': 'desc' }], - index: '93f4bc50-6662-11eb-98bc-f550e2308366', - fields: ['_id', '_index', '@date', 'message'], - filter: [], - }, - columns: ['_id', '_index', 'date', 'message'], - }), + createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, { es: mockEsClient, @@ -481,46 +185,31 @@ describe('fields from job.searchSource.getFields() (7.12 generated)', () => { mockLogger, stream ); - const csvResult = await generateCsv.generateData(); - expect(content).toMatchSnapshot(); expect(csvResult.csv_contains_formulas).toBe(false); }); - it('sorts the fields when they are to be used as table column names', async () => { + const HITS_TOTAL = 100; + + it('calculates the bytes of the content', async () => { mockDataClient.search = jest.fn().mockImplementation(() => Rx.of({ - rawResponse: getMockRawResponse([ - { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, - fields: { - date: ['2020-12-31T00:14:28.000Z'], - message_z: [`test field Z`], - message_y: [`test field Y`], - message_x: [`test field X`], - message_w: [`test field W`], - message_v: [`test field V`], - message_u: [`test field U`], - message_t: [`test field T`], - }, - }, - ]), + rawResponse: getMockRawResponse( + range(0, HITS_TOTAL).map( + () => + ({ + fields: { + message: ['this is a great message'], + }, + } as unknown as estypes.SearchHit) + ) + ), }) ); const generateCsv = new CsvGenerator( - createMockJob({ - searchSource: { - query: { query: '', language: 'kuery' }, - sort: [{ '@date': 'desc' }], - index: '93f4bc50-6662-11eb-98bc-f550e2308366', - fields: ['*'], - filter: [], - }, - }), + createMockJob({ columns: ['message'] }), mockConfig, { es: mockEsClient, @@ -535,34 +224,40 @@ describe('fields from job.searchSource.getFields() (7.12 generated)', () => { mockLogger, stream ); - const csvResult = await generateCsv.generateData(); - - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(false); + expect(csvResult.max_size_reached).toBe(false); + expect(csvResult.warnings).toEqual([]); }); -}); -describe('fields from job.columns (7.13+ generated)', () => { - it('cells can be multi-value', async () => { + it('warns if max size was reached', async () => { + const TEST_MAX_SIZE = 500; + mockConfig = { + checkForFormulas: true, + escapeFormulaValues: true, + maxSizeBytes: TEST_MAX_SIZE, + useByteOrderMarkEncoding: false, + scroll: { size: 500, duration: '30s' }, + }; + mockDataClient.search = jest.fn().mockImplementation(() => Rx.of({ - rawResponse: getMockRawResponse([ - { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, - fields: { - product: 'coconut', - category: [`cool`, `rad`], - }, - }, - ]), + rawResponse: getMockRawResponse( + range(0, HITS_TOTAL).map( + () => + ({ + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: ['super cali fragile istic XPLA docious'], + }, + } as unknown as estypes.SearchHit) + ) + ), }) ); const generateCsv = new CsvGenerator( - createMockJob({ searchSource: {}, columns: ['product', 'category'] }), + createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, { es: mockEsClient, @@ -577,30 +272,51 @@ describe('fields from job.columns (7.13+ generated)', () => { mockLogger, stream ); - await generateCsv.generateData(); - + const csvResult = await generateCsv.generateData(); + expect(csvResult.max_size_reached).toBe(true); + expect(csvResult.warnings).toEqual([]); expect(content).toMatchSnapshot(); }); - it('columns can be top-level fields such as _id and _index', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, - fields: { - product: 'coconut', - category: [`cool`, `rad`], - }, - }, - ]), - }) - ); + it('uses the pit ID to page all the data', async () => { + mockDataClient.search = jest + .fn() + .mockImplementationOnce(() => + Rx.of({ + rawResponse: getMockRawResponse( + range(0, HITS_TOTAL / 10).map( + () => + ({ + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: ['hit from the initial search'], + }, + } as unknown as estypes.SearchHit) + ), + HITS_TOTAL + ), + }) + ) + .mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse( + range(0, HITS_TOTAL / 10).map( + () => + ({ + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: ['hit from a subsequent scroll'], + }, + } as unknown as estypes.SearchHit) + ) + ), + }) + ); const generateCsv = new CsvGenerator( - createMockJob({ searchSource: {}, columns: ['_id', '_index', 'product', 'category'] }), + createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, { es: mockEsClient, @@ -615,28 +331,60 @@ describe('fields from job.columns (7.13+ generated)', () => { mockLogger, stream ); - await generateCsv.generateData(); - + const csvResult = await generateCsv.generateData(); + expect(csvResult.warnings).toEqual([]); expect(content).toMatchSnapshot(); - }); - it('default column names come from tabify', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - _id: 'my-cool-id', - _index: 'my-cool-index', - _version: 4, - fields: { - product: 'coconut', - category: [`cool`, `rad`], - }, - }, - ]), - }) + expect(mockDataClient.search).toHaveBeenCalledTimes(10); + expect(mockDataClient.search).toBeCalledWith( + { params: { body: {}, ignore_throttled: undefined } }, + { strategy: 'es', transport: { maxRetries: 0, requestTimeout: '30s' } } + ); + + expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledTimes(1); + expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( + { + ignore_unavailable: true, + index: 'logstash-*', + keep_alive: '30s', + }, + { maxRetries: 0, requestTimeout: '30s' } ); + expect(mockEsClient.asCurrentUser.closePointInTime).toHaveBeenCalledTimes(1); + expect(mockEsClient.asCurrentUser.closePointInTime).toHaveBeenCalledWith({ + body: { id: mockPitId }, + }); + }); + + it('keeps order of the columns during the scroll', async () => { + mockDataClient.search = jest + .fn() + .mockImplementationOnce(() => + Rx.of({ + rawResponse: getMockRawResponse( + [{ fields: { a: ['a1'], b: ['b1'] } } as unknown as estypes.SearchHit], + 3 + ), + }) + ) + .mockImplementationOnce(() => + Rx.of({ + rawResponse: getMockRawResponse( + [{ fields: { b: ['b2'] } } as unknown as estypes.SearchHit], + 3 + ), + }) + ) + .mockImplementationOnce(() => + Rx.of({ + rawResponse: getMockRawResponse( + [{ fields: { a: ['a3'], c: ['c3'] } } as unknown as estypes.SearchHit], + 3 + ), + }) + ); + const generateCsv = new CsvGenerator( createMockJob({ searchSource: {}, columns: [] }), mockConfig, @@ -657,34 +405,403 @@ describe('fields from job.columns (7.13+ generated)', () => { expect(content).toMatchSnapshot(); }); -}); -describe('formulas', () => { - const TEST_FORMULA = '=SUM(A1:A2)'; + describe('fields from job.searchSource.getFields() (7.12 generated)', () => { + it('cells can be multi-value', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + sku: [`This is a cool SKU.`, `This is also a cool SKU.`], + }, + }, + ]), + }) + ); - it(`escapes formula values in a cell, doesn't warn the csv contains formulas`, async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: [TEST_FORMULA], + const generateCsv = new CsvGenerator( + createMockJob({ searchSource: {}, columns: ['_id', 'sku'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + }); + + it('provides top-level underscored fields as columns', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + date: ['2020-12-31T00:14:28.000Z'], + message: [`it's nice to see you`], + }, }, - } as unknown as estypes.SearchHit, - ]), - }) - ); + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ + searchSource: { + query: { query: '', language: 'kuery' }, + sort: [{ '@date': 'desc' }], + index: '93f4bc50-6662-11eb-98bc-f550e2308366', + fields: ['_id', '_index', '@date', 'message'], + filter: [], + }, + columns: ['_id', '_index', 'date', 'message'], + }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const csvResult = await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(false); + }); + + it('sorts the fields when they are to be used as table column names', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + date: ['2020-12-31T00:14:28.000Z'], + message_z: [`test field Z`], + message_y: [`test field Y`], + message_x: [`test field X`], + message_w: [`test field W`], + message_v: [`test field V`], + message_u: [`test field U`], + message_t: [`test field T`], + }, + }, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ + searchSource: { + query: { query: '', language: 'kuery' }, + sort: [{ '@date': 'desc' }], + index: '93f4bc50-6662-11eb-98bc-f550e2308366', + fields: ['*'], + filter: [], + }, + }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const csvResult = await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(false); + }); + }); + + describe('fields from job.columns (7.13+ generated)', () => { + it('cells can be multi-value', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + product: 'coconut', + category: [`cool`, `rad`], + }, + }, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ searchSource: {}, columns: ['product', 'category'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + }); + + it('columns can be top-level fields such as _id and _index', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + product: 'coconut', + category: [`cool`, `rad`], + }, + }, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ searchSource: {}, columns: ['_id', '_index', 'product', 'category'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + }); + + it('default column names come from tabify', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + _id: 'my-cool-id', + _index: 'my-cool-index', + _version: 4, + fields: { + product: 'coconut', + category: [`cool`, `rad`], + }, + }, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ searchSource: {}, columns: [] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + }); + }); + + describe('formulas', () => { + const TEST_FORMULA = '=SUM(A1:A2)'; + + it(`escapes formula values in a cell, doesn't warn the csv contains formulas`, async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: [TEST_FORMULA], + }, + } as unknown as estypes.SearchHit, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ columns: ['date', 'ip', 'message'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const csvResult = await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(false); + }); + + it(`escapes formula values in a header, doesn't warn the csv contains formulas`, async () => { + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + [TEST_FORMULA]: 'This is great data', + }, + } as unknown as estypes.SearchHit, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ columns: ['date', 'ip', TEST_FORMULA] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const csvResult = await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(false); + }); + + it('can check for formulas, without escaping them', async () => { + mockConfig = { + checkForFormulas: true, + escapeFormulaValues: false, + maxSizeBytes: 180000, + useByteOrderMarkEncoding: false, + scroll: { size: 500, duration: '30s' }, + }; + mockDataClient.search = jest.fn().mockImplementation(() => + Rx.of({ + rawResponse: getMockRawResponse([ + { + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: [TEST_FORMULA], + }, + } as unknown as estypes.SearchHit, + ]), + }) + ); + + const generateCsv = new CsvGenerator( + createMockJob({ columns: ['date', 'ip', 'message'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const csvResult = await generateCsv.generateData(); + + expect(content).toMatchSnapshot(); + expect(csvResult.csv_contains_formulas).toBe(true); + }); + }); + + it('can override ignoring frozen indices', async () => { + const originalGet = uiSettingsClient.get; + uiSettingsClient.get = jest.fn().mockImplementation((key): any => { + if (key === 'search:includeFrozen') { + return true; + } + return originalGet(key); + }); const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), + createMockJob({}), mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, + { es: mockEsClient, data: mockDataClient, uiSettings: uiSettingsClient }, { searchSourceStart: mockSearchSourceService, fieldFormatsRegistry: mockFieldFormatsRegistry, @@ -694,29 +811,49 @@ describe('formulas', () => { stream ); - const csvResult = await generateCsv.generateData(); + await generateCsv.generateData(); - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(false); + expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( + { + ignore_unavailable: true, + ignore_throttled: false, + index: 'logstash-*', + keep_alive: '30s', + }, + { maxRetries: 0, requestTimeout: '30s' } + ); + + expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( + { + ignore_unavailable: true, + ignore_throttled: false, + index: 'logstash-*', + keep_alive: '30s', + }, + { maxRetries: 0, requestTimeout: '30s' } + ); + + expect(mockDataClient.search).toBeCalledWith( + { + params: { + body: {}, + }, + }, + { strategy: 'es', transport: { maxRetries: 0, requestTimeout: '30s' } } + ); }); - it(`escapes formula values in a header, doesn't warn the csv contains formulas`, async () => { - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - [TEST_FORMULA]: 'This is great data', - }, - } as unknown as estypes.SearchHit, - ]), + it('adds a warning if export was unable to close the PIT', async () => { + mockEsClient.asCurrentUser.closePointInTime = jest.fn().mockRejectedValueOnce( + new esErrors.ResponseError({ + statusCode: 419, + warnings: [], + meta: { context: 'test' } as any, }) ); const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', TEST_FORMULA] }), + createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, { es: mockEsClient, @@ -732,34 +869,33 @@ describe('formulas', () => { stream ); - const csvResult = await generateCsv.generateData(); - - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(false); + await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` + Object { + "content_type": "text/csv", + "csv_contains_formulas": false, + "error_code": undefined, + "max_size_reached": false, + "metrics": Object { + "csv": Object { + "rows": 0, + }, + }, + "warnings": Array [ + "Unable to close the Point-In-Time used for search. Check the Kibana server logs.", + ], + } + `); }); - it('can check for formulas, without escaping them', async () => { - mockConfig = { - checkForFormulas: true, - escapeFormulaValues: false, - maxSizeBytes: 180000, - useByteOrderMarkEncoding: false, - scroll: { size: 500, duration: '30s' }, - }; - mockDataClient.search = jest.fn().mockImplementation(() => - Rx.of({ - rawResponse: getMockRawResponse([ - { - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: [TEST_FORMULA], - }, - } as unknown as estypes.SearchHit, - ]), - }) - ); - + it('will return partial data if the scroll or search fails', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => { + throw new esErrors.ResponseError({ + statusCode: 500, + meta: {} as any, + body: 'my error', + warnings: [], + }); + }); const generateCsv = new CsvGenerator( createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, @@ -776,226 +912,39 @@ describe('formulas', () => { mockLogger, stream ); - - const csvResult = await generateCsv.generateData(); - - expect(content).toMatchSnapshot(); - expect(csvResult.csv_contains_formulas).toBe(true); - }); -}); - -it('can override ignoring frozen indices', async () => { - const originalGet = uiSettingsClient.get; - uiSettingsClient.get = jest.fn().mockImplementation((key): any => { - if (key === 'search:includeFrozen') { - return true; - } - return originalGet(key); - }); - - const generateCsv = new CsvGenerator( - createMockJob({}), - mockConfig, - { es: mockEsClient, data: mockDataClient, uiSettings: uiSettingsClient }, - { searchSourceStart: mockSearchSourceService, fieldFormatsRegistry: mockFieldFormatsRegistry }, - new CancellationToken(), - mockLogger, - stream - ); - - await generateCsv.generateData(); - - expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( - { - ignore_unavailable: true, - ignore_throttled: false, - index: 'logstash-*', - keep_alive: '30s', - }, - { maxRetries: 0, requestTimeout: '30s' } - ); - - expect(mockEsClient.asCurrentUser.openPointInTime).toHaveBeenCalledWith( - { - ignore_unavailable: true, - ignore_throttled: false, - index: 'logstash-*', - keep_alive: '30s', - }, - { maxRetries: 0, requestTimeout: '30s' } - ); - - expect(mockDataClient.search).toBeCalledWith( - { - params: { - body: {}, - }, - }, - { strategy: 'es', transport: { maxRetries: 0, requestTimeout: '30s' } } - ); -}); - -it('adds a warning if export was unable to close the PIT', async () => { - mockEsClient.asCurrentUser.closePointInTime = jest.fn().mockRejectedValueOnce( - new esErrors.ResponseError({ - statusCode: 419, - warnings: [], - meta: { context: 'test' } as any, - }) - ); - - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - - await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` - Object { - "content_type": "text/csv", - "csv_contains_formulas": false, - "error_code": undefined, - "max_size_reached": false, - "metrics": Object { - "csv": Object { - "rows": 0, - }, - }, - "warnings": Array [ - "Unable to close the Point-In-Time used for search. Check the Kibana server logs.", - ], - } - `); -}); - -it('will return partial data if the scroll or search fails', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => { - throw new esErrors.ResponseError({ - statusCode: 500, - meta: {} as any, - body: 'my error', - warnings: [], - }); - }); - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` - Object { - "content_type": "text/csv", - "csv_contains_formulas": false, - "error_code": undefined, - "max_size_reached": false, - "metrics": Object { - "csv": Object { - "rows": 0, + await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` + Object { + "content_type": "text/csv", + "csv_contains_formulas": false, + "error_code": undefined, + "max_size_reached": false, + "metrics": Object { + "csv": Object { + "rows": 0, + }, }, - }, - "warnings": Array [ - "Received a 500 response from Elasticsearch: my error", - "Encountered an error with the number of CSV rows generated from the search: expected NaN, received 0.", - ], - } - `); - expect(mockLogger.error.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - "CSV export search error: ResponseError: my error", - ], + "warnings": Array [ + "Received a 500 response from Elasticsearch: my error", + "Encountered an error with the number of CSV rows generated from the search: expected rows were indeterminable, received 0.", + ], + } + `); + expect(mockLogger.error.mock.calls).toMatchInlineSnapshot(` Array [ - [ResponseError: my error], - ], - ] - `); -}); - -it('handles unknown errors', async () => { - mockDataClient.search = jest.fn().mockImplementation(() => { - throw new Error('An unknown error'); + Array [ + "CSV export search error: ResponseError: my error", + ], + Array [ + [ResponseError: my error], + ], + ] + `); }); - const generateCsv = new CsvGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), - mockConfig, - { - es: mockEsClient, - data: mockDataClient, - uiSettings: uiSettingsClient, - }, - { - searchSourceStart: mockSearchSourceService, - fieldFormatsRegistry: mockFieldFormatsRegistry, - }, - new CancellationToken(), - mockLogger, - stream - ); - await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` - Object { - "content_type": "text/csv", - "csv_contains_formulas": false, - "error_code": undefined, - "max_size_reached": false, - "metrics": Object { - "csv": Object { - "rows": 0, - }, - }, - "warnings": Array [ - "Encountered an unknown error: An unknown error", - "Encountered an error with the number of CSV rows generated from the search: expected NaN, received 0.", - ], - } - `); -}); - -describe('error codes', () => { - it('returns the expected error code when authentication expires', async () => { - mockDataClient.search = jest - .fn() - .mockImplementationOnce(() => - Rx.of({ - rawResponse: getMockRawResponse( - range(0, 5).map(() => ({ - _index: 'lasdf', - _id: 'lasdf123', - fields: { - date: ['2020-12-31T00:14:28.000Z'], - ip: ['110.135.176.89'], - message: ['super cali fragile istic XPLA docious'], - }, - })), - 10 - ), - }) - ) - .mockImplementationOnce(() => { - throw new esErrors.ResponseError({ statusCode: 403, meta: {} as any, warnings: [] }); - }); + it('handles unknown errors', async () => { + mockDataClient.search = jest.fn().mockImplementation(() => { + throw new Error('An unknown error'); + }); const generateCsv = new CsvGenerator( createMockJob({ columns: ['date', 'ip', 'message'] }), mockConfig, @@ -1012,25 +961,85 @@ describe('error codes', () => { mockLogger, stream ); - - const { error_code: errorCode, warnings } = await generateCsv.generateData(); - expect(errorCode).toBe('authentication_expired_error'); - expect(warnings).toMatchInlineSnapshot(` - Array [ - "This report contains partial CSV results because the authentication token expired. Export a smaller amount of data or increase the timeout of the authentication token.", - "Encountered an error with the number of CSV rows generated from the search: expected 10, received 5.", - ] + await expect(generateCsv.generateData()).resolves.toMatchInlineSnapshot(` + Object { + "content_type": "text/csv", + "csv_contains_formulas": false, + "error_code": undefined, + "max_size_reached": false, + "metrics": Object { + "csv": Object { + "rows": 0, + }, + }, + "warnings": Array [ + "Encountered an unknown error: An unknown error", + "Encountered an error with the number of CSV rows generated from the search: expected rows were indeterminable, received 0.", + ], + } `); + }); - expect(mockLogger.error.mock.calls).toMatchInlineSnapshot(` - Array [ + describe('error codes', () => { + it('returns the expected error code when authentication expires', async () => { + mockDataClient.search = jest + .fn() + .mockImplementationOnce(() => + Rx.of({ + rawResponse: getMockRawResponse( + range(0, 5).map(() => ({ + _index: 'lasdf', + _id: 'lasdf123', + fields: { + date: ['2020-12-31T00:14:28.000Z'], + ip: ['110.135.176.89'], + message: ['super cali fragile istic XPLA docious'], + }, + })), + 10 + ), + }) + ) + .mockImplementationOnce(() => { + throw new esErrors.ResponseError({ statusCode: 403, meta: {} as any, warnings: [] }); + }); + + const generateCsv = new CsvGenerator( + createMockJob({ columns: ['date', 'ip', 'message'] }), + mockConfig, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + { + searchSourceStart: mockSearchSourceService, + fieldFormatsRegistry: mockFieldFormatsRegistry, + }, + new CancellationToken(), + mockLogger, + stream + ); + + const { error_code: errorCode, warnings } = await generateCsv.generateData(); + expect(errorCode).toBe('authentication_expired_error'); + expect(warnings).toMatchInlineSnapshot(` Array [ - "CSV export search error: ResponseError: Response Error", - ], + "This report contains partial CSV results because the authentication token expired. Export a smaller amount of data or increase the timeout of the authentication token.", + "Encountered an error with the number of CSV rows generated from the search: expected 10, received 5.", + ] + `); + + expect(mockLogger.error.mock.calls).toMatchInlineSnapshot(` Array [ - [ResponseError: Response Error], - ], - ] - `); + Array [ + "CSV export search error: ResponseError: Response Error", + ], + Array [ + [ResponseError: Response Error], + ], + ] + `); + }); }); }); diff --git a/packages/kbn-generate-csv/src/generate_csv.ts b/packages/kbn-generate-csv/src/generate_csv.ts index 3e4d324dcfced..9d3b85b214c94 100644 --- a/packages/kbn-generate-csv/src/generate_csv.ts +++ b/packages/kbn-generate-csv/src/generate_csv.ts @@ -475,9 +475,13 @@ export class CsvGenerator { `ES scroll returned fewer total hits than expected! ` + `Search result total hits: ${totalRecords}. Row count: ${this.csvRowCount}` ); - warnings.push( - i18nTexts.csvRowCountError({ expected: totalRecords ?? NaN, received: this.csvRowCount }) - ); + if (totalRecords || totalRecords === 0) { + warnings.push( + i18nTexts.csvRowCountError({ expected: totalRecords, received: this.csvRowCount }) + ); + } else { + warnings.push(i18nTexts.csvRowCountIndeterminable({ received: this.csvRowCount })); + } } return { diff --git a/packages/kbn-generate-csv/src/i18n_texts.ts b/packages/kbn-generate-csv/src/i18n_texts.ts index 8b492aae7fae1..b9a863a18d2df 100644 --- a/packages/kbn-generate-csv/src/i18n_texts.ts +++ b/packages/kbn-generate-csv/src/i18n_texts.ts @@ -37,6 +37,12 @@ export const i18nTexts = { 'Encountered an error with the number of CSV rows generated from the search: expected {expected}, received {received}.', values: { expected, received }, }), + csvRowCountIndeterminable: ({ received }: { expected?: number; received: number }) => + i18n.translate('generateCsv.indeterminableRowCount', { + defaultMessage: + 'Encountered an error with the number of CSV rows generated from the search: expected rows were indeterminable, received {received}.', + values: { received }, + }), csvUnableToClosePit: () => i18n.translate('generateCsv.csvUnableToClosePit', { defaultMessage: From 8d5dfafd8d06cc3096f9b72325032510aa498eab Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 4 Oct 2023 20:57:17 -0700 Subject: [PATCH 110/170] [Cloud Security] CloudSecurityDataTable component (#167587) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR introduces the Cloud Security DataTable component, meant to replace and consolidate the tables used in the Cloud Security plugin The CloudSecurityDataTable component is a wrapper over the `` component. We made that decision based on the number of features it provides for the users plus support from the most common features such as Flyout, Sort, Filtering, and Pagination to the most advanced features like Virtualization and DataView integration. - **Virtualization**: Thanks to Virtualization, users can fetch more data on the table than the limit of `500`, and also use larger items per page if desired. - **DataView integration**: This option allows users to rename Columns as needed by setting custom labels in the DataView. - **Column control**: Users can move columns and resize it as needed, and that settings is saved on the local storage. - **Row Height control**: Users can modify in the Advanced Settings -> `discover:rowHeight` the height of the row. Below is a Matrix comparing the features between the current Findings table, the Vulnerabilities Data Grid and the new CloudSecurityDataTable. Feature | CloudSecurity DataTable (new >= 8.11) | Findings Table (current <= 8.10) | Vulnerabilities Data Grid (current <= 8.10) -- | -- | -- | -- Tooltip on Cell Hover | ❌ | ✅ | ❌ Column Sorting | ✅ | ✅ | ✅ Multi Column Sorting | ✅ | ❌ | ✅ Column filtering | ✅ | ✅ | ✅ Pagination | ✅ | ✅ | ✅ Rows per page | ✅ | ✅ | ✅ Virtualization (Support to load more data) | ✅ | ❌ | ❌ Custom component on Column Header | ❌ (only custom text) | ✅ | ❌ Additional controls on the left | ✅ | ❌ | ✅ Text truncation | ✅ | ✅ | ✅ Override Style | ✅ (https://github.com/elastic/kibana/pull/166994) | ✅ | ✅ Load more button | ✅ | ❌ | ❌ Resize column | ✅ | ❌ | ✅ Reorder column | ✅ | ❌ | ✅ FullScreen button | ✅ | ❌ | ✅ User-defined row height | ✅ | ❌ | ❌ external pagination control (enables Flyout pagination) | ❌ | ✅ | ✅ user-defined column renaming | ✅ (using DataViews) | ❌ | ❌ ### Regressions There are some regressions such as losing the ability to paginate on the Flyout and the table pagination is no longer controlled by URL params, that's because pagination is controlled by an internal state in the `` component, and we plan to re-enable those features again in the future by contributing to the `` component. ### Screenshots ![image](https://github.com/elastic/kibana/assets/19270322/a0d1f95a-adcc-4e58-9d3e-0adec3df8b3b) ### Videos Basic Features + Virtualization https://github.com/elastic/kibana/assets/19270322/b1a61592-e1ae-4baf-9610-3e24c473c17d https://github.com/elastic/kibana/assets/19270322/d8e6106c-0ca3-4277-b78b-5ca482095ae1 DataView integration https://github.com/elastic/kibana/assets/19270322/0d583243-bb86-45e4-baa5-dc63253da8f6 Row Height Control https://github.com/elastic/kibana/assets/19270322/b1d43609-7c8a-4855-ab2f-624c18663579 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Jordan <51442161+JordanSh@users.noreply.github.com> --- .../cloud_security_posture/kibana.jsonc | 4 +- .../common/api/use_filtered_data_view.ts | 53 ---- .../api/use_latest_findings_data_view.ts | 51 +++- .../public/common/constants.ts | 2 + .../use_cloud_posture_table.ts | 29 +- .../cloud_security_data_table.tsx | 275 ++++++++++++++++++ .../cloud_security_data_table/index.ts | 8 + .../cloud_security_data_table/use_styles.ts | 85 ++++++ .../configurations/configurations.test.tsx | 27 +- .../findings_flyout/findings_flyout.tsx | 32 +- .../latest_findings_container.test.tsx | 87 ------ .../latest_findings_container.tsx | 263 ++++++++--------- .../latest_findings_table.test.tsx | 133 --------- .../latest_findings/latest_findings_table.tsx | 120 -------- .../latest_findings/use_latest_findings.ts | 37 ++- .../findings_by_resource_container.tsx | 60 ++-- .../resource_findings_container.tsx | 56 ++-- .../layout/findings_distribution_bar.tsx | 69 ++--- .../pages/vulnerabilities/hooks/use_styles.ts | 2 + .../pages/vulnerabilities/vulnerabilities.tsx | 19 +- .../vulnerabilities/vulnerabilties.test.tsx | 31 +- .../cloud_security_posture/public/plugin.tsx | 21 +- .../public/test/test_provider.tsx | 6 +- .../cloud_security_posture/public/types.ts | 15 + .../cloud_security_posture/tsconfig.json | 12 +- .../page_objects/findings_page.ts | 114 +++++++- .../pages/findings.ts | 45 +-- 27 files changed, 911 insertions(+), 745 deletions(-) delete mode 100644 x-pack/plugins/cloud_security_posture/public/common/api/use_filtered_data_view.ts create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/index.ts create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.test.tsx delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.test.tsx delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx diff --git a/x-pack/plugins/cloud_security_posture/kibana.jsonc b/x-pack/plugins/cloud_security_posture/kibana.jsonc index b6dfd66931b1f..9237ed70104ad 100644 --- a/x-pack/plugins/cloud_security_posture/kibana.jsonc +++ b/x-pack/plugins/cloud_security_posture/kibana.jsonc @@ -11,6 +11,7 @@ "requiredPlugins": [ "navigation", "data", + "dataViews", "fleet", "unifiedSearch", "taskManager", @@ -19,7 +20,8 @@ "discover", "cloud", "licensing", - "share" + "share", + "kibanaUtils" ], "optionalPlugins": ["usageCollection"], "requiredBundles": ["kibanaReact", "usageCollection"] diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_filtered_data_view.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_filtered_data_view.ts deleted file mode 100644 index cabc449b1e3bd..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/common/api/use_filtered_data_view.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useQuery } from '@tanstack/react-query'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import type { DataView } from '@kbn/data-plugin/common'; -import { DATA_VIEW_INDEX_PATTERN } from '../../../common/constants'; -import { CspClientPluginStartDeps } from '../../types'; - -/** - * Returns the common logs-* data view with fields filtered by - * fields present in the given index pattern - */ -export const useFilteredDataView = (indexPattern: string) => { - const { - data: { dataViews }, - } = useKibana().services; - - const findDataView = async (): Promise => { - const dataView = (await dataViews.find(DATA_VIEW_INDEX_PATTERN))?.[0]; - if (!dataView) { - throw new Error('Findings data view not found'); - } - - const indexPatternFields = await dataViews.getFieldsForWildcard({ - pattern: indexPattern, - }); - - if (!indexPatternFields) { - throw new Error('Error fetching fields for the index pattern'); - } - - // Filter out fields that are not present in the index pattern passed as a parameter - dataView.fields = dataView.fields.filter((field) => - indexPatternFields.some((indexPatternField) => indexPatternField.name === field.name) - ) as DataView['fields']; - - // Insert fields that are present in the index pattern but not in the data view - indexPatternFields.forEach((indexPatternField) => { - if (!dataView.fields.some((field) => field.name === indexPatternField.name)) { - dataView.fields.push(indexPatternField as DataView['fields'][0]); - } - }); - - return dataView; - }; - - return useQuery(['latest_findings_data_view', indexPattern], findDataView); -}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts index 2ab22ff4dd092..86b9692cbfc43 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts @@ -8,8 +8,45 @@ import { useQuery } from '@tanstack/react-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { DataView } from '@kbn/data-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { LATEST_FINDINGS_INDEX_PATTERN } from '../../../common/constants'; import { CspClientPluginStartDeps } from '../../types'; +const cloudSecurityFieldLabels: Record = { + 'result.evaluation': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.resultColumnLabel', + { defaultMessage: 'Result' } + ), + 'resource.id': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.resourceIdColumnLabel', + { defaultMessage: 'Resource ID' } + ), + 'resource.name': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.resourceNameColumnLabel', + { defaultMessage: 'Resource Name' } + ), + 'resource.sub_type': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.resourceTypeColumnLabel', + { defaultMessage: 'Resource Type' } + ), + 'rule.benchmark.rule_number': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.ruleNumberColumnLabel', + { defaultMessage: 'Rule Number' } + ), + 'rule.name': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.ruleNameColumnLabel', + { defaultMessage: 'Rule Name' } + ), + 'rule.section': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.ruleSectionColumnLabel', + { defaultMessage: 'CIS Section' } + ), + '@timestamp': i18n.translate( + 'xpack.csp.findings.findingsTable.findingsTableColumn.lastCheckedColumnLabel', + { defaultMessage: 'Last Checked' } + ), +} as const; + /** * TODO: use perfected kibana data views */ @@ -19,11 +56,23 @@ export const useLatestFindingsDataView = (dataView: string) => { } = useKibana().services; const findDataView = async (): Promise => { - const dataViewObj = (await dataViews.find(dataView))?.[0]; + const [dataViewObj] = await dataViews.find(dataView); if (!dataViewObj) { throw new Error(`Data view not found [Name: {${dataView}}]`); } + if (dataView === LATEST_FINDINGS_INDEX_PATTERN) { + Object.entries(cloudSecurityFieldLabels).forEach(([field, label]) => { + if ( + !dataViewObj.getFieldAttrs()[field]?.customLabel || + dataViewObj.getFieldAttrs()[field]?.customLabel === field + ) { + dataViewObj.setFieldCustomLabel(field, label); + } + }); + await dataViews.updateSavedObject(dataViewObj); + } + return dataViewObj; }; diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index bec25a70dbd1e..9f267e07569c2 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -38,6 +38,8 @@ export const CSP_MOMENT_FORMAT = 'MMMM D, YYYY @ HH:mm:ss.SSS'; export const MAX_FINDINGS_TO_LOAD = 500; export const DEFAULT_VISIBLE_ROWS_PER_PAGE = 25; +export const LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY = 'cloudPosture:dataTable:pageSize'; +export const LOCAL_STORAGE_DATA_TABLE_COLUMNS_KEY = 'cloudPosture:dataTable:columns'; export const LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY = 'cloudPosture:findings:pageSize'; export const LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY = 'cloudPosture:benchmark:pageSize'; export const LOCAL_STORAGE_PAGE_SIZE_RULES_KEY = 'cloudPosture:rules:pageSize'; diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts index 2d42c2a8303d6..0becb56e6ec22 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts @@ -8,19 +8,18 @@ import { Dispatch, SetStateAction, useCallback } from 'react'; import { type DataView } from '@kbn/data-views-plugin/common'; import { BoolQuery } from '@kbn/es-query'; import { CriteriaWithPagination } from '@elastic/eui'; +import { DataTableRecord } from '@kbn/discover-utils/types'; import { useUrlQuery } from '../use_url_query'; import { usePageSize } from '../use_page_size'; import { getDefaultQuery, useBaseEsQuery, usePersistedQuery } from './utils'; - -interface QuerySort { - direction: string; - id: string; -} +import { LOCAL_STORAGE_DATA_TABLE_COLUMNS_KEY } from '../../constants'; export interface CloudPostureTableResult { + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable setUrlQuery: (query: any) => void; - // TODO: remove any, this sorting is used for both EuiGrid and EuiTable which uses different types of sorts + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable sort: any; + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable filters: any[]; query?: { bool: BoolQuery }; queryError?: Error; @@ -28,13 +27,17 @@ export interface CloudPostureTableResult { // TODO: remove any, urlQuery is an object with query fields but we also add custom fields to it, need to assert usages urlQuery: any; setTableOptions: (options: CriteriaWithPagination) => void; + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable handleUpdateQuery: (query: any) => void; pageSize: number; setPageSize: Dispatch>; onChangeItemsPerPage: (newPageSize: number) => void; onChangePage: (newPageIndex: number) => void; - onSort: (sort: QuerySort[]) => void; + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable + onSort: (sort: any) => void; onResetFilters: () => void; + columnsLocalStorageKey: string; + getRowsFromPages: (data: Array<{ page: DataTableRecord[] }> | undefined) => DataTableRecord[]; } /* @@ -44,10 +47,13 @@ export const useCloudPostureTable = ({ defaultQuery = getDefaultQuery, dataView, paginationLocalStorageKey, + columnsLocalStorageKey, }: { + // TODO: Remove any when all finding tables are converted to CloudSecurityDataTable defaultQuery?: (params: any) => any; dataView: DataView; paginationLocalStorageKey: string; + columnsLocalStorageKey?: string; }): CloudPostureTableResult => { const getPersistedDefaultQuery = usePersistedQuery(defaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); @@ -120,6 +126,13 @@ export const useCloudPostureTable = ({ [setUrlQuery] ); + const getRowsFromPages = (data: Array<{ page: DataTableRecord[] }> | undefined) => + data + ?.map(({ page }: { page: DataTableRecord[] }) => { + return page; + }) + .flat() || []; + return { setUrlQuery, sort: urlQuery.sort, @@ -136,5 +149,7 @@ export const useCloudPostureTable = ({ onChangePage, onSort, onResetFilters, + columnsLocalStorageKey: columnsLocalStorageKey || LOCAL_STORAGE_DATA_TABLE_COLUMNS_KEY, + getRowsFromPages, }; }; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx new file mode 100644 index 0000000000000..2318a16f2efbb --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx @@ -0,0 +1,275 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useState, useMemo } from 'react'; +import { UnifiedDataTableSettings, useColumns } from '@kbn/unified-data-table'; +import { type DataView } from '@kbn/data-views-plugin/common'; +import { UnifiedDataTable, DataLoadingState } from '@kbn/unified-data-table'; +import { CellActionsProvider } from '@kbn/cell-actions'; +import { + ROW_HEIGHT_OPTION, + SHOW_MULTIFIELDS, + SORT_DEFAULT_ORDER_SETTING, +} from '@kbn/discover-utils'; +import { DataTableRecord } from '@kbn/discover-utils/types'; +import { + EuiDataGridCellValueElementProps, + EuiDataGridStyle, + EuiFlexItem, + EuiProgress, +} from '@elastic/eui'; +import { AddFieldFilterHandler } from '@kbn/unified-field-list'; +import { generateFilters } from '@kbn/data-plugin/public'; +import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; +import numeral from '@elastic/numeral'; +import { useKibana } from '../../common/hooks/use_kibana'; +import { CloudPostureTableResult } from '../../common/hooks/use_cloud_posture_table'; +import { FindingsGroupBySelector } from '../../pages/configurations/layout/findings_group_by_selector'; +import { EmptyState } from '../empty_state'; +import { MAX_FINDINGS_TO_LOAD } from '../../common/constants'; +import { useStyles } from './use_styles'; + +export interface CloudSecurityDefaultColumn { + id: string; +} + +const formatNumber = (value: number) => { + return value < 1000 ? value : numeral(value).format('0.0a'); +}; + +const gridStyle: EuiDataGridStyle = { + border: 'horizontal', + cellPadding: 'l', + stripes: false, + header: 'underline', +}; + +const useNewFieldsApi = true; + +interface CloudSecurityDataGridProps { + dataView: DataView; + isLoading: boolean; + defaultColumns: CloudSecurityDefaultColumn[]; + rows: DataTableRecord[]; + total: number; + /** + * This is the component that will be rendered in the flyout when a row is expanded. + * This component will receive the row data and a function to close the flyout. + */ + flyoutComponent: (hit: DataTableRecord, onCloseFlyout: () => void) => JSX.Element; + /** + * This is the object that contains all the data and functions from the useCloudPostureTable hook. + * This is also used to manage the table state from the parent component. + */ + cloudPostureTable: CloudPostureTableResult; + title: string; + /** + * This is a function that returns a map of column ids to custom cell renderers. + * This is useful for rendering custom components for cells in the table. + */ + customCellRenderer?: (rows: DataTableRecord[]) => { + [key: string]: (props: EuiDataGridCellValueElementProps) => JSX.Element; + }; + /** + * Function to load more rows once the max number of rows has been reached. + */ + loadMore: () => void; + 'data-test-subj'?: string; +} + +export const CloudSecurityDataTable = ({ + dataView, + isLoading, + defaultColumns, + rows, + total, + flyoutComponent, + cloudPostureTable, + loadMore, + title, + customCellRenderer, + ...rest +}: CloudSecurityDataGridProps) => { + const { + columnsLocalStorageKey, + pageSize, + onChangeItemsPerPage, + setUrlQuery, + onSort, + onResetFilters, + filters, + sort, + } = cloudPostureTable; + + const [columns, setColumns] = useLocalStorage( + columnsLocalStorageKey, + defaultColumns.map((c) => c.id) + ); + const [settings, setSettings] = useLocalStorage( + `${columnsLocalStorageKey}:settings`, + { + columns: defaultColumns.reduce((prev, curr) => { + const newColumn = { [curr.id]: {} }; + return { ...prev, ...newColumn }; + }, {} as UnifiedDataTableSettings['columns']), + } + ); + + const [expandedDoc, setExpandedDoc] = useState(undefined); + + const renderDocumentView = (hit: DataTableRecord) => + flyoutComponent(hit, () => setExpandedDoc(undefined)); + + // services needed for unified-data-table package + const { + uiSettings, + uiActions, + dataViews, + data, + application, + theme, + fieldFormats, + toastNotifications, + storage, + dataViewFieldEditor, + } = useKibana().services; + + const styles = useStyles(); + + const { capabilities } = application; + const { filterManager } = data.query; + + const services = { + theme, + fieldFormats, + uiSettings, + toastNotifications, + storage, + data, + dataViewFieldEditor, + }; + + const { columns: currentColumns, onSetColumns } = useColumns({ + capabilities, + defaultOrder: uiSettings.get(SORT_DEFAULT_ORDER_SETTING), + dataView, + dataViews, + setAppState: (props) => setColumns(props.columns), + useNewFieldsApi, + columns, + sort, + }); + + const onAddFilter: AddFieldFilterHandler | undefined = useMemo( + () => + filterManager && dataView + ? (clickedField, values, operation) => { + const newFilters = generateFilters( + filterManager, + clickedField, + values, + operation, + dataView + ); + filterManager.addFilters(newFilters); + setUrlQuery({ + filters: filterManager.getFilters(), + }); + } + : undefined, + [dataView, filterManager, setUrlQuery] + ); + + const onResize = (colSettings: { columnId: string; width: number }) => { + const grid = settings || {}; + const newColumns = { ...(grid.columns || {}) }; + newColumns[colSettings.columnId] = { + width: Math.round(colSettings.width), + }; + const newGrid = { ...grid, columns: newColumns }; + setSettings(newGrid); + }; + + const externalCustomRenderers = useMemo(() => { + if (!customCellRenderer) { + return undefined; + } + return customCellRenderer(rows); + }, [customCellRenderer, rows]); + + if (!isLoading && !rows.length) { + return ; + } + + return ( + +
    0 ? 454 : 414}px)`, + }} + > + + } + gridStyleOverride={gridStyle} + /> +
    +
    + ); +}; + +const AdditionalControls = ({ total, title }: { total: number; title: string }) => { + const styles = useStyles(); + return ( + <> + + {`${formatNumber(total)} ${title}`} + + + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/index.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/index.ts new file mode 100644 index 0000000000000..b2abf6bd4b8bd --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './cloud_security_data_table'; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts new file mode 100644 index 0000000000000..200ea5dbe7330 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts @@ -0,0 +1,85 @@ +/* + * Copyright 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 { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/css'; + +export const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + const gridContainer = css` + min-height: 400px; + `; + + const gridStyle = css` + & .euiDataGridHeaderCell__icon { + display: none; + } + & .euiDataGrid__controls { + border-bottom: none; + margin-bottom: ${euiTheme.size.s}; + border-top: none; + & .euiButtonEmpty { + font-weight: ${euiTheme.font.weight.bold}; + } + } + & .euiDataGrid--headerUnderline .euiDataGridHeaderCell { + border-bottom: ${euiTheme.border.width.thick} solid ${euiTheme.colors.fullShade}; + } + & .euiDataGridRowCell__contentByHeight + .euiDataGridRowCell__expandActions { + padding: 0; + } + & .euiButtonIcon[data-test-subj='docTableExpandToggleColumn'] { + color: ${euiTheme.colors.primary}; + } + + & .euiDataGridRowCell { + font-size: ${euiTheme.size.m}; + } + & .euiDataGridRowCell__expandFlex { + align-items: center; + } + & .euiDataGridRowCell.euiDataGridRowCell--numeric { + text-align: left; + } + & .euiDataGrid__controls { + gap: ${euiTheme.size.s}; + } + & .euiDataGrid__leftControls { + display: flex; + align-items: center; + width: 100%; + } + & .cspDataTableTotal { + font-size: ${euiTheme.size.m}; + font-weight: ${euiTheme.font.weight.bold}; + } + & .euiDataGrid__rightControls { + display: none; + } + + & [data-test-subj='docTableExpandToggleColumn'] svg { + inline-size: 16px; + block-size: 16px; + } + + & .unifiedDataTable__cellValue { + font-family: ${euiTheme.font.family}; + } + `; + + const groupBySelector = css` + width: 188px; + margin-left: auto; + `; + + return { + gridStyle, + groupBySelector, + gridContainer, + }; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx index 96e5b2a964f94..d1b35ab617a96 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx @@ -12,13 +12,10 @@ import { useLatestFindingsDataView } from '../../common/api/use_latest_findings_ import { Configurations } from './configurations'; import { TestProvider } from '../../test/test_provider'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { createStubDataView } from '@kbn/data-views-plugin/public/data_views/data_view.stub'; import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../common/constants'; import * as TEST_SUBJECTS from './test_subjects'; import type { DataView } from '@kbn/data-plugin/common'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; import { useSubscriptionStatus } from '../../common/hooks/use_subscription_status'; import { createReactQueryResponse } from '../../test/fixtures/react_query'; @@ -27,11 +24,9 @@ import { useCspIntegrationLink } from '../../common/navigation/use_csp_integrati import { NO_FINDINGS_STATUS_TEST_SUBJ } from '../../components/test_subjects'; import { render } from '@testing-library/react'; import { expectIdsInDoc } from '../../test/utils'; -import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; -import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import { PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../../components/cloud_posture_page'; -import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; import { useLicenseManagementLocatorApi } from '../../common/api/use_license_management_locator_api'; +import { useCloudPostureTable } from '../../common/hooks/use_cloud_posture_table'; jest.mock('../../common/api/use_latest_findings_data_view'); jest.mock('../../common/api/use_setup_status_api'); @@ -39,6 +34,7 @@ jest.mock('../../common/api/use_license_management_locator_api'); jest.mock('../../common/hooks/use_subscription_status'); jest.mock('../../common/navigation/use_navigate_to_cis_integration_policies'); jest.mock('../../common/navigation/use_csp_integration_link'); +jest.mock('../../common/hooks/use_cloud_posture_table'); const chance = new Chance(); @@ -58,21 +54,18 @@ beforeEach(() => { data: true, }) ); + + (useCloudPostureTable as jest.Mock).mockImplementation(() => ({ + getRowsFromPages: jest.fn(), + columnsLocalStorageKey: 'test', + filters: [], + sort: [], + })); }); const renderFindingsPage = () => { render( - + ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_flyout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_flyout.tsx index 2c59f360850d8..524e893092e53 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_flyout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_flyout.tsx @@ -76,9 +76,9 @@ type FindingsTab = typeof tabs[number]; interface FindingFlyoutProps { onClose(): void; findings: CspFinding; - flyoutIndex: number; - findingsCount: number; - onPaginate: (pageIndex: number) => void; + flyoutIndex?: number; + findingsCount?: number; + onPaginate?: (pageIndex: number) => void; } export const CodeBlock: React.FC> = (props) => ( @@ -166,16 +166,22 @@ export const FindingsRuleFlyout = ({ - - - - + + {onPaginate && ( + + + + )} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.test.tsx deleted file mode 100644 index 100c42b6520cb..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.test.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { render } from '@testing-library/react'; -import { LatestFindingsContainer, getDefaultQuery } from './latest_findings_container'; -import { createStubDataView } from '@kbn/data-views-plugin/common/mocks'; -import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants'; -import { DEFAULT_VISIBLE_ROWS_PER_PAGE } from '../../../common/constants'; -import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { TestProvider } from '../../../test/test_provider'; -import { getFindingsQuery } from './use_latest_findings'; -import { encodeQuery } from '../../../common/navigation/query_utils'; -import { useLocation } from 'react-router-dom'; -import { buildEsQuery } from '@kbn/es-query'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; -import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; -import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; -import { getPaginationQuery } from '../../../common/hooks/use_cloud_posture_table/utils'; -import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; - -jest.mock('../../../common/api/use_latest_findings_data_view'); -jest.mock('../../../common/api/use_cis_kubernetes_integration'); - -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useHistory: () => ({ push: jest.fn(), location: { pathname: '' } }), - useLocation: jest.fn(), -})); - -beforeEach(() => { - jest.restoreAllMocks(); -}); - -describe('', () => { - it('data#search.search fn called with URL query', () => { - const query = getDefaultQuery({ - filters: [], - query: { language: 'kuery', query: '' }, - }); - const pageSize = DEFAULT_VISIBLE_ROWS_PER_PAGE; - const dataMock = dataPluginMock.createStartContract(); - const dataView = createStubDataView({ - spec: { - id: CSP_LATEST_FINDINGS_DATA_VIEW, - }, - }); - - (useLocation as jest.Mock).mockReturnValue({ - search: encodeQuery(query), - }); - - render( - - - - ); - - const baseQuery = { - query: buildEsQuery(dataView, query.query, query.filters), - }; - - expect(dataMock.search.search).toHaveBeenNthCalledWith(1, { - params: getFindingsQuery({ - ...baseQuery, - ...getPaginationQuery({ ...query, pageSize }), - sort: query.sort, - enabled: true, - }), - }); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx index 3c5443d652c08..049010126837c 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx @@ -4,80 +4,140 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; +import React, { useMemo } from 'react'; +import { EuiDataGridCellValueElementProps, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { DataTableRecord } from '@kbn/discover-utils/types'; +import { Filter, Query } from '@kbn/es-query'; +import { TimestampTableCell } from '../../../components/timestamp_table_cell'; +import { CspEvaluationBadge } from '../../../components/csp_evaluation_badge'; import type { Evaluation } from '../../../../common/types'; import type { FindingsBaseProps, FindingsBaseURLQuery } from '../../../common/types'; -import { FindingsTable } from './latest_findings_table'; import { FindingsSearchBar } from '../layout/findings_search_bar'; import * as TEST_SUBJECTS from '../test_subjects'; import { useLatestFindings } from './use_latest_findings'; -import type { FindingsGroupByNoneQuery } from './use_latest_findings'; import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; -import { getFindingsPageSizeInfo, getFilters } from '../utils/utils'; -import { LimitedResultsBar } from '../layout/findings_layout'; -import { FindingsGroupBySelector } from '../layout/findings_group_by_selector'; -import { usePageSlice } from '../../../common/hooks/use_page_slice'; +import { getFilters } from '../utils/utils'; import { ErrorCallout } from '../layout/error_callout'; -import { useLimitProperties } from '../../../common/utils/get_limit_properties'; -import { LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY } from '../../../common/constants'; +import { LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY } from '../../../common/constants'; import { CspFinding } from '../../../../common/schemas/csp_finding'; import { useCloudPostureTable } from '../../../common/hooks/use_cloud_posture_table'; -import { getPaginationTableParams } from '../../../common/hooks/use_cloud_posture_table/utils'; +import { + CloudSecurityDataTable, + CloudSecurityDefaultColumn, +} from '../../../components/cloud_security_data_table'; +import { FindingsRuleFlyout } from '../findings_flyout/findings_flyout'; -export const getDefaultQuery = ({ +const getDefaultQuery = ({ query, filters, -}: FindingsBaseURLQuery): FindingsBaseURLQuery & - FindingsGroupByNoneQuery & { findingIndex: number } => ({ +}: { + query: Query; + filters: Filter[]; +}): FindingsBaseURLQuery & { + sort: string[][]; +} => ({ query, filters, - sort: { field: '@timestamp', direction: 'desc' }, - pageIndex: 0, - findingIndex: -1, + sort: [['@timestamp', 'desc']], +}); + +const defaultColumns: CloudSecurityDefaultColumn[] = [ + { id: 'result.evaluation' }, + { id: 'resource.id' }, + { id: 'resource.name' }, + { id: 'resource.sub_type' }, + { id: 'rule.benchmark.rule_number' }, + { id: 'rule.name' }, + { id: 'rule.section' }, + { id: '@timestamp' }, +]; + +/** + * Type Guard for checking if the given source is a CspFinding + */ +const isCspFinding = (source: Record | undefined): source is CspFinding => { + return source?.result?.evaluation !== undefined; +}; + +/** + * This Wrapper component renders the children if the given row is a CspFinding + * it uses React's Render Props pattern + */ +const CspFindingRenderer = ({ + row, + children, +}: { + row: DataTableRecord; + children: ({ finding }: { finding: CspFinding }) => JSX.Element; +}) => { + const source = row.raw._source; + const finding = isCspFinding(source) && (source as CspFinding); + if (!finding) return <>; + return children({ finding }); +}; + +/** + * Flyout component for the latest findings table + */ +const flyoutComponent = (row: DataTableRecord, onCloseFlyout: () => void): JSX.Element => { + return ( + + {({ finding }) => } + + ); +}; + +const columnsLocalStorageKey = 'cloudSecurityPostureLatestFindingsColumns'; + +const title = i18n.translate('xpack.csp.findings.latestFindings.tableRowTypeLabel', { + defaultMessage: 'Findings', +}); + +const customCellRenderer = (rows: DataTableRecord[]) => ({ + 'result.evaluation': ({ rowIndex }: EuiDataGridCellValueElementProps) => ( + + {({ finding }) => } + + ), + '@timestamp': ({ rowIndex }: EuiDataGridCellValueElementProps) => ( + + {({ finding }) => } + + ), }); export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { - const { - pageIndex, - query, - sort, - queryError, - pageSize, - setTableOptions, - urlQuery, - setUrlQuery, - filters, - onResetFilters, - } = useCloudPostureTable({ + const cloudPostureTable = useCloudPostureTable({ dataView, + paginationLocalStorageKey: LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY, + columnsLocalStorageKey, defaultQuery: getDefaultQuery, - paginationLocalStorageKey: LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY, }); - /** - * Page ES query result - */ - const findingsGroupByNone = useLatestFindings({ + const { query, sort, queryError, setUrlQuery, filters, getRowsFromPages } = cloudPostureTable; + + const { + data, + error: fetchError, + isFetching, + fetchNextPage, + } = useLatestFindings({ query, sort, enabled: !queryError, }); - const slicedPage = usePageSlice(findingsGroupByNone.data?.page, pageIndex, pageSize); + const rows = useMemo(() => getRowsFromPages(data?.pages), [data?.pages, getRowsFromPages]); - const error = findingsGroupByNone.error || queryError; + const error = fetchError || queryError; - const { isLastLimitedPage, limitedTotalItemCount } = useLimitProperties({ - total: findingsGroupByNone.data?.total, - pageIndex, - pageSize, - }); + const passed = data?.pages[0].count.passed || 0; + const failed = data?.pages[0].count.failed || 0; + const total = data?.pages[0].total || 0; const handleDistributionClick = (evaluation: Evaluation) => { setUrlQuery({ - pageIndex: 0, filters: getFilters({ filters, dataView, @@ -88,117 +148,36 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { }); }; - const flyoutFindingIndex = urlQuery?.findingIndex; - - const pagination = getPaginationTableParams({ - pageSize, - pageIndex, - totalItemCount: limitedTotalItemCount, - }); - - const onOpenFlyout = useCallback( - (flyoutFinding: CspFinding) => { - setUrlQuery({ - findingIndex: slicedPage.findIndex( - (finding) => - finding.resource.id === flyoutFinding?.resource.id && - finding.rule.id === flyoutFinding?.rule.id - ), - }); - }, - [slicedPage, setUrlQuery] - ); - - const onCloseFlyout = () => - setUrlQuery({ - findingIndex: -1, - }); - - const onPaginateFlyout = useCallback( - (nextFindingIndex: number) => { - // the index of the finding in the current page - const newFindingIndex = nextFindingIndex % pageSize; - - // if the finding is not in the current page, we need to change the page - const flyoutPageIndex = Math.floor(nextFindingIndex / pageSize); - - setUrlQuery({ - pageIndex: flyoutPageIndex, - findingIndex: newFindingIndex, - }); - }, - [pageSize, setUrlQuery] - ); - return ( -
    - { - setUrlQuery({ ...newQuery, pageIndex: 0 }); - }} - loading={findingsGroupByNone.isFetching} - /> + + - {!error && ( - - - - - - - )} {error && } {!error && ( <> - {findingsGroupByNone.isSuccess && !!findingsGroupByNone.data.page.length && ( + {total > 0 && ( )} - - setUrlQuery({ - pageIndex: 0, - filters: getFilters({ - filters, - dataView, - field, - value, - negate, - }), - }) - } + )} - {isLastLimitedPage && } -
    + ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.test.tsx deleted file mode 100644 index 31b2db9592f63..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.test.tsx +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import userEvent from '@testing-library/user-event'; -import { render, screen, within } from '@testing-library/react'; -import * as TEST_SUBJECTS from '../test_subjects'; -import { FindingsTable } from './latest_findings_table'; -import type { PropsOf } from '@elastic/eui'; -import Chance from 'chance'; -import { TestProvider } from '../../../test/test_provider'; -import { getFindingsFixture } from '../../../test/fixtures/findings_fixture'; -import { EMPTY_STATE_TEST_SUBJ } from '../../../components/test_subjects'; - -const chance = new Chance(); - -type TableProps = PropsOf; - -const onAddFilter = jest.fn(); -const onOpenFlyout = jest.fn(); -const onCloseFlyout = jest.fn(); - -describe('', () => { - const TestComponent = ({ ...overrideProps }) => ( - - - - ); - - const renderWrapper = (overrideProps: Partial = {}) => { - return render(); - }; - - it('opens/closes the flyout when clicked on expand/close buttons ', async () => { - const props = { - items: [getFindingsFixture()], - }; - const { rerender } = renderWrapper(props); - - expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_FLYOUT)).not.toBeInTheDocument(); - expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_TABLE_EXPAND_COLUMN)).toBeInTheDocument(); - - userEvent.click(screen.getByTestId(TEST_SUBJECTS.FINDINGS_TABLE_EXPAND_COLUMN)); - expect(onOpenFlyout).toHaveBeenCalled(); - rerender(); - - userEvent.click(screen.getByTestId('euiFlyoutCloseButton')); - expect(onCloseFlyout).toHaveBeenCalled(); - rerender(); - expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_FLYOUT)).not.toBeInTheDocument(); - }); - - it('renders the zero state when status success and data has a length of zero ', async () => { - renderWrapper({ items: [] }); - - expect(screen.getByTestId(EMPTY_STATE_TEST_SUBJ)).toBeInTheDocument(); - }); - - it('renders the table with provided items', () => { - const names = chance.unique(chance.sentence, 10); - const data = names.map((name) => { - const fixture = getFindingsFixture(); - return { ...fixture, rule: { ...fixture.rule, name } }; - }); - - renderWrapper({ items: data }); - - data.forEach((item) => { - expect(screen.getAllByText(item.rule.name)[0]).toBeInTheDocument(); - }); - }); - - it('adds filter with a cell button click', () => { - const names = chance.unique(chance.sentence, 10); - const data = names.map((name) => { - const fixture = getFindingsFixture(); - return { ...fixture, rule: { ...fixture.rule, name } }; - }); - - renderWrapper({ items: data }); - - const row = data[0]; - - const columns = [ - 'result.evaluation', - 'resource.id', - 'resource.name', - 'resource.sub_type', - 'rule.name', - ]; - - columns.forEach((field) => { - const cellElement = screen.getByTestId( - TEST_SUBJECTS.getFindingsTableCellTestId(field, row.resource.id) - ); - userEvent.hover(cellElement); - const addFilterElement = within(cellElement).getByTestId( - TEST_SUBJECTS.FINDINGS_TABLE_CELL_ADD_FILTER - ); - const addNegatedFilterElement = within(cellElement).getByTestId( - TEST_SUBJECTS.FINDINGS_TABLE_CELL_ADD_NEGATED_FILTER - ); - - // We need to account for values like resource.id (deep.nested.values) - const value = field.split('.').reduce((a, c) => a[c], row); - - expect(addFilterElement).toBeVisible(); - expect(addNegatedFilterElement).toBeVisible(); - - userEvent.click(addFilterElement); - expect(onAddFilter).toHaveBeenCalledWith(field, value, false); - - userEvent.click(addNegatedFilterElement); - expect(onAddFilter).toHaveBeenCalledWith(field, value, true); - }); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx deleted file mode 100644 index 3ad8deb346998..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React, { useMemo } from 'react'; -import { - EuiBasicTable, - useEuiTheme, - type Pagination, - type EuiBasicTableProps, - type CriteriaWithPagination, - type EuiTableActionsColumnType, - type EuiTableFieldDataColumnType, -} from '@elastic/eui'; -import { CspFinding } from '../../../../common/schemas/csp_finding'; -import * as TEST_SUBJECTS from '../test_subjects'; -import { FindingsRuleFlyout } from '../findings_flyout/findings_flyout'; -import { - baseFindingsColumns, - createColumnWithFilters, - getExpandColumn, - type OnAddFilter, -} from '../layout/findings_layout'; -import { getSelectedRowStyle } from '../utils/utils'; -import { EmptyState } from '../../../components/empty_state'; - -type TableProps = Required>; - -interface Props { - loading: boolean; - items: CspFinding[]; - pagination: Pagination & { pageSize: number }; - sorting: TableProps['sorting']; - setTableOptions(options: CriteriaWithPagination): void; - onAddFilter: OnAddFilter; - onPaginateFlyout: (pageIndex: number) => void; - onCloseFlyout: () => void; - onOpenFlyout: (finding: CspFinding) => void; - flyoutFindingIndex: number; - onResetFilters: () => void; -} - -const FindingsTableComponent = ({ - loading, - items, - pagination, - sorting, - setTableOptions, - onAddFilter, - onOpenFlyout, - flyoutFindingIndex, - onPaginateFlyout, - onCloseFlyout, - onResetFilters, -}: Props) => { - const { euiTheme } = useEuiTheme(); - - const selectedFinding = items[flyoutFindingIndex]; - - const getRowProps = (row: CspFinding) => ({ - 'data-test-subj': TEST_SUBJECTS.getFindingsTableRowTestId(row.resource.id), - style: getSelectedRowStyle(euiTheme, row, selectedFinding), - }); - - const getCellProps = (row: CspFinding, column: EuiTableFieldDataColumnType) => ({ - 'data-test-subj': TEST_SUBJECTS.getFindingsTableCellTestId(column.field, row.resource.id), - }); - - const columns: [ - EuiTableActionsColumnType, - ...Array> - ] = useMemo( - () => [ - getExpandColumn({ onClick: onOpenFlyout }), - createColumnWithFilters(baseFindingsColumns['result.evaluation'], { onAddFilter }), - createColumnWithFilters(baseFindingsColumns['resource.id'], { onAddFilter }), - createColumnWithFilters(baseFindingsColumns['resource.name'], { onAddFilter }), - createColumnWithFilters(baseFindingsColumns['resource.sub_type'], { onAddFilter }), - baseFindingsColumns['rule.benchmark.rule_number'], - createColumnWithFilters(baseFindingsColumns['rule.name'], { onAddFilter }), - createColumnWithFilters(baseFindingsColumns['rule.section'], { onAddFilter }), - baseFindingsColumns['@timestamp'], - ], - [onOpenFlyout, onAddFilter] - ); - - if (!loading && !items.length) { - return ; - } - - return ( - <> - - {selectedFinding && ( - - )} - - ); -}; - -export const FindingsTable = React.memo(FindingsTableComponent); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts index 00aa0d817e955..9ce0292175839 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts @@ -4,28 +4,30 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useQuery } from '@tanstack/react-query'; +import { useInfiniteQuery } from '@tanstack/react-query'; import { number } from 'io-ts'; import { lastValueFrom } from 'rxjs'; import type { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/data-plugin/common'; import type { Pagination } from '@elastic/eui'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { buildDataTableRecord } from '@kbn/discover-utils'; +import { EsHitRecord } from '@kbn/discover-utils/types'; import { CspFinding } from '../../../../common/schemas/csp_finding'; import { useKibana } from '../../../common/hooks/use_kibana'; -import type { Sort, FindingsBaseEsQuery } from '../../../common/types'; +import type { FindingsBaseEsQuery } from '../../../common/types'; import { getAggregationCount, getFindingsCountAggQuery } from '../utils/utils'; import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants'; import { MAX_FINDINGS_TO_LOAD } from '../../../common/constants'; import { showErrorToast } from '../../../common/utils/show_error_toast'; interface UseFindingsOptions extends FindingsBaseEsQuery { - sort: Sort; + sort: string[][]; enabled: boolean; } export interface FindingsGroupByNoneQuery { pageIndex: Pagination['pageIndex']; - sort: Sort; + sort: any; } type LatestFindingsRequest = IKibanaSearchRequest; @@ -37,15 +39,24 @@ interface FindingsAggs { count: estypes.AggregationsMultiBucketAggregateBase; } -export const getFindingsQuery = ({ query, sort }: UseFindingsOptions) => ({ +export const getFindingsQuery = ({ query, sort }: UseFindingsOptions, pageParam: any) => ({ index: CSP_LATEST_FINDINGS_DATA_VIEW, query, - sort: getSortField(sort), + sort: getMultiFieldsSort(sort), size: MAX_FINDINGS_TO_LOAD, aggs: getFindingsCountAggQuery(), ignore_unavailable: false, + ...(pageParam ? { search_after: pageParam } : {}), }); +const getMultiFieldsSort = (sort: string[][]) => { + return sort.map(([id, direction]) => { + return { + ...getSortField({ field: id, direction }), + }; + }); +}; + /** * By default, ES will sort keyword fields in case-sensitive format, the * following fields are required to have a case-insensitive sorting. @@ -60,7 +71,7 @@ const fieldsRequiredSortingByPainlessScript = [ * Generates Painless sorting if the given field is matched or returns default sorting * This painless script will sort the field in case-insensitive manner */ -const getSortField = ({ field, direction }: Sort) => { +const getSortField = ({ field, direction }: { field: string; direction: string }) => { if (fieldsRequiredSortingByPainlessScript.includes(field)) { return { _script: { @@ -81,14 +92,14 @@ export const useLatestFindings = (options: UseFindingsOptions) => { data, notifications: { toasts }, } = useKibana().services; - return useQuery( + return useInfiniteQuery( ['csp_findings', { params: options }], - async () => { + async ({ pageParam }) => { const { rawResponse: { hits, aggregations }, } = await lastValueFrom( data.search.search({ - params: getFindingsQuery(options), + params: getFindingsQuery(options, pageParam), }) ); if (!aggregations) throw new Error('expected aggregations to be an defined'); @@ -96,7 +107,7 @@ export const useLatestFindings = (options: UseFindingsOptions) => { throw new Error('expected buckets to be an array'); return { - page: hits.hits.map((hit) => hit._source!), + page: hits.hits.map((hit) => buildDataTableRecord(hit as EsHitRecord)), total: number.is(hits.total) ? hits.total : 0, count: getAggregationCount(aggregations.count.buckets), }; @@ -105,6 +116,10 @@ export const useLatestFindings = (options: UseFindingsOptions) => { enabled: options.enabled, keepPreviousData: true, onError: (err: Error) => showErrorToast(toasts, err), + getNextPageParam: (lastPage) => { + if (lastPage.page.length === 0) return undefined; + return lastPage.page[lastPage.page.length - 1].raw.sort; + }, } ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings_by_resource/findings_by_resource_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings_by_resource/findings_by_resource_container.tsx index 1ac0470229282..7f483c3ee0847 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings_by_resource/findings_by_resource_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings_by_resource/findings_by_resource_container.tsx @@ -16,13 +16,13 @@ import * as TEST_SUBJECTS from '../test_subjects'; import { usePageSlice } from '../../../common/hooks/use_page_slice'; import { FindingsByResourceQuery, useFindingsByResource } from './use_findings_by_resource'; import { FindingsByResourceTable } from './findings_by_resource_table'; -import { getFindingsPageSizeInfo, getFilters } from '../utils/utils'; +import { getFilters } from '../utils/utils'; import { LimitedResultsBar } from '../layout/findings_layout'; import { FindingsGroupBySelector } from '../layout/findings_group_by_selector'; import { findingsNavigation } from '../../../common/navigation/constants'; import { ResourceFindings } from './resource_findings/resource_findings_container'; import { ErrorCallout } from '../layout/error_callout'; -import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; +import { CurrentPageOfTotal, FindingsDistributionBar } from '../layout/findings_distribution_bar'; import { LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY } from '../../../common/constants'; import type { FindingsBaseURLQuery, FindingsBaseProps } from '../../../common/types'; import { useCloudPostureTable } from '../../../common/hooks/use_cloud_posture_table'; @@ -111,34 +111,42 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { loading={findingsGroupByResource.isFetching} /> - {!error && ( - - - - - - - )} + {error && } {!error && ( <> {findingsGroupByResource.isSuccess && !!findingsGroupByResource.data.page.length && ( - + <> + + + + + + + + + + + )} { {!error && ( <> {resourceFindings.isSuccess && !!resourceFindings.data.page.length && ( - + <> + + + + + + + + )} void; - pageStart: number; - pageEnd: number; - type: string; } const formatNumber = (value: number) => (value < 1000 ? value : numeral(value).format('0.0a')); +export const CurrentPageOfTotal = ({ + pageEnd, + pageStart, + total, + type, +}: { + pageEnd: number; + pageStart: number; + total: number; + type: string; +}) => ( + + {pageStart}, + pageEnd: {pageEnd}, + total: {formatNumber(total)}, + type, + }} + /> + +); + export const FindingsDistributionBar = (props: Props) => (
    - {} +
    ); const Counters = (props: Props) => ( - + - - - - + + + ); @@ -86,26 +101,6 @@ const PassedFailedCounters = ({ passed, failed }: Pick) => ( - - {pageStart}, - pageEnd: {pageEnd}, - total: {formatNumber(total)}, - type, - }} - /> - -); - const DistributionBar: React.FC> = ({ passed, failed, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts index e18f501cbeb9c..245138775e5b9 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts @@ -67,6 +67,8 @@ export const useStyles = () => { const groupBySelector = css` width: 188px; + display: inline-block; + margin-left: 8px; `; return { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx index a9b8fdaa2f190..6c1aa59cfab4c 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx @@ -29,7 +29,6 @@ import type { VulnerabilitiesQueryData } from './types'; import { LATEST_VULNERABILITIES_INDEX_PATTERN } from '../../../common/constants'; import { ErrorCallout } from '../configurations/layout/error_callout'; import { FindingsSearchBar } from '../configurations/layout/findings_search_bar'; -import { useFilteredDataView } from '../../common/api/use_filtered_data_view'; import { CVSScoreBadge, SeverityStatusBadge } from '../../components/vulnerability_badges'; import { EmptyState } from '../../components/empty_state'; import { VulnerabilityFindingFlyout } from './vulnerabilities_finding_flyout/vulnerability_finding_flyout'; @@ -55,6 +54,7 @@ import { findingsNavigation } from '../../common/navigation/constants'; import { VulnerabilitiesByResource } from './vulnerabilities_by_resource/vulnerabilities_by_resource'; import { ResourceVulnerabilities } from './vulnerabilities_by_resource/resource_vulnerabilities/resource_vulnerabilities'; import { getVulnerabilitiesGridCellActions } from './utils/get_vulnerabilities_grid_cell_actions'; +import { useLatestFindingsDataView } from '../../common/api/use_latest_findings_data_view'; const getDefaultQuery = ({ query, filters }: any): any => ({ query, @@ -163,6 +163,11 @@ const VulnerabilitiesDataGrid = ({ }); }, [data?.page, dataView, pageSize, setUrlQuery, urlQuery.filters]); + // Column visibility + const [visibleColumns, setVisibleColumns] = useState( + columns.map(({ id }) => id) // initialize to the full set of columns + ); + const flyoutVulnerabilityIndex = urlQuery?.vulnerabilityIndex; const selectedVulnerabilityIndex = flyoutVulnerabilityIndex @@ -298,10 +303,7 @@ const VulnerabilitiesDataGrid = ({ className={cx({ [styles.gridStyle]: true }, { [styles.highlightStyle]: showHighlight })} aria-label={VULNERABILITIES} columns={columns} - columnVisibility={{ - visibleColumns: columns.map(({ id }) => id), - setVisibleColumns: () => {}, - }} + columnVisibility={{ visibleColumns, setVisibleColumns }} schemaDetectors={[severitySchemaConfig]} rowCount={limitedTotalItemCount} toolbarVisibility={{ @@ -311,7 +313,7 @@ const VulnerabilitiesDataGrid = ({ showFullScreenSelector: false, additionalControls: { left: { - prepend: ( + append: ( <> {i18n.translate('xpack.csp.vulnerabilities.totalVulnerabilities', { @@ -451,7 +453,10 @@ const VulnerabilitiesContent = ({ dataView }: { dataView: DataView }) => { }; export const Vulnerabilities = () => { - const { data, isLoading, error } = useFilteredDataView(LATEST_VULNERABILITIES_INDEX_PATTERN); + const { data, isLoading, error } = useLatestFindingsDataView( + LATEST_VULNERABILITIES_INDEX_PATTERN + ); + const getSetupStatus = useCspSetupStatusApi(); if (getSetupStatus?.data?.vuln_mgmt?.status !== 'indexed') return ; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilties.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilties.test.tsx index 6eab4ba03f682..24c12405c1436 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilties.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilties.test.tsx @@ -6,16 +6,14 @@ */ import React from 'react'; import Chance from 'chance'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { Vulnerabilities } from './vulnerabilities'; import { + CSP_LATEST_FINDINGS_DATA_VIEW, LATEST_VULNERABILITIES_INDEX_DEFAULT_NS, VULN_MGMT_POLICY_TEMPLATE, } from '../../../common/constants'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; +import { useLatestFindingsDataView } from '../../common/api/use_latest_findings_data_view'; import { useSubscriptionStatus } from '../../common/hooks/use_subscription_status'; import { createReactQueryResponse } from '../../test/fixtures/react_query'; import { useCISIntegrationPoliciesLink } from '../../common/navigation/use_navigate_to_cis_integration_policies'; @@ -26,11 +24,9 @@ import { } from '../../components/test_subjects'; import { render } from '@testing-library/react'; import { expectIdsInDoc } from '../../test/utils'; -import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; -import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import { TestProvider } from '../../test/test_provider'; -import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; import { useLicenseManagementLocatorApi } from '../../common/api/use_license_management_locator_api'; +import { createStubDataView } from '@kbn/data-views-plugin/common/stubs'; jest.mock('../../common/api/use_latest_findings_data_view'); jest.mock('../../common/api/use_setup_status_api'); @@ -57,21 +53,20 @@ beforeEach(() => { data: true, }) ); + + (useLatestFindingsDataView as jest.Mock).mockReturnValue({ + status: 'success', + data: createStubDataView({ + spec: { + id: CSP_LATEST_FINDINGS_DATA_VIEW, + }, + }), + }); }); const renderVulnerabilitiesPage = () => { render( - + ); diff --git a/x-pack/plugins/cloud_security_posture/public/plugin.tsx b/x-pack/plugins/cloud_security_posture/public/plugin.tsx index 32e5ee577e40e..f215841b30cea 100755 --- a/x-pack/plugins/cloud_security_posture/public/plugin.tsx +++ b/x-pack/plugins/cloud_security_posture/public/plugin.tsx @@ -7,8 +7,8 @@ import React, { lazy, Suspense } from 'react'; import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; -import { SubscriptionTrackingProvider } from '@kbn/subscription-tracking'; import { CspLoadingState } from './components/csp_loading_state'; import type { CspRouterProps } from './application/csp_router'; import type { @@ -68,20 +68,17 @@ export class CspPlugin Component: LazyCspCustomAssets, }); + const storage = new Storage(localStorage); + // Keep as constant to prevent remounts https://github.com/elastic/kibana/issues/146773 const App = (props: CspRouterProps) => ( - + - -
    - - - -
    -
    +
    + + + +
    ); diff --git a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx index 57fc2935e5708..3f89c934e5dd4 100755 --- a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx +++ b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx @@ -21,11 +21,13 @@ import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; +import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; +import { sessionStorageMock } from '@kbn/core-http-server-mocks'; import type { CspClientPluginStartDeps } from '../types'; interface CspAppDeps { core: CoreStart; - deps: CspClientPluginStartDeps; + deps: Partial; params: AppMountParameters; } @@ -38,6 +40,8 @@ export const TestProvider: React.FC> = ({ discover: discoverPluginMock.createStartContract(), fleet: fleetMock.createStartMock(), licensing: licensingMock.createStart(), + uiActions: uiActionsPluginMock.createStartContract(), + storage: sessionStorageMock.create(), }, params = coreMock.createAppMountParameters(), children, diff --git a/x-pack/plugins/cloud_security_posture/public/types.ts b/x-pack/plugins/cloud_security_posture/public/types.ts index c888496a0b157..6766067df67e0 100755 --- a/x-pack/plugins/cloud_security_posture/public/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/types.ts @@ -7,9 +7,16 @@ import type { CloudSetup } from '@kbn/cloud-plugin/public'; import type { LicensingPluginStart } from '@kbn/licensing-plugin/public'; +import { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; import type { ComponentType, ReactNode } from 'react'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import { UiActionsSetup, UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; +import { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { ToastsStart } from '@kbn/core/public'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; + import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; import type { DiscoverStart } from '@kbn/discover-plugin/public'; import type { FleetSetup, FleetStart } from '@kbn/fleet-plugin/public'; @@ -40,6 +47,7 @@ export interface CspClientPluginSetupDeps { data: DataPublicPluginSetup; fleet: FleetSetup; cloud: CloudSetup; + uiActions: UiActionsSetup; // optional usageCollection?: UsageCollectionSetup; } @@ -47,12 +55,19 @@ export interface CspClientPluginSetupDeps { export interface CspClientPluginStartDeps { // required data: DataPublicPluginStart; + dataViews: DataViewsServicePublic; + dataViewFieldEditor: IndexPatternFieldEditorStart; unifiedSearch: UnifiedSearchPublicPluginStart; + uiActions: UiActionsStart; + fieldFormats: FieldFormatsStart; + toastNotifications: ToastsStart; charts: ChartsPluginStart; discover: DiscoverStart; fleet: FleetStart; licensing: LicensingPluginStart; share: SharePluginStart; + storage: Storage; + // optional usageCollection?: UsageCollectionStart; } diff --git a/x-pack/plugins/cloud_security_posture/tsconfig.json b/x-pack/plugins/cloud_security_posture/tsconfig.json index 307394e41d84b..113ddcb92202a 100755 --- a/x-pack/plugins/cloud_security_posture/tsconfig.json +++ b/x-pack/plugins/cloud_security_posture/tsconfig.json @@ -50,7 +50,17 @@ "@kbn/share-plugin", "@kbn/core-http-server", "@kbn/core-http-browser", - "@kbn/subscription-tracking" + "@kbn/subscription-tracking", + "@kbn/discover-utils", + "@kbn/unified-data-table", + "@kbn/cell-actions", + "@kbn/unified-field-list", + "@kbn/unified-doc-viewer", + "@kbn/kibana-utils-plugin", + "@kbn/ui-actions-plugin", + "@kbn/core-http-server-mocks", + "@kbn/field-formats-plugin", + "@kbn/data-view-field-editor-plugin" ], "exclude": ["target/**/*"] } diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts index bd3a43951bf25..49f4ab0a6d12f 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts @@ -55,13 +55,7 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider refresh: true, }), ]), - add: async < - T extends { - '@timestamp'?: string; - } - >( - findingsMock: T[] - ) => { + add: async (findingsMock: Array>) => { await Promise.all([ ...findingsMock.map((finding) => es.index({ @@ -124,6 +118,110 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider }, }); + const createDataTableObject = (tableTestSubject: string) => ({ + getElement() { + return testSubjects.find(tableTestSubject); + }, + + async getHeaders() { + const element = await this.getElement(); + return await element.findAllByCssSelector('.euiDataGridHeader'); + }, + + async getColumnIndex(columnName: string) { + const element = await this.getElement(); + const columnIndex = await ( + await element.findByCssSelector(`[data-gridcell-column-id="${columnName}"]`) + ).getAttribute('data-gridcell-column-index'); + expect(columnIndex).to.be.greaterThan(-1); + return columnIndex; + }, + + async getColumnHeaderCell(columnName: string) { + const headers = await this.getHeaders(); + const headerIndexes = await Promise.all(headers.map((header) => header.getVisibleText())); + const columnIndex = headerIndexes.findIndex((i) => i === columnName); + return headers[columnIndex]; + }, + + async getRowsCount() { + const element = await this.getElement(); + const rows = await element.findAllByCssSelector('.euiDataGridRow'); + return rows.length; + }, + + async getFindingsCount(type: 'passed' | 'failed') { + const element = await this.getElement(); + const items = await element.findAllByCssSelector(`span[data-test-subj="${type}_finding"]`); + return items.length; + }, + + async getRowIndexForValue(columnName: string, value: string) { + const values = await this.getColumnValues(columnName); + const rowIndex = values.indexOf(value); + expect(rowIndex).to.be.greaterThan(-1); + return rowIndex; + }, + + async getFilterElementButton(rowIndex: number, columnIndex: number | string, negated = false) { + const tableElement = await this.getElement(); + const button = negated ? 'filterOutButton' : 'filterForButton'; + const selector = `[data-gridcell-row-index="${rowIndex}"][data-gridcell-column-index="${columnIndex}"] button[data-test-subj="${button}"]`; + return tableElement.findByCssSelector(selector); + }, + + async addCellFilter(columnName: string, cellValue: string, negated = false) { + const columnIndex = await this.getColumnIndex(columnName); + const rowIndex = await this.getRowIndexForValue(columnName, cellValue); + const filterElement = await this.getFilterElementButton(rowIndex, columnIndex, negated); + await filterElement.click(); + }, + + async getColumnValues(columnName: string) { + const tableElement = await this.getElement(); + const selector = `.euiDataGridRowCell[data-gridcell-column-id="${columnName}"]`; + const columnCells = await tableElement.findAllByCssSelector(selector); + + return await Promise.all(columnCells.map((cell) => cell.getVisibleText())); + }, + + async hasColumnValue(columnName: string, value: string) { + const values = await this.getColumnValues(columnName); + return values.includes(value); + }, + + async toggleColumnSort(columnName: string, direction: 'asc' | 'desc') { + const currentSorting = await testSubjects.find('dataGridColumnSortingButton'); + const currentSortingText = await currentSorting.getVisibleText(); + await currentSorting.click(); + + if (currentSortingText !== 'Sort fields') { + const clearSortButton = await testSubjects.find('dataGridColumnSortingClearButton'); + await clearSortButton.click(); + } + + const selectSortFieldButton = await testSubjects.find('dataGridColumnSortingSelectionButton'); + await selectSortFieldButton.click(); + + const sortField = await testSubjects.find( + `dataGridColumnSortingPopoverColumnSelection-${columnName}` + ); + await sortField.click(); + + const sortDirection = await testSubjects.find( + `euiDataGridColumnSorting-sortColumn-${columnName}-${direction}` + ); + await sortDirection.click(); + await currentSorting.click(); + }, + + async openFlyoutAt(rowIndex: number) { + const table = await this.getElement(); + const flyoutButton = await table.findAllByTestSubject('docTableExpandToggleColumn'); + await flyoutButton[rowIndex].click(); + }, + }); + const createTableObject = (tableTestSubject: string) => ({ getElement() { return testSubjects.find(tableTestSubject); @@ -255,7 +353,7 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider ); }; - const latestFindingsTable = createTableObject('latest_findings_table'); + const latestFindingsTable = createDataTableObject('latest_findings_table'); const resourceFindingsTable = createTableObject('resource_findings_table'); const findingsByResourceTable = { ...createTableObject('findings_by_resource_table'), diff --git a/x-pack/test/cloud_security_posture_functional/pages/findings.ts b/x-pack/test/cloud_security_posture_functional/pages/findings.ts index 5caedd4a6e7f2..2dbee8496998a 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/findings.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/findings.ts @@ -122,6 +122,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await findings.index.add(data); await findings.navigateToLatestFindingsPage(); + await retry.waitFor( 'Findings table to be loaded', async () => (await latestFindingsTable.getRowsCount()) === data.length @@ -135,10 +136,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('SearchBar', () => { it('add filter', async () => { - await filterBar.addFilter({ field: 'rule.name', operation: 'is', value: ruleName1 }); + // Filter bar uses the field's customLabel in the DataView + await filterBar.addFilter({ field: 'Rule Name', operation: 'is', value: ruleName1 }); expect(await filterBar.hasFilter('rule.name', ruleName1)).to.be(true); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName1)).to.be(true); + expect(await latestFindingsTable.hasColumnValue('rule.name', ruleName1)).to.be(true); }); it('remove filter', async () => { @@ -152,8 +154,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.setQuery(ruleName1); await queryBar.submitQuery(); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName1)).to.be(true); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName2)).to.be(false); + expect(await latestFindingsTable.hasColumnValue('rule.name', ruleName1)).to.be(true); + expect(await latestFindingsTable.hasColumnValue('rule.name', ruleName2)).to.be(false); await queryBar.setQuery(''); await queryBar.submitQuery(); @@ -162,25 +164,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('Table Filters', () => { - it('add cell value filter', async () => { - await latestFindingsTable.addCellFilter('Rule Name', ruleName1, false); - - expect(await filterBar.hasFilter('rule.name', ruleName1)).to.be(true); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName1)).to.be(true); - }); - - it('add negated cell value filter', async () => { - await latestFindingsTable.addCellFilter('Rule Name', ruleName1, true); - - expect(await filterBar.hasFilter('rule.name', ruleName1, true, false, true)).to.be(true); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName1)).to.be(false); - expect(await latestFindingsTable.hasColumnValue('Rule Name', ruleName2)).to.be(true); - - await filterBar.removeFilter('rule.name'); - }); - }); - describe('Table Sort', () => { type SortingMethod = (a: string, b: string) => number; type SortDirection = 'asc' | 'desc'; @@ -195,14 +178,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('sorts by a column, should be case sensitive/insensitive depending on the column', async () => { type TestCase = [string, SortDirection, SortingMethod]; const testCases: TestCase[] = [ - ['CIS Section', 'asc', sortByAlphabeticalOrder], - ['CIS Section', 'desc', sortByAlphabeticalOrder], - ['Resource ID', 'asc', compareStringByLexicographicOrder], - ['Resource ID', 'desc', compareStringByLexicographicOrder], - ['Resource Name', 'asc', sortByAlphabeticalOrder], - ['Resource Name', 'desc', sortByAlphabeticalOrder], - ['Resource Type', 'asc', sortByAlphabeticalOrder], - ['Resource Type', 'desc', sortByAlphabeticalOrder], + ['rule.section', 'asc', sortByAlphabeticalOrder], + ['rule.section', 'desc', sortByAlphabeticalOrder], + ['resource.id', 'asc', compareStringByLexicographicOrder], + ['resource.id', 'desc', compareStringByLexicographicOrder], + ['resource.name', 'asc', sortByAlphabeticalOrder], + ['resource.name', 'desc', sortByAlphabeticalOrder], + ['resource.sub_type', 'asc', sortByAlphabeticalOrder], + ['resource.sub_type', 'desc', sortByAlphabeticalOrder], ]; for (const [columnName, dir, sortingMethod] of testCases) { await latestFindingsTable.toggleColumnSort(columnName, dir); From 0b4fe3f12365f2f03532b0e2a767e05ecef6e691 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Oct 2023 01:14:24 -0400 Subject: [PATCH 111/170] [api-docs] 2023-10-05 Daily api_docs build (#168057) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/481 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.devdocs.json | 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.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.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- 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.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 14 ++ api_docs/discover.mdx | 4 +- 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.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.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- 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.devdocs.json | 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.devdocs.json | 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_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_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 +- ..._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_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_code_editor_mocks.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 +- ...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 | 20 ++ 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 +- 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 +- ...cts_migration_server_internal.devdocs.json | 4 +- ...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 +- ...e_test_helpers_model_versions.devdocs.json | 175 +++++++++++++++--- .../kbn_core_test_helpers_model_versions.mdx | 4 +- ...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_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 | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- 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_assistant.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.mdx | 2 +- 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_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_generate_csv_types.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.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.devdocs.json | 95 +++++++++- api_docs/kbn_ml_agg_utils.mdx | 7 +- 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_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 +- 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 +- ..._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_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 | 162 +++++++++++++++- api_docs/kbn_search_connectors.mdx | 4 +- api_docs/kbn_search_response_warnings.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 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.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_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_subscription_tracking.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.devdocs.json | 4 +- 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_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_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 +- ...n_visualization_ui_components.devdocs.json | 18 +- api_docs/kbn_visualization_ui_components.mdx | 4 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.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.mdx | 2 +- 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.devdocs.json | 40 +++- api_docs/metrics_data_access.mdx | 7 +- api_docs/ml.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 +- api_docs/observability_log_explorer.mdx | 2 +- 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 | 20 +- 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.devdocs.json | 64 +++++++ api_docs/security_solution.mdx | 4 +- 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.mdx | 2 +- 610 files changed, 1185 insertions(+), 649 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 7865515c81381..6f38f4750c370 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-10-04 +date: 2023-10-05 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 4b7a5895c09d6..62e61a17a8127 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index f99157d9b1296..45a0c747b090c 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 8f74f7e7bb42b..375db4c7efb28 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-10-04 +date: 2023-10-05 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 00df9f3ae880c..1ad5f00314d37 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-10-04 +date: 2023-10-05 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 303aff25799ab..4a99345030314 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.devdocs.json b/api_docs/asset_manager.devdocs.json index 31183ec6acb0b..fe7b5db2d4104 100644 --- a/api_docs/asset_manager.devdocs.json +++ b/api_docs/asset_manager.devdocs.json @@ -95,7 +95,7 @@ "label": "AssetManagerConfig", "description": [], "signature": [ - "{ readonly alphaEnabled?: boolean | undefined; readonly sourceIndices: Readonly<{} & { logs: string; }>; readonly lockedSource: \"assets\" | \"signals\"; }" + "{ readonly alphaEnabled?: boolean | undefined; readonly sourceIndices: Readonly<{} & { logs: string; }>; }" ], "path": "x-pack/plugins/asset_manager/common/config.ts", "deprecated": false, diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 5c4a95c5c063a..f93c3d9cbd16f 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-10-04 +date: 2023-10-05 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 2b20563d9f23d..48e125fbccdeb 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-10-04 +date: 2023-10-05 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 82a2760aa1990..6bc52cc600dcc 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-10-04 +date: 2023-10-05 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 756c31a594314..b0588be276955 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-10-04 +date: 2023-10-05 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 a41b8226a310d..23cfac93362c3 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index df951a523d01c..41f312af9ef34 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-10-04 +date: 2023-10-05 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 059e6302d2a85..ec0779772c594 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-10-04 +date: 2023-10-05 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 e7ac64c0a45b7..151541280cb24 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-10-04 +date: 2023-10-05 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 41275f4aba27e..c6cdbceb371ce 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-10-04 +date: 2023-10-05 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 2d3eb40d33976..3fba9ebc078b7 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-10-04 +date: 2023-10-05 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 6d31a18297b04..81c3f08703d1b 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-10-04 +date: 2023-10-05 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 aa95d1e752b65..400d7600698f5 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-10-04 +date: 2023-10-05 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 ce5120e848d2c..e3e00bde9cce8 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-10-04 +date: 2023-10-05 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 eff0f089f8eb7..ab954e1952a3d 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-10-04 +date: 2023-10-05 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 35ee99b6b5e7c..e33b409dd942e 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-10-04 +date: 2023-10-05 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 088e364318f89..6395f79512bfd 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-10-04 +date: 2023-10-05 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 412b45bf97d74..b3ec595bd5ed5 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 3709c8ab988c6..357c16cb56e68 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 0afd41cff92a8..27611ed0ab83f 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index f9460e94e9899..cdbdf5210738f 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 03846af7220a7..0cd38215a7b3d 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-10-04 +date: 2023-10-05 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 5744ba4b8bbf2..9d632dc980631 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-10-04 +date: 2023-10-05 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 952e15de74e11..b2d9512eeb913 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 93b0f65f9101b..c730bd76fe102 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-10-04 +date: 2023-10-05 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 e5d3358eb677f..a17a9bff9c842 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index e1a1b3a004005..9bed14c9c66f5 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 9bc8d03a4ce6e..337dd8f32e5d7 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index b9d10871a4d39..c2b26c90b13dc 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 238ae40d31a40..12e87454796b7 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-10-04 +date: 2023-10-05 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 f9574171a342d..e47c4c62d4bd1 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -996,6 +996,20 @@ "path": "src/plugins/discover/public/customizations/customization_types/search_bar_customization.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "discover", + "id": "def-public.SearchBarCustomization.hideDataViewPicker", + "type": "CompoundType", + "tags": [], + "label": "hideDataViewPicker", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/discover/public/customizations/customization_types/search_bar_customization.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 068620922588d..7b723a22751ee 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.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 | |-------------------|-----------|------------------------|-----------------| -| 117 | 0 | 75 | 18 | +| 118 | 0 | 76 | 18 | ## Client diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 7390866525e15..bf0b8f6018575 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-10-04 +date: 2023-10-05 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 a99c2f8eb1411..7ada82cd8f7fd 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-10-04 +date: 2023-10-05 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 2a80ba9cd8783..e8c03aef24bab 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-10-04 +date: 2023-10-05 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 00deb995b5c95..a867f4a6b681a 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-10-04 +date: 2023-10-05 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 f2ff6b7d655d9..e7d32b061e693 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-10-04 +date: 2023-10-05 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 92df92379c1a4..8e86a0f6b2a8c 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-10-04 +date: 2023-10-05 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 8ba7beec0ce61..59a1071d48f01 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-10-04 +date: 2023-10-05 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 222295607199b..82e6b036dc9dd 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 9cebdbcb838fd..aac8a4729a54a 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-10-04 +date: 2023-10-05 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 1d4b555eb678d..71fa9c2cb3e23 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-10-04 +date: 2023-10-05 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 8c6c6cd16ff30..63ec7aa9b90aa 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-10-04 +date: 2023-10-05 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 37d670daa555d..aea0543bcfb18 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-10-04 +date: 2023-10-05 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 1b9a91b390ed8..2e2e63c929a10 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 8226afed10eb6..201f0fca7814d 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 81a0266817e70..6d7df68181c89 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 7c7bff6beab7f..c143334202636 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 1533707c0d55c..9958f32c89f7f 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 453e5dccca4da..d4a660f1251fd 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 8256b7a4d25fe..641f4c3934fae 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 0bcd2e1c069e1..b114dfe15ba98 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 08fdea666da30..1fb3847e3e28a 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-10-04 +date: 2023-10-05 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 2ad70d81f0db3..0ffd0ab5b20b3 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 5506a938d0ff2..ab60436810980 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index a6aaa2f548e18..ed065710dd663 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index e5c6384f99c4c..5d2481bd9fbd0 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 7b70d059e6285..742130e024027 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-10-04 +date: 2023-10-05 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 1eea9336254fb..d9a205c80f7b1 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-10-04 +date: 2023-10-05 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 a7f8564a4da2b..73ca6c086993b 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-10-04 +date: 2023-10-05 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 574406b54f72e..1f5bd1b40008a 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-10-04 +date: 2023-10-05 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 29e2a7e7ee869..321afdb0e5d9b 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-10-04 +date: 2023-10-05 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 babd1ad4101ad..e6adf15f7f8f4 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 8258e5d9a5543..b39182e1ef311 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -23960,7 +23960,7 @@ "section": "def-common.RegistryPackage", "text": "RegistryPackage" }, - ", \"assets\" | \"internal\" | \"elasticsearch\" | \"readme\" | \"data_streams\">" + ", \"internal\" | \"elasticsearch\" | \"assets\" | \"readme\" | \"data_streams\">" ], "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 848e80c4294f3..c5dd2f263374c 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-10-04 +date: 2023-10-05 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 3b4f019aa6cee..ac8f9ff094cdc 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-10-04 +date: 2023-10-05 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 1362b9f2bcadd..ef9deafbddd29 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-10-04 +date: 2023-10-05 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 c3ac645b73385..1056dff08a2c1 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-10-04 +date: 2023-10-05 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 660b526285c73..2f7b590170334 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-10-04 +date: 2023-10-05 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 2d60d18aed9be..7e1019b337845 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-10-04 +date: 2023-10-05 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 a8de454418166..c2db70472f312 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.devdocs.json b/api_docs/infra.devdocs.json index a47357d002cdd..a4d50b94d6cf1 100644 --- a/api_docs/infra.devdocs.json +++ b/api_docs/infra.devdocs.json @@ -491,7 +491,7 @@ "label": "featureFlags", "description": [], "signature": [ - "{ metricsExplorerEnabled: boolean; }" + "{ metricsExplorerEnabled: boolean; customThresholdAlertsEnabled: boolean; osqueryEnabled: boolean; }" ], "path": "x-pack/plugins/infra/common/plugin_config_types.ts", "deprecated": false, diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 59449d9c99d55..6427a90ebbc58 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-10-04 +date: 2023-10-05 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 dc3ec65a000d3..b541a5b8d4c33 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-10-04 +date: 2023-10-05 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 b63a05e5cd721..99ff7d269dc85 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-10-04 +date: 2023-10-05 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 eddc7c3011213..4917364bc05f9 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index c2b12c2585d79..0ef57ce20b790 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-10-04 +date: 2023-10-05 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 17395efff2aa7..2387a509f4fe1 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 0b109ce3d397e..d57d9696b721d 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-10-04 +date: 2023-10-05 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 b36a24fae1c6b..d82263e97fd41 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 700b5e310e784..1033c76b41ce8 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 629f986829a63..4fb927e45502f 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-10-04 +date: 2023-10-05 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 f4ce75294b55c..6444138248dd3 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-10-04 +date: 2023-10-05 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 e4cd3e8f0b593..05af4848e87ed 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 050ac31dab502..b0c8c0b8f1658 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 46c29a791c795..a0c4704aecb96 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-10-04 +date: 2023-10-05 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 da46224b109bf..40b9a14880538 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-10-04 +date: 2023-10-05 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 7645fcf4d2d94..f845884f7a976 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-10-04 +date: 2023-10-05 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 d4461115614b9..474872eeedcf7 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-10-04 +date: 2023-10-05 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 a426de3247da4..ccec678d7b8a8 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-10-04 +date: 2023-10-05 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 311ce4475a935..d33ce0743770e 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-10-04 +date: 2023-10-05 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 838e32eb9a262..ef9a637cd7e99 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-10-04 +date: 2023-10-05 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 97a176d006159..71609a7dd9023 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 eae91b473cb53..95200ba612ed9 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index e71bfdca41094..0be63073d4e4e 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-10-04 +date: 2023-10-05 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 f510d835d4e32..e72a6ed12ef59 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-10-04 +date: 2023-10-05 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 390edf689fbbd..0a1dccac606de 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-10-04 +date: 2023-10-05 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 3cc18b1c2d517..966ecceb14744 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-10-04 +date: 2023-10-05 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 7c0c354823b90..11af9568df46f 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-10-04 +date: 2023-10-05 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 8eb28b43c63b8..4d2cff56ec56c 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-10-04 +date: 2023-10-05 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 1ce5c5f2274d9..1e17bd8ceaad7 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-10-04 +date: 2023-10-05 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 7da38d1ded8fa..3833acc88b1ea 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-10-04 +date: 2023-10-05 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 7f2d3c5a5c82b..49fda7ff46b6b 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index c9e201e7e662c..7e556d9cfeff7 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 25b484ce3e5f0..aaec357dc74bc 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-10-04 +date: 2023-10-05 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 adfb1aa3fca7f..8884261229084 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-10-04 +date: 2023-10-05 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 355fa2434225f..838a8060031df 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 abe297cfee59e..ee7d74430cde9 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-10-04 +date: 2023-10-05 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 1fe4613e66472..8c9a07e5aea70 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-10-04 +date: 2023-10-05 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 efe1b163da05e..c91194e83b2e7 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-10-04 +date: 2023-10-05 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 88878002f7136..5d1622ab81373 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index ad683c3f39712..957316c0b4de7 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-10-04 +date: 2023-10-05 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 3cbce545bae6a..5248175b4002c 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 96fc9b553ec79..8f8a8507f493a 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 8d03118fe4acc..2fb133a928f60 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 34a4579235f35..430be0a19e4c4 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 1f9f99069c43c..c58341d7c01a4 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-10-04 +date: 2023-10-05 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 c9678edd1a781..31b564ce515c1 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 087da7b66a7fe..068540a191540 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 bb23b12e8ea9d..eb2217e48ee25 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 281ce96184988..20b81f7e9c992 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 6cebcbf3745d0..1011f8337a3fb 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 cc6cd6f93f082..dd0b23b45c50a 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-10-04 +date: 2023-10-05 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 d73e4c10578b1..0aec4d912f74f 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 9c1cdf6c52abc..50f3366a6dd88 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 f615c70a4ad85..4aad51eda3015 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 7c630ed3543d4..098fe8161da81 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 c86578d403d06..5415b79bf96c1 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-10-04 +date: 2023-10-05 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 8ae992ea3a230..832c1e8740ba4 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 fe17576adfb01..dbdb621522933 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 7f19981f3d57f..7fa339bb891b9 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 c9f49f6962342..05639f10e559e 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-10-04 +date: 2023-10-05 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 664bb01c9b9f9..7d5bc7cd6662c 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-10-04 +date: 2023-10-05 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 bf7d1d0a26721..d7016d0774650 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 1ed5d87c0543a..18e38ab4aadd5 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 b6204480a8099..8d4618cf68c98 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 969ca5a6d49c2..8e55b4f3d2568 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 7289c0475cfdf..3f65de152a32e 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 57907642925c0..d94792d57296d 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 ff9c078288354..e2059726c0120 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 83fa609336574..eb02d1102ea20 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-10-04 +date: 2023-10-05 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 98b99cfc39b13..b3c2614d7394c 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-10-04 +date: 2023-10-05 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 d77dcbb152441..35026c90a7235 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 957b6753dc31a..8eae6532f6b7d 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 dd9b8abf41be7..2ab82ce6be132 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 ac7571da0b2db..39837c5e196cd 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 5efb83f3307bd..bc0e35bb99b8f 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 0e9c94a9269c3..02534b47faa35 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-10-04 +date: 2023-10-05 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 7920bd0900222..758a5b640777e 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-10-04 +date: 2023-10-05 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 8a772cadb6f33..a00dbd0e4728c 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 342cbf06052ce..07857d632a3c3 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 15d00fa8a9c0a..a8506aac18ce7 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 a270167e53110..c5d3320f76f16 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 a7e257b21e686..690d7039dbf1e 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-10-04 +date: 2023-10-05 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 527ec2f5df9fb..5ea76e4f20a78 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 be7963a1bb8eb..2b4e109764a96 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 21a60d25046fd..52ab3911b38c7 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 3af0a99784b75..fb82fdb9c14f2 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-10-04 +date: 2023-10-05 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 f49735b9b263a..95412bf8094a0 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 0f1604993ebbb..e2e22130eebf8 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 bbe87b748077d..cbf1ed558d71f 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 3f20471c1931d..2b71b55a9c39a 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 068ce3276dcaa..0073734f778cd 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 b7d1d6977cc0e..76107f687586c 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 557c3d83a1664..fad72d774fa1d 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 526d856120728..a55c9cdc19151 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-10-04 +date: 2023-10-05 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 fb4b13e04f778..65d0f937e24ca 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-10-04 +date: 2023-10-05 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 416305d3304c1..af89bc642f963 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 82cb2abc519aa..540da6ffec729 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 b77b9ec5b5bf9..1365a47d9f6d0 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 d418bd45971be..22cd0d1831953 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 4d8aed97b127a..8e2a0c3e80bcd 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 22aca6a0bab37..b278a536b9e43 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 8964716d4d7d1..c0a2a2829091b 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 513e082be4958..bca33163bc4b3 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-10-04 +date: 2023-10-05 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 fec6873ab6b71..01a11fda9a465 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 ef4148d762d89..fb98ca8c993fd 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-10-04 +date: 2023-10-05 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 27bf92d460a94..dff0d5b03389b 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-10-04 +date: 2023-10-05 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 ac32abd746c73..07aa5ede2df5a 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 4f9ade14cffc4..c7f6e8e3ca66b 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 2a590a816ee79..6ee80febebfaa 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 9985d442babd6..2779412e95f4e 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 52c4d79d9fc03..32c3c6d9ccab3 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4359,6 +4359,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, { "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/app.ts" @@ -6729,6 +6733,22 @@ "plugin": "searchprofiler", "path": "x-pack/plugins/searchprofiler/server/routes/profile.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, { "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/repositories.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index c90bf8799f663..01d821c769454 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-10-04 +date: 2023-10-05 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 532b7a6bf1ca7..b89fd8d57349d 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 fe959d8f5d1a1..b0f24f106e524 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 12444c9c0b8a4..536385612056e 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 1bcd6ea14bd11..c5314c7f4b767 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 1b168c74b8b58..2ef5d47d8d414 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-10-04 +date: 2023-10-05 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 db79b11229bb4..ed0407b2c5c05 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 b28d89e823714..ab6a03200332f 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 bda20eb073852..9f82b2b20cbe9 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 152ec865a023c..a597d70c42136 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 0e648f41445e7..56132eb7ebf08 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 92043c6e048f4..f591439487352 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 d80f89e60458f..e981043f76381 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 5f6874f0f947e..a56b618eb1ff7 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-10-04 +date: 2023-10-05 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 e09c0816da08c..169f80f9d0d84 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 56982d0b02411..961348363216d 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 7b210b2e1c977..57ee79118446c 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 8faee45bb3cb1..21c8604c7e747 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-10-04 +date: 2023-10-05 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 c9066c2d388bc..d1eefe15df755 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 f8741125c30fa..48bcc0f6954f3 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 eaf4235e55930..5572bbc51cb90 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 377853939d053..db578a11b9c9e 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 a1ed8bca0727b..abadcd967ddda 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-10-04 +date: 2023-10-05 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 c9791e4c7292f..48eefb7432b90 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 ca5fdeb6a2128..69558ff08e76b 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 1bbbf0ffa6665..c6839be6e066b 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 c2cc20277c448..03765ed009b72 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-10-04 +date: 2023-10-05 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 18aa7bd340615..1ffb20b80354d 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 c8ca73f4c2e60..524c32035ffdd 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 260f7af02d28d..d5c8993562431 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 20dc5d68a4a93..f5005f0543cc2 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 7af7dbcf72952..b3e00ec4f6d0c 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 73345e735c135..7a7a03b924a3e 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 270b1c8f60f01..383d1dcd793fe 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 9acd2c768be29..f921c60e38969 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 bc66a8dd4177e..ac3a13a4937a7 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 83ba09196d96f..e66b192783e4b 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index db4d1acf2e5cd..845be339ef70b 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-10-04 +date: 2023-10-05 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 a04c45abece2b..57b7b05efcf20 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 7593a5b6f3d98..5ae654662f351 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-10-04 +date: 2023-10-05 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 a2740a34940a3..74c7b3b742b47 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 f1f2d95bf2531..d36fdcdb89314 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 50343f33cf49e..8e0d9dd8a57c1 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 a339dd100da34..b9e1e6f8544f2 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 58a9170317312..2f9ffaf93689d 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 151f4b0660106..e8b11e82f489f 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 b102b1093b222..b4d8a6d291439 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-10-04 +date: 2023-10-05 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 32dd08ca19744..b4246c1223a41 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 21ec40e2563c0..39bb1d9655e14 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 23df10d67f7e4..d99f30e17f372 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 7c91d9670245b..13ec427c95819 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 9880adee6e781..34ac03aa40895 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 8d5ce601b5d22..c535679266395 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 c21a4af02a9f4..119e9ea59ab0f 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-10-04 +date: 2023-10-05 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 bf157cd79ce30..aac6bc7a98f3d 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 6ba2e53ec11c5..d31385ab8f3ca 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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.devdocs.json b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json index 4706f5a6e2e38..fa854a0dea28f 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json @@ -158,7 +158,7 @@ "section": "def-common.SavedObjectUnsanitizedDoc", "text": "SavedObjectUnsanitizedDoc" }, - ", { allowDowngrade }?: ", + ", { allowDowngrade, targetTypeVersion }?: ", "DocumentMigrateOptions", ") => ", { @@ -201,7 +201,7 @@ "id": "def-common.DocumentMigrator.migrate.$2", "type": "Object", "tags": [], - "label": "{ allowDowngrade = false }", + "label": "{ allowDowngrade = false, targetTypeVersion }", "description": [], "signature": [ "DocumentMigrateOptions" 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 8d8fb5a9f1b8a..6e4d87fdd9d22 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 3ab30ff55eeed..7379dda4b84e5 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 3efc97ac9b050..2fd116614dfe9 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-10-04 +date: 2023-10-05 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 3cfcb0706e2ad..92ec92c262c40 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 0408a171e7978..f4e2572db868b 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 7f179227ab375..772969a84e74b 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-10-04 +date: 2023-10-05 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 e9b61ff7b99f7..6494e022dd491 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-10-04 +date: 2023-10-05 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 e1faad06d6148..d50b5512a30cb 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 3ed39cb6c294c..70abf452bdc74 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-10-04 +date: 2023-10-05 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 3e8b3cb6b2ed0..8cc082349aa27 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 504cb4a1ed871..a2a984fd4b97a 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 310b482ee0d34..9e8e90e9636c4 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-10-04 +date: 2023-10-05 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 3380018fdfba3..e3e2aeec88b46 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 1a71653a78e28..adb9782ff0d86 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-10-04 +date: 2023-10-05 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.devdocs.json b/api_docs/kbn_core_test_helpers_model_versions.devdocs.json index 4f935324525fc..7e2f256a95f89 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.devdocs.json +++ b/api_docs/kbn_core_test_helpers_model_versions.devdocs.json @@ -38,12 +38,81 @@ "text": "ModelVersionTestBed" } ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts", "deprecated": false, "trackAdoption": false, "children": [], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.createModelVersionTestMigrator", + "type": "Function", + "tags": [], + "label": "createModelVersionTestMigrator", + "description": [ + "\nCreate a {@link ModelVersionTestMigrator | test migrator} that can be used\nto test model version changes between versions.\n" + ], + "signature": [ + "({ type, }: { type: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsType", + "text": "SavedObjectsType" + }, + "; }) => ", + { + "pluginId": "@kbn/core-test-helpers-model-versions", + "scope": "common", + "docId": "kibKbnCoreTestHelpersModelVersionsPluginApi", + "section": "def-common.ModelVersionTestMigrator", + "text": "ModelVersionTestMigrator" + } + ], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.createModelVersionTestMigrator.$1", + "type": "Object", + "tags": [], + "label": "{\n type,\n}", + "description": [], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.createModelVersionTestMigrator.$1.type", + "type": "Object", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsType", + "text": "SavedObjectsType" + }, + "" + ], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -56,7 +125,7 @@ "description": [ "\nA testbed that can be used for model version integration tests.\n" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -72,7 +141,7 @@ "signature": [ "() => Promise" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -90,7 +159,7 @@ "signature": [ "() => Promise" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -127,7 +196,7 @@ }, ">" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -147,7 +216,7 @@ "text": "ModelVersionTestkitOptions" } ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -167,7 +236,7 @@ "description": [ "\nTestkit composed of various services that can be used to run the\nmodel version integration tests.\n\nMostly composed of the two `repositoryBefore` and `repositoryAfter` repositories\nthat can be used to interact with different versions of the SO types.\n" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -183,7 +252,7 @@ "signature": [ "default" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -205,7 +274,7 @@ "text": "ISavedObjectsRepository" } ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -227,7 +296,7 @@ "text": "ISavedObjectsRepository" } ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -243,7 +312,7 @@ "signature": [ "() => Promise" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -261,7 +330,7 @@ "description": [ "\nOptions used to create a {@link ModelVersionTestKit} via {@link ModelVersionTestBed#prepareTestKit}\n" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -284,7 +353,7 @@ }, "[]" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -297,7 +366,7 @@ "description": [ "\nThe path of the file to write logs to.\nNecessary because the testkit doesn't know the test's location\n" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -320,7 +389,7 @@ }, "[] | undefined" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -336,7 +405,7 @@ "signature": [ "Record | undefined" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -352,7 +421,7 @@ "signature": [ "string | undefined" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -368,7 +437,7 @@ "signature": [ "string | undefined" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -384,13 +453,73 @@ "signature": [ "string | undefined" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false } ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.ModelVersionTestMigrator", + "type": "Interface", + "tags": [], + "label": "ModelVersionTestMigrator", + "description": [ + "\nTest utility allowing to test model version changes between versions." + ], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.ModelVersionTestMigrator.migrate", + "type": "Function", + "tags": [ + "see" + ], + "label": "migrate", + "description": [ + "\nMigrate the document from the provided source to destination model version.\n" + ], + "signature": [ + "(options: ModelVersionTestMigrateOptions) => ", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObject", + "text": "SavedObject" + }, + "" + ], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-test-helpers-model-versions", + "id": "def-common.ModelVersionTestMigrator.migrate.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "ModelVersionTestMigrateOptions" + ], + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/model_version_tester.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-test-helpers-model-versions", "id": "def-common.SavedObjectTestkitDefinition", @@ -400,7 +529,7 @@ "description": [ "\nRepresents the info necessary to prepare a given type for the sandbox.\nContains both the actual SO type definition, and the versions\nthat should be used at 'before' and 'after' model versions.\n" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -423,7 +552,7 @@ }, "" ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -436,7 +565,7 @@ "description": [ "\nThe model version to be used for the 'before' repository." ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false }, @@ -449,7 +578,7 @@ "description": [ "\nThe model version to be used for the 'after' repository." ], - "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/types.ts", + "path": "packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 3006ade153153..a075d44c2a8de 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 1 | 0 | +| 29 | 0 | 4 | 0 | ## Common 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 c23537c785d7b..5ef8bc4b278d9 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-10-04 +date: 2023-10-05 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 df3d8c0bda577..7fdd1bc587f6b 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 54aa802f18b17..7871a74ea7707 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 6b4bb2377720f..1f6a93a99c6b9 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 d1c43f217cfa0..09586321ed287 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 0c8a899aba681..4ecf9b2982b88 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 ca3f405e911a2..40bb2a9197ff9 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 6297dd680a265..0198fc9779ec9 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-10-04 +date: 2023-10-05 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 b6994aacb6b79..b2e7b1b6745a6 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-10-04 +date: 2023-10-05 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 f5eead18510aa..452357560fa0d 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 2d483f1918899..d45e1063425e6 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 f73dbb3ec7f2c..7d9a2c6570843 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-10-04 +date: 2023-10-05 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 310ed94c63830..810d197c66c20 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 3536f096d9dd5..2ce46d4f896a6 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 fd17d4fed17d7..e6f9193d16e40 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-10-04 +date: 2023-10-05 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 58c629c941615..a89f42b41434e 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-10-04 +date: 2023-10-05 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 df98672012180..ed9777330dadb 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 ad88ceb2104eb..5a2a158bc0ee9 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-10-04 +date: 2023-10-05 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 5d2a239ab71de..a1bd577f8eb53 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index a69548f8adc4f..e8987912280ce 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-10-04 +date: 2023-10-05 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 f9cbc955ef98f..0f3d42e0e49d3 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-10-04 +date: 2023-10-05 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 eddf3cc179871..5fb1b195f7624 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-10-04 +date: 2023-10-05 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 15f52e0102c70..b81f5773c6fef 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-10-04 +date: 2023-10-05 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 bcf03f43a1360..2f27765b02ddf 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-10-04 +date: 2023-10-05 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 4a7619a98d584..8c6a2dcb2ad11 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-10-04 +date: 2023-10-05 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 45d2dd65edec5..d085b8ac1f555 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-10-04 +date: 2023-10-05 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 e87e7d58c6db1..18a69fd353644 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-10-04 +date: 2023-10-05 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 2f03e9787f455..58a3afb86bdc9 100644 --- a/api_docs/kbn_deeplinks_observability.devdocs.json +++ b/api_docs/kbn_deeplinks_observability.devdocs.json @@ -427,7 +427,7 @@ "section": "def-common.AppId", "text": "AppId" }, - " | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:rules\" | \"observability-overview:alerts\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"observability-overview:slos\" | \"metrics:settings\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:metrics-hosts\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\"" + " | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:rules\" | \"observability-overview:alerts\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"observability-overview:slos\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\"" ], "path": "packages/deeplinks/observability/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 3281642e94f6a..4c91324e78257 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 27da2bb89123d..9677de66ce7b2 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-10-04 +date: 2023-10-05 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 65c410e3da692..560cd13f81076 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-10-04 +date: 2023-10-05 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 c57f48430a741..6b7506059c12f 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-10-04 +date: 2023-10-05 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 3599cf73e846b..8a7191390dbf1 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-10-04 +date: 2023-10-05 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 5ff8ccb2e9884..247dcd19f8f15 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-10-04 +date: 2023-10-05 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 5366921bffaaa..8d1438fd2a008 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-10-04 +date: 2023-10-05 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 aa88314638326..6064cb802ee91 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-10-04 +date: 2023-10-05 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 d4c5cec74fdcc..bf984c21f71c6 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-10-04 +date: 2023-10-05 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 2937bcffe4e21..9b0098d4f1572 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 a225f6c0a0a08..fc3a4148b108c 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 0bc1a8c54d042..04306a72149bb 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-10-04 +date: 2023-10-05 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 695014c4e8cfa..7b92e31297617 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 58159568bf8f2..42c3a3d562aa5 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-10-04 +date: 2023-10-05 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 7166a84534dcc..1e4373937a0b5 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-10-04 +date: 2023-10-05 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 5444ac7240385..310976776c5eb 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-10-04 +date: 2023-10-05 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 77f3fa578d6cd..fbc442faacfff 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index cf859f629faa8..d026bf0a48a80 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 7cbadfcc9827a..a64c08611aec4 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-10-04 +date: 2023-10-05 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 adecd141c7414..cc5c9d2609e45 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-10-04 +date: 2023-10-05 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 4ba938b753052..a2db586a413de 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index ccdcb3dba0e46..bb4ac4ea3f783 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 030ac91b423f5..c30a20d934926 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-10-04 +date: 2023-10-05 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 7b476cd7fd11f..023dddf0fe636 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-10-04 +date: 2023-10-05 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 a7a12d3447cf0..c3ab30d7507f9 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-10-04 +date: 2023-10-05 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 0bd569188da06..5c55eef86860d 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-10-04 +date: 2023-10-05 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 158edc5b86c65..05c03c3d2e6e6 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-10-04 +date: 2023-10-05 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 b6fbf7f7bb289..8b59ffb09015d 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 6796b16f5237a..d1773c41d264a 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-10-04 +date: 2023-10-05 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 07f237321de52..841478842b634 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-10-04 +date: 2023-10-05 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 34e0d43faa94d..577aec0084757 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-10-04 +date: 2023-10-05 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 1738895575923..9c9f3ee9e90c5 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-10-04 +date: 2023-10-05 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 719969da565e8..ef93b367bca51 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index 810b40dc2640c..b5c850d51e89b 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 406e4541e1d7f..a17b4d2270b7d 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-10-04 +date: 2023-10-05 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 86dea148b967f..5f21a89b95665 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-10-04 +date: 2023-10-05 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 9bf79be513a86..4941572c32b95 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 f470d8f8a6cf4..1aef9b5a35bd8 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-10-04 +date: 2023-10-05 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 3ad45637e66c3..506c9a1985c0b 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-10-04 +date: 2023-10-05 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 57b4cf8b5aa43..00b0c4783bdae 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-10-04 +date: 2023-10-05 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 8ac2fe4cb76fe..2512f5395d3d5 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-10-04 +date: 2023-10-05 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 ac93215a66425..ccb56d1af2e08 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-10-04 +date: 2023-10-05 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 f47825f2f54ac..06c3ec9cffed5 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-10-04 +date: 2023-10-05 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 4cf3b9ce1c213..40ccb851b962c 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-10-04 +date: 2023-10-05 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 85bb64c864a43..7edabba45efa9 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-10-04 +date: 2023-10-05 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 e869624164d7e..a8a253875768e 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 87c2fa1d1a2b9..3f286ce50d459 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-10-04 +date: 2023-10-05 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 dad7dd81c0f74..07e911788b1f7 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-10-04 +date: 2023-10-05 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 e4877891dfddc..da17e432653ba 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-10-04 +date: 2023-10-05 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 4d50897248da0..2a07fb5edb032 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-10-04 +date: 2023-10-05 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 aabfd0fa99189..d032996d847c6 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-10-04 +date: 2023-10-05 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 f50cb2a2a4889..d29cac159c802 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 48595d9349706..ac40fdb839eef 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-10-04 +date: 2023-10-05 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 30a6da003d0a0..c20799a25ccd2 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 f6d747ec95282..aaa058c310f4e 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-10-04 +date: 2023-10-05 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 a4415118cbca0..2305fb0f85c07 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-10-04 +date: 2023-10-05 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 6c3a050991bd1..ed3d3a2efed32 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2023-10-04 +date: 2023-10-05 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 4c3ca9eeef417..cf91fcd65c8f3 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2023-10-04 +date: 2023-10-05 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 9bc2b8fa786ce..39b8d16a3f0e1 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-10-04 +date: 2023-10-05 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 b28b93d6f6862..98a903869a9ef 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-10-04 +date: 2023-10-05 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 4bc51cc169539..f3fe8fd7c0ad7 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2023-10-04 +date: 2023-10-05 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 d78504247f227..a39fce674e64a 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-10-04 +date: 2023-10-05 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 f53797c3b7172..597f2a9fa6f45 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-10-04 +date: 2023-10-05 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 18c2b07f72d85..bbfe43254d20c 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-10-04 +date: 2023-10-05 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 18aeadde73881..8ec47776eb2e7 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-10-04 +date: 2023-10-05 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 caac16a9f5e32..27779f359056c 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-10-04 +date: 2023-10-05 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 ac6eca560bd67..77799dee908a2 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 2712c4dbed297..f57683d3598e1 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-10-04 +date: 2023-10-05 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 ca9e24e992fcb..0bb478b87d201 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-10-04 +date: 2023-10-05 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.devdocs.json b/api_docs/kbn_ml_agg_utils.devdocs.json index dffe6cb0643a7..950d7c821d368 100644 --- a/api_docs/kbn_ml_agg_utils.devdocs.json +++ b/api_docs/kbn_ml_agg_utils.devdocs.json @@ -1222,6 +1222,35 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SignificantTerm.key", + "type": "string", + "tags": [], + "label": "key", + "description": [ + "The key associated with the significant term." + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SignificantTerm.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [ + "The type of the significant term." + ], + "signature": [ + "\"keyword\" | \"log_pattern\"" + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/ml-agg-utils", "id": "def-common.SignificantTerm.doc_count", @@ -1550,6 +1579,35 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SignificantTermGroupItem.key", + "type": "string", + "tags": [], + "label": "key", + "description": [ + "The key associated with the significant term." + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SignificantTermGroupItem.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [ + "The type of the significant term." + ], + "signature": [ + "\"keyword\" | \"log_pattern\"" + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/ml-agg-utils", "id": "def-common.SignificantTermGroupItem.docCount", @@ -1810,8 +1868,43 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SignificantTermType", + "type": "Type", + "tags": [], + "label": "SignificantTermType", + "description": [ + "\nRepresents the type of significant term as determined by the SIGNIFICANT_TERM_TYPE enumeration." + ], + "signature": [ + "\"keyword\" | \"log_pattern\"" + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], - "objects": [] + "objects": [ + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.SIGNIFICANT_TERM_TYPE", + "type": "Object", + "tags": [], + "label": "SIGNIFICANT_TERM_TYPE", + "description": [ + "\nEnumeration of significant term types." + ], + "signature": [ + "{ readonly KEYWORD: \"keyword\"; readonly LOG_PATTERN: \"log_pattern\"; }" + ], + "path": "x-pack/packages/ml/agg_utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 976bbcbaa80ef..60ff3d90ba090 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 93 | 2 | 0 | 0 | +| 99 | 2 | 0 | 0 | ## Common +### Objects + + ### Functions diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index d7c9b0ae80fe5..0d89993003450 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 1e14fd5e52cb7..3cf4e592f476f 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-10-04 +date: 2023-10-05 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 3990a8bfc55b1..ebb6b76d539aa 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2023-10-04 +date: 2023-10-05 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 ad874267b8817..ea5cea8ea65d0 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 6f5672379a2f3..d7b78d0d67b1e 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-10-04 +date: 2023-10-05 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 e8c6a7b200e85..736b49f786bc8 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-10-04 +date: 2023-10-05 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 d94b4b0980a3c..5a4d551b94ac4 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 e6186a1931297..02d7b69a30f2b 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 64452c2521165..f2467daf121de 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-10-04 +date: 2023-10-05 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 2e702ff1859d4..58a129ca7187e 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-10-04 +date: 2023-10-05 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 c6435521f79f6..56bfdd0fe305b 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-10-04 +date: 2023-10-05 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 febe7eb79e2ff..96b1b38741db7 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-10-04 +date: 2023-10-05 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 a86280bd83138..a7c8c6aeb7702 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-10-04 +date: 2023-10-05 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 7603d7cc69c0a..cfba28b9c3a59 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-10-04 +date: 2023-10-05 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 d53550e2ea97e..2f4476bd49ff6 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 e423084c6a2b6..43b79b427bd17 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 037ac91309614..7dcecbc5ca180 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 63d2ec3c20d1f..19b279009eebe 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 2f03f56501dbd..66bd855a2cbf4 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 ee0882e668509..7b57e055237a7 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-10-04 +date: 2023-10-05 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 be9908f3b9b81..9f991f8004d8f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 699a896170f7d..7f760ddf71757 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-10-04 +date: 2023-10-05 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 c2834c5cf7ab0..e426e5d060b83 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-10-04 +date: 2023-10-05 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 d3a35c96ba723..e5ae81e5294e3 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-10-04 +date: 2023-10-05 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 500fa9945ff45..8463c6f134940 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index fb9cc14ead142..4b712546c2199 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-10-04 +date: 2023-10-05 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 c85beac6f863b..1a0beedde92d1 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-10-04 +date: 2023-10-05 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 c54a30a800005..126d1cebdbc79 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-10-04 +date: 2023-10-05 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 647de77bca211..e42256ffac0c6 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 087668ee0d628..2c1390c0facde 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-10-04 +date: 2023-10-05 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 27577f749ca74..695d7f2fed5d1 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-10-04 +date: 2023-10-05 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 fa87b382f9531..3d470624e376e 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-10-04 +date: 2023-10-05 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 f80f83b70d6c4..349bc465c44fa 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 bd82bd11c69cc..634015cc9cbfb 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-10-04 +date: 2023-10-05 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 cf85c1c8857aa..541945d41fdec 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-10-04 +date: 2023-10-05 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 1509c1a981ff1..213f6f5905542 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-10-04 +date: 2023-10-05 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 facd8a5434cea..bbbc68fc85ac7 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-10-04 +date: 2023-10-05 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 ad7592dd3ad90..d69321985868d 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-10-04 +date: 2023-10-05 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 6c7a7187c7418..5535aff0427f5 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-10-04 +date: 2023-10-05 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 07a624239db5d..21a14a6402586 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-10-04 +date: 2023-10-05 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 427c4673b94bb..dafa95ed7d0b6 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-10-04 +date: 2023-10-05 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 dbb92f84671f7..0e85af827ced5 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-10-04 +date: 2023-10-05 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 9eecd8792a6e4..891a6e444f60f 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-10-04 +date: 2023-10-05 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 ec84b6f1b1280..4e6c6da052b74 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-10-04 +date: 2023-10-05 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 9cd05df3aac22..9fbcd58a07e3d 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-10-04 +date: 2023-10-05 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 6643d1d45fb39..cefcb0a13b4ce 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index e1bf02ac29cc2..5ed7b897540d8 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2023-10-04 +date: 2023-10-05 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 0224356418b99..3a45f2b8d351b 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-10-04 +date: 2023-10-05 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 861159a104eea..94c33b67c50d9 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-10-04 +date: 2023-10-05 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 4a41353e4caf6..7612964e812d1 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 bd257bba9018a..205f2d7885fc3 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-10-04 +date: 2023-10-05 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 66cb8a44a0f57..dffb8f26b7957 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-10-04 +date: 2023-10-05 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 dee27e260aaa7..d3794619ffb6b 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -113,7 +113,7 @@ "section": "def-common.ConnectorFeatures", "text": "ConnectorFeatures" }, - " | undefined; indexName: string | null; isNative: boolean; language: string | null; name?: string | undefined; pipeline: ", + " | undefined; indexName: string | null; isNative: boolean; language: string | null; name?: string | undefined; pipeline?: ", { "pluginId": "@kbn/search-connectors", "scope": "common", @@ -121,7 +121,7 @@ "section": "def-common.IngestPipelineParams", "text": "IngestPipelineParams" }, - "; serviceType?: string | null | undefined; }) => Promise<", + " | undefined; serviceType?: string | null | undefined; instant_response?: boolean | undefined; }) => Promise<", { "pluginId": "@kbn/search-connectors", "scope": "common", @@ -276,7 +276,8 @@ "docId": "kibKbnSearchConnectorsPluginApi", "section": "def-common.IngestPipelineParams", "text": "IngestPipelineParams" - } + }, + " | undefined" ], "path": "packages/kbn-search-connectors/lib/create_connector.ts", "deprecated": false, @@ -295,6 +296,20 @@ "path": "packages/kbn-search-connectors/lib/create_connector.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.createConnector.$2.instant_response", + "type": "CompoundType", + "tags": [], + "label": "instant_response", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-search-connectors/lib/create_connector.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -1222,6 +1237,147 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncJobTypeToText", + "type": "Function", + "tags": [], + "label": "syncJobTypeToText", + "description": [], + "signature": [ + "(syncType: ", + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncJobType", + "text": "SyncJobType" + }, + ") => string" + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncJobTypeToText.$1", + "type": "Enum", + "tags": [], + "label": "syncType", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncJobType", + "text": "SyncJobType" + } + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncStatusToColor", + "type": "Function", + "tags": [], + "label": "syncStatusToColor", + "description": [], + "signature": [ + "(status: ", + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncStatus", + "text": "SyncStatus" + }, + ") => string" + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncStatusToColor.$1", + "type": "Enum", + "tags": [], + "label": "status", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncStatus", + "text": "SyncStatus" + } + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncStatusToText", + "type": "Function", + "tags": [], + "label": "syncStatusToText", + "description": [], + "signature": [ + "(status: ", + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncStatus", + "text": "SyncStatus" + }, + ") => string" + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.syncStatusToText.$1", + "type": "Enum", + "tags": [], + "label": "status", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.SyncStatus", + "text": "SyncStatus" + } + ], + "path": "packages/kbn-search-connectors/utils/sync_status_to_text.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/search-connectors", "id": "def-common.updateConnectorConfiguration", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 373c49016f105..05b9a41ade851 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2048 | 0 | 2048 | 0 | +| 2055 | 0 | 2055 | 0 | ## Common diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 49de241dc8472..2a061bcbc49ae 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 717b6108076fe..eb11b6ebc9210 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-10-04 +date: 2023-10-05 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 73884fa7880ab..7ae94765042dc 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-10-04 +date: 2023-10-05 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 116f26dd90f46..764d1ebb7142b 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-10-04 +date: 2023-10-05 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 9c29a3620e564..0972dd71d8026 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-10-04 +date: 2023-10-05 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 60dc2e146ee97..5cfdff23498dd 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-10-04 +date: 2023-10-05 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 84b75373410ee..f1ba4a1c00621 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-10-04 +date: 2023-10-05 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 ab6bc7fad047a..b17303af451b8 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-10-04 +date: 2023-10-05 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 b240450803243..18ee8dbc746cf 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 aba7a850cdc69..258743373fbb6 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-10-04 +date: 2023-10-05 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 c4674eea19506..1874c6daa7468 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-10-04 +date: 2023-10-05 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 c9ba5071281b1..4be086a5fdf9d 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 34661d22ed9c5..0cf2a59dd349b 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-10-04 +date: 2023-10-05 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 41075154bac87..23bd68b91ceaa 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-10-04 +date: 2023-10-05 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 76ff7b35cdf24..07d677198f68d 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-10-04 +date: 2023-10-05 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 d873aa8b59dee..eb0d1e4aa742a 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 77c29e6a7ef8e..e4973a04bcaad 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-10-04 +date: 2023-10-05 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 b726e7d9bcc4e..1747423a7d970 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-10-04 +date: 2023-10-05 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 2de4b1c3d0e1a..854420aa857bb 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-10-04 +date: 2023-10-05 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 b4fcc1f3ab65a..a0fd09261b9bf 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 81e4be7d4d983..a04895fbfcbb1 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-10-04 +date: 2023-10-05 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 cfec7eea37bba..536c01e99d851 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-10-04 +date: 2023-10-05 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 295f8697601c6..b3ecbd5e53c2a 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-10-04 +date: 2023-10-05 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 7316db3890f86..70d1e9446027e 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-10-04 +date: 2023-10-05 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 58a18cdb0fd67..8c27a9e168eb7 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-10-04 +date: 2023-10-05 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 c73e1bd6c4fcd..da47fd95e1fd1 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-10-04 +date: 2023-10-05 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 514dd3f915e8c..67c70178ba6c8 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-10-04 +date: 2023-10-05 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 01446a23c72d5..b8462d568d13f 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-10-04 +date: 2023-10-05 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 df2d3b07e5d7b..a67d41d2a1f38 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-10-04 +date: 2023-10-05 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 bfb556f280f92..6ef6b672aa56e 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-10-04 +date: 2023-10-05 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 6ffc0c6183594..e72dd06c2f75f 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-10-04 +date: 2023-10-05 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 7d7b3d1e927d1..81d11ff777f22 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-10-04 +date: 2023-10-05 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 e3278f6713a62..8226c58ff992f 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 8c66cb2c66b09..89c8cf3fba0ac 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 5d5715345b9d1..d25c1e77791ef 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 98366524af159..1ea03c3771d6d 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 4532a64fa853d..e42bfd5b502c1 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-10-04 +date: 2023-10-05 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 51e51e1b5fcee..cffc22362ce51 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-10-04 +date: 2023-10-05 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 3909f7cb5b76f..76c5f084ee8b7 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 fbb57cc717da1..7fdddf0f4417e 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 5a72a36f1e513..6e90c76a651c2 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-10-04 +date: 2023-10-05 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 d657ae8b8c151..5e11db43fd217 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-10-04 +date: 2023-10-05 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 8b9b3d8c9479a..f087ef2d4f9fc 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 b83874e227ab1..77287e4cb8a92 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 497dc43acf8d2..4cea551deb9e6 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-10-04 +date: 2023-10-05 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 a937fb3a1f2bd..118f1d369499f 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-10-04 +date: 2023-10-05 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 2e4eb12f81ca9..30d8bdf11da46 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-10-04 +date: 2023-10-05 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 7cf0d2d51552a..6141f852d4316 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-10-04 +date: 2023-10-05 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 60820afea31f1..3d14d53d58cd6 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-10-04 +date: 2023-10-05 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 5a9680546679a..3a7830733ebef 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 5cc6157894249..a2ef77cf0e3d1 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-10-04 +date: 2023-10-05 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 a68389a97579d..f2c362cdbb1b6 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 41124c5d1364c..31871ded466f5 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-10-04 +date: 2023-10-05 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 9b1594fa5b6d5..4b93fe436b1ea 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 614cb0dcb1788..2be4c4a419ceb 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-10-04 +date: 2023-10-05 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 0ae50d2dca0cd..1093683cc1747 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 de2ccbffecc32..c12c83294db73 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-10-04 +date: 2023-10-05 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 4bdf7d15cad4e..8cb67b44d85bf 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 aab0920194812..152307763f693 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-10-04 +date: 2023-10-05 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 2a3ff12472f28..84f728d9f6c17 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-10-04 +date: 2023-10-05 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 f3a46f161bbcf..814a5561ff0d8 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 ad9e850bdc497..6f5d08687b868 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 06bde717c846b..f2e93158528da 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-10-04 +date: 2023-10-05 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 4f0895eedd529..4dc96300849f1 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-10-04 +date: 2023-10-05 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 ead2f6e7e3ffd..d3973686c39f0 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 af81c4c53858f..309b5c3864483 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-10-04 +date: 2023-10-05 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 9dfb6a29e1580..fb3a73b3b8673 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-10-04 +date: 2023-10-05 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 e9892249c21ca..ec59aec022df2 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-10-04 +date: 2023-10-05 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 0d93c547dd514..28239b4149653 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-10-04 +date: 2023-10-05 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 6005a60064f71..df36c3372277e 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-10-04 +date: 2023-10-05 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 af997d48080e1..66f15d350c64b 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-10-04 +date: 2023-10-05 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 6b60f64117f37..ddc162fbbfcab 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-10-04 +date: 2023-10-05 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 352c042ce2a03..5ffd57f187fde 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-10-04 +date: 2023-10-05 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 ba2faa59f4ee2..028b597daef38 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-10-04 +date: 2023-10-05 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 24614e641fa4d..6d3d40e0695d7 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-10-04 +date: 2023-10-05 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 10da0ca89d067..532180c694222 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index a215f21dde154..ea66174a6612e 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 4d864b8037c81..f76f94ff2a84f 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index ca43d8708297a..2d9a82dde4b9e 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -3120,7 +3120,9 @@ "label": "esServerlessOptions", "description": [], "signature": [ - "{ image?: string | undefined; tag?: string | undefined; } | undefined" + "Pick<", + "ServerlessOptions", + ", \"host\" | \"tag\" | \"image\" | \"resources\"> | undefined" ], "path": "packages/kbn-test/src/es/test_es_cluster.ts", "deprecated": false, diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index a57c3ed3ebc0a..157a11b2b82e5 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-10-04 +date: 2023-10-05 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 8e830cf45b2a6..2d6ba75691bc0 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-10-04 +date: 2023-10-05 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 0fd0a340e4197..376aa2a8f138c 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-10-04 +date: 2023-10-05 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 4eae2e898df5d..cb4ff39c8e980 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-10-04 +date: 2023-10-05 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 c448d74c001bb..2b52f295d57bf 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index a98aee6a2762d..f5cbc116309d2 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-10-04 +date: 2023-10-05 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 6abef4b3cb265..920b1ac581e23 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-10-04 +date: 2023-10-05 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 1cf8ad38e2749..84958a4400909 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-10-04 +date: 2023-10-05 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 87218bf34c107..b23e146a340f8 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-10-04 +date: 2023-10-05 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 d81de2c5fca9a..5b79b58a992d6 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-10-04 +date: 2023-10-05 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 2ee6ad369ae8b..6a1b55fd4ed1d 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-10-04 +date: 2023-10-05 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 b8120562c5c50..759f0df1290bd 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-10-04 +date: 2023-10-05 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 a2087344b05b3..d7b87d1dab7ef 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 3ae29ff6cec18..45760019e9ce7 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-10-04 +date: 2023-10-05 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 cc32e0d5a7fe3..fbfaa53f01b67 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-10-04 +date: 2023-10-05 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 7d0e762554919..8d25fb89e0eba 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-10-04 +date: 2023-10-05 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 5279f67f8e4af..cb4beff8a49fe 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-10-04 +date: 2023-10-05 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 145b5304caf14..99bf78ded44fb 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-10-04 +date: 2023-10-05 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 0206955946b47..1a320a6cb58f4 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.devdocs.json b/api_docs/kbn_visualization_ui_components.devdocs.json index c33aaf04d4bed..80a90a0b589f6 100644 --- a/api_docs/kbn_visualization_ui_components.devdocs.json +++ b/api_docs/kbn_visualization_ui_components.devdocs.json @@ -11,7 +11,7 @@ "label": "ColorPicker", "description": [], "signature": [ - "({ overwriteColor, defaultColor, setConfig, label, disableHelpTooltip, disabledMessage, showAlpha, }: { overwriteColor?: string | null | undefined; defaultColor?: string | null | undefined; setConfig: (config: { color?: string | undefined; }) => void; label?: string | undefined; disableHelpTooltip?: boolean | undefined; disabledMessage?: string | undefined; showAlpha?: boolean | undefined; }) => JSX.Element" + "({ overwriteColor, defaultColor, isClearable, setConfig, label, disableHelpTooltip, disabledMessage, showAlpha, }: { overwriteColor?: string | null | undefined; defaultColor?: string | null | undefined; isClearable?: boolean | undefined; setConfig: (config: { color?: string | undefined; }) => void; label?: string | undefined; disableHelpTooltip?: boolean | undefined; disabledMessage?: string | undefined; showAlpha?: boolean | undefined; }) => JSX.Element" ], "path": "packages/kbn-visualization-ui-components/components/color_picker.tsx", "deprecated": false, @@ -22,7 +22,7 @@ "id": "def-public.ColorPicker.$1", "type": "Object", "tags": [], - "label": "{\n overwriteColor,\n defaultColor,\n setConfig,\n label,\n disableHelpTooltip,\n disabledMessage,\n showAlpha,\n}", + "label": "{\n overwriteColor,\n defaultColor,\n isClearable,\n setConfig,\n label,\n disableHelpTooltip,\n disabledMessage,\n showAlpha,\n}", "description": [], "path": "packages/kbn-visualization-ui-components/components/color_picker.tsx", "deprecated": false, @@ -56,6 +56,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/visualization-ui-components", + "id": "def-public.ColorPicker.$1.isClearable", + "type": "CompoundType", + "tags": [], + "label": "isClearable", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-visualization-ui-components/components/color_picker.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/visualization-ui-components", "id": "def-public.ColorPicker.$1.setConfig", diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 35b86e5615659..4ee51b49ea720 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 155 | 0 | 151 | 3 | +| 156 | 0 | 152 | 3 | ## Client diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index b550dbb55e6d3..861b90cfe800e 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index b316eb12dad4d..fd42d4e6a54cf 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 356e258f0b7e2..c943b4e7a834e 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-10-04 +date: 2023-10-05 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 85b74a775e951..b9ab273d2c2af 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-10-04 +date: 2023-10-05 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 ef82a6fde36af..5ccd842d840b3 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-10-04 +date: 2023-10-05 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 e2532acc7f909..613784ce420a7 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-10-04 +date: 2023-10-05 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 535cb06bd546f..5d6ce5cc9d4bd 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-10-04 +date: 2023-10-05 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 9d7769ae9a297..52e33c4804b1a 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-10-04 +date: 2023-10-05 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 f4931f56c2be0..bf3a62ee42dad 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-10-04 +date: 2023-10-05 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 6ace00fe51a0f..ba2389425ca49 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-10-04 +date: 2023-10-05 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 252c39322ca6a..2cab6ad58f065 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2023-10-04 +date: 2023-10-05 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 36861d7fc6323..6c8f63af993ca 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 9ac971ea3b4a0..1cfc3276626b0 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 566777c5b4797..7dafc5ecdaf55 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-10-04 +date: 2023-10-05 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 26b43a942c8d1..b3d019368c835 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-10-04 +date: 2023-10-05 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 3b1862a9f985b..7bbbe4190b259 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-10-04 +date: 2023-10-05 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 0bc75c29258ff..74a6930cc3918 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.devdocs.json b/api_docs/metrics_data_access.devdocs.json index ed498fd981e05..de32b9fe2732f 100644 --- a/api_docs/metrics_data_access.devdocs.json +++ b/api_docs/metrics_data_access.devdocs.json @@ -271,7 +271,45 @@ "initialIsOpen": false } ], - "objects": [], + "objects": [ + { + "parentPluginId": "metricsDataAccess", + "id": "def-server.MetricsDataClientMock", + "type": "Object", + "tags": [], + "label": "MetricsDataClientMock", + "description": [], + "path": "x-pack/plugins/metrics_data_access/server/client_mock.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "metricsDataAccess", + "id": "def-server.MetricsDataClientMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "metricsDataAccess", + "scope": "server", + "docId": "kibMetricsDataAccessPluginApi", + "section": "def-server.MetricsDataClient", + "text": "MetricsDataClient" + } + ], + "path": "x-pack/plugins/metrics_data_access/server/client_mock.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "setup": { "parentPluginId": "metricsDataAccess", "id": "def-server.MetricsDataPluginSetup", diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index d4b6dfef85c01..8ae5f0a13f73a 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/inf | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 14 | 0 | +| 16 | 0 | 16 | 0 | ## Server ### Setup +### Objects + + ### Classes diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 30cddb7edb9bc..dd49804dc6368 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index fbec9a529dc70..585db02f7e9cf 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-10-04 +date: 2023-10-05 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 fae56d87b06cb..4e5312777fcbd 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-10-04 +date: 2023-10-05 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 5680809c10e42..81a99e60577a8 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-10-04 +date: 2023-10-05 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 3e6d4a836f0d4..7d13563813834 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-10-04 +date: 2023-10-05 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 1c5b21cb4714e..eea0c775578e4 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-10-04 +date: 2023-10-05 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 5ce826a89a292..377afbdf9867e 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-10-04 +date: 2023-10-05 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 1d3696f26300b..f3f223bd637a0 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-10-04 +date: 2023-10-05 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 c36dfffa7e4f1..43690855d68ff 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index b3b5d7dc00d55..c09dfc97371a3 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index ac51c37ec4bed..81cc8c0edbad5 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-10-04 +date: 2023-10-05 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 495743d4247b0..6ceb8b06b6cfe 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-10-04 +date: 2023-10-05 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 7e19211aec394..836cce900dadb 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-10-04 +date: 2023-10-05 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 d9d8766ba9cca..6319160624ce9 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-10-04 +date: 2023-10-05 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 5385249ce7b86..ab6f3303b0a4a 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
    public API | Number of teams | |--------------|----------|------------------------| -| 699 | 589 | 42 | +| 698 | 589 | 41 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 75755 | 223 | 64565 | 1575 | +| 75782 | 223 | 64582 | 1576 | ## Plugin Directory @@ -63,7 +63,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1037 | 0 | 257 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 117 | 0 | 75 | 18 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 118 | 0 | 76 | 18 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Server APIs for the Elastic AI Assistant | 4 | 0 | 2 | 0 | @@ -129,7 +129,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 47 | 0 | 47 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 259 | 0 | 258 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 67 | 0 | 67 | 0 | -| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Exposes utilities for accessing metrics data | 14 | 0 | 14 | 0 | +| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Exposes utilities for accessing metrics data | 16 | 0 | 16 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 150 | 3 | 64 | 33 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 15 | 3 | 13 | 1 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 9 | 0 | 9 | 0 | @@ -162,7 +162,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 5 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 270 | 0 | 87 | 3 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 172 | 0 | 106 | 34 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 176 | 0 | 109 | 35 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 19 | 0 | 18 | 0 | @@ -394,7 +394,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 61 | 1 | 54 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 1 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 29 | 0 | 4 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 15 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 4 | 0 | @@ -491,7 +491,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 0 | 0 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 582 | 1 | 1 | 0 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 2 | 0 | 2 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 93 | 2 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 99 | 2 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 206 | 3 | 1 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 37 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 12 | 0 | 0 | 0 | @@ -544,7 +544,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 114 | 0 | 111 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 68 | 0 | 68 | 0 | -| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2048 | 0 | 2048 | 0 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2055 | 0 | 2055 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 15 | 0 | 8 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 14 | 0 | 14 | 6 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 50 | 0 | 47 | 0 | @@ -642,7 +642,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 0 | 16 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 24 | 0 | 14 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 155 | 0 | 151 | 3 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 156 | 0 | 152 | 3 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 2 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index c94afd6726d23..5bd114fba99f5 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-10-04 +date: 2023-10-05 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 3a4e594dfff37..13abb7b599e07 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-10-04 +date: 2023-10-05 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 00457f1b7f5ad..735b7600ab35d 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-10-04 +date: 2023-10-05 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 93900ce0671df..3805921d9798f 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-10-04 +date: 2023-10-05 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 e5a5c3745fedf..c648f1fe61675 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-10-04 +date: 2023-10-05 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 d57bdbfe3d304..d7f5e2f30b8d0 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-10-04 +date: 2023-10-05 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 17be3ce7347ab..63786d2b4ab6b 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-10-04 +date: 2023-10-05 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 f80203dc65a03..455ebfb0e5a52 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-10-04 +date: 2023-10-05 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 057ef309a1908..59f7840bcbef8 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-10-04 +date: 2023-10-05 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 e2ef88610bad4..a3663b3ad45ed 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-10-04 +date: 2023-10-05 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 beff3d03e6432..d44c705e67a82 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-10-04 +date: 2023-10-05 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 9bb0ee48c65c7..7bdb32f9a1087 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-10-04 +date: 2023-10-05 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 9be994c1a1b97..89d8bb96757ae 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-10-04 +date: 2023-10-05 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 035cafcea23c1..17624c52e3739 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-10-04 +date: 2023-10-05 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 fd1e6da25c084..2614c21a5ffe7 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-10-04 +date: 2023-10-05 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 2f1dad24ba22d..5b513a88c0c5e 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-10-04 +date: 2023-10-05 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 8a8530a7e0bc4..14111499bc1ab 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 065104cd519d1..461ab76dbedd6 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -1769,6 +1769,20 @@ "children": [], "returnComment": [] }, + { + "parentPluginId": "securitySolution", + "id": "def-public.PluginSetup.experimentalFeatures", + "type": "Object", + "tags": [], + "label": "experimentalFeatures", + "description": [], + "signature": [ + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" + ], + "path": "x-pack/plugins/security_solution/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "securitySolution", "id": "def-public.PluginSetup.setAppLinksSwitcher", @@ -1803,6 +1817,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "securitySolution", + "id": "def-public.PluginSetup.setDeepLinksFormatter", + "type": "Function", + "tags": [], + "label": "setDeepLinksFormatter", + "description": [], + "signature": [ + "(deepLinksFormatter: ", + "DeepLinksFormatter", + ") => void" + ], + "path": "x-pack/plugins/security_solution/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "securitySolution", + "id": "def-public.PluginSetup.setDeepLinksFormatter.$1", + "type": "Function", + "tags": [], + "label": "deepLinksFormatter", + "description": [], + "signature": [ + "DeepLinksFormatter" + ], + "path": "x-pack/plugins/security_solution/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "securitySolution", "id": "def-public.PluginSetup.setDataQualityPanelConfig", @@ -2855,6 +2903,22 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "securitySolution", + "id": "def-server.SecuritySolutionPluginSetup.experimentalFeatures", + "type": "Object", + "tags": [], + "label": "experimentalFeatures", + "description": [ + "\nThe security solution generic experimental features" + ], + "signature": [ + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" + ], + "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", + "deprecated": false, + "trackAdoption": false } ], "lifecycle": "setup", diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 6750369625a69..2cb161270674c 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 172 | 0 | 106 | 34 | +| 176 | 0 | 109 | 35 | ## Client diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 61333fa922ef8..becb9fde425e1 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-10-04 +date: 2023-10-05 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 f2a4007dfabc1..37093bb4b4f7e 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-10-04 +date: 2023-10-05 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 5f9ac7fdfc053..3173f6aa55c71 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-10-04 +date: 2023-10-05 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 545a9b04455ea..107391fef8adb 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-10-04 +date: 2023-10-05 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 3a1d3130b69a1..dd95be9b76a23 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-10-04 +date: 2023-10-05 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 1fde97f8160a1..28dc097455faf 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-10-04 +date: 2023-10-05 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 1655bfd9995c6..8efcaff9ae3e5 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-10-04 +date: 2023-10-05 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 65d3d009b0817..24ddfd9abc371 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-10-04 +date: 2023-10-05 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 6ae122edde8f7..efd20cce0d61e 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-10-04 +date: 2023-10-05 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 df49f554a3e4c..dd59703e27f31 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-10-04 +date: 2023-10-05 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 77a5f87ceff41..c6f45a141ec56 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-10-04 +date: 2023-10-05 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 487a988e98d83..a1a16e0031669 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-10-04 +date: 2023-10-05 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 10f1f2535bc91..0ce9c23e30635 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-10-04 +date: 2023-10-05 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 293abfc53166a..10660c9902ebf 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-10-04 +date: 2023-10-05 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 8a56f882f506a..725195148694e 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-10-04 +date: 2023-10-05 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 3c18c09632a4d..e178ccd7710e7 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-10-04 +date: 2023-10-05 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 b151e77653cc6..ff58b40131f17 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-10-04 +date: 2023-10-05 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 ac963e4b5591f..766971e73dc37 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-10-04 +date: 2023-10-05 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 b080995580376..49c7177a4a91f 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-10-04 +date: 2023-10-05 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 61eac471b522f..fb23df99c0b51 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-10-04 +date: 2023-10-05 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 48e4f9d89c804..a25a5033682e0 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-10-04 +date: 2023-10-05 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 6a0bbf988918f..9e4ce07d6a80b 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-10-04 +date: 2023-10-05 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 af87c5d67d7a2..cf4eee540b9a8 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-10-04 +date: 2023-10-05 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 fb2d331b7115f..431a8e20122a8 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-10-04 +date: 2023-10-05 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 06f5ae34177b2..5cf1bb5d790fd 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-10-04 +date: 2023-10-05 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 925959a291e16..1eff054661043 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-10-04 +date: 2023-10-05 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 e1252144f7396..0cb2e557affec 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-10-04 +date: 2023-10-05 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 7d8a95edf987d..f23cae5aa118d 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-10-04 +date: 2023-10-05 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 3eb337c05ae3d..d20b3af00da87 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-10-04 +date: 2023-10-05 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 7b6f2f888e0c0..2f44258c9d401 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-10-04 +date: 2023-10-05 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 365162b61ee7d..05d4d8426559f 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-10-04 +date: 2023-10-05 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 02be92a35c2d5..64a1839ecd061 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-10-04 +date: 2023-10-05 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 aaa1b41d5bd0c..ce5e50c85e65d 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-10-04 +date: 2023-10-05 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 bfe7402987c65..2e87d67658305 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-10-04 +date: 2023-10-05 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 63ce12aab067d..52b107ad6057c 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-10-04 +date: 2023-10-05 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 9f2e4cd8f8961..936cd0c2773bb 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-10-04 +date: 2023-10-05 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 2eefb08259743..c303cca0180ce 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-10-04 +date: 2023-10-05 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 dfc9b6cd8ad57..dd261e79a06c7 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-10-04 +date: 2023-10-05 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 2c2a070030345..44a7b0f347fe3 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-10-04 +date: 2023-10-05 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 cdf3234db07ab..9cfad5a688fe2 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-10-04 +date: 2023-10-05 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 a314818334cbb..45d735650a81e 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 28f223df4f772..af3a417abd9de 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-10-04 +date: 2023-10-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From a2a7f4254000f53d764b49c760a2ffbf93f73041 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 5 Oct 2023 09:38:09 +0200 Subject: [PATCH 112/170] [Discover] Fix flaky chart interval test (#167977) - Closes https://github.com/elastic/kibana/issues/146223 100x https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3317 --- test/functional/apps/discover/group1/_discover.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/functional/apps/discover/group1/_discover.ts b/test/functional/apps/discover/group1/_discover.ts index 2933dd02f1525..8a72fd9cc5a58 100644 --- a/test/functional/apps/discover/group1/_discover.ts +++ b/test/functional/apps/discover/group1/_discover.ts @@ -111,10 +111,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - // FLAKY: https://github.com/elastic/kibana/issues/146223 - it.skip('should show correct initial chart interval of Auto', async function () { + it('should show correct initial chart interval of Auto', async function () { await PageObjects.timePicker.setDefaultAbsoluteRange(); await PageObjects.discover.waitUntilSearchingHasFinished(); + await testSubjects.click('unifiedHistogramQueryHits'); // to cancel out tooltips const actualInterval = await PageObjects.discover.getChartInterval(); const expectedInterval = 'Auto'; From 4f9e7490797e88027acbd7b099f10db6a1c85d12 Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 5 Oct 2023 10:12:57 +0200 Subject: [PATCH 113/170] [ftr] unskip tests that failed due to auth issue or navigation (#168006) ## Summary While debugging MKI failures I found some tests that should be stable without modification. I added waiting for page to loaded in some places though. https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3340 60x for examples & 20x for oblt configs --- .../search_examples/search_example.ts | 5 ++-- .../dataset_selection_state.ts | 26 ++++++++++++++++--- .../observability_log_explorer/header_menu.ts | 6 ++++- .../test_suites/search/empty_page.ts | 3 +++ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/search_examples/search_example.ts b/x-pack/test_serverless/functional/test_suites/common/examples/search_examples/search_example.ts index 67a2e41d50314..dff9c30052905 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/search_examples/search_example.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/search_examples/search_example.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Failing: See https://github.com/elastic/kibana/issues/165730 // FLAKY: https://github.com/elastic/kibana/issues/165735 - describe.skip('Search example', () => { + describe('Search example', () => { describe('with bfetch', () => { testSearchExample(); }); @@ -83,7 +83,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - it('should handle warnings', async () => { + // failing because no toasts are displayed + it.skip('should handle warnings', async () => { await testSubjects.click('searchWithWarning'); await retry.waitFor('', async () => { const toastCount = await toasts.getToastCount(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts index 4c8ddb58bf45d..1e12a054c852f 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts @@ -12,13 +12,27 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'observabilityLogExplorer']); + const PageObjects = getPageObjects([ + 'common', + 'observabilityLogExplorer', + 'svlCommonPage', + 'header', + ]); + + // https://github.com/elastic/kibana/issues/166016 + describe('DatasetSelection initialization and update', () => { + before(async () => { + await PageObjects.svlCommonPage.login(); + }); + + after(async () => { + await PageObjects.svlCommonPage.forceLogout(); + }); - // FLAKY: https://github.com/elastic/kibana/issues/166016 - describe.skip('DatasetSelection initialization and update', () => { describe('when the "index" query param does not exist', () => { it('should initialize the "All logs" selection', async () => { await PageObjects.observabilityLogExplorer.navigateTo(); + await PageObjects.header.waitUntilLoadingHasFinished(); const datasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); @@ -35,6 +49,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { _a: rison.encode({ index: azureActivitylogsIndex }), }), }); + await PageObjects.header.waitUntilLoadingHasFinished(); const datasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); @@ -49,6 +64,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { _a: rison.encode({ index: invalidEncodedIndex }), }), }); + await PageObjects.header.waitUntilLoadingHasFinished(); const datasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); @@ -61,6 +77,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('when navigating back and forth on the page history', () => { it('should decode and restore the selection for the current index', async () => { await PageObjects.observabilityLogExplorer.navigateTo(); + await PageObjects.header.waitUntilLoadingHasFinished(); const allDatasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); expect(allDatasetSelectionTitle).to.be('All logs'); @@ -73,6 +90,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { controlPanels: rison.encode({}), }), }); + await PageObjects.header.waitUntilLoadingHasFinished(); const azureDatasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); expect(azureDatasetSelectionTitle).to.be('[Azure Logs] activitylogs'); @@ -80,6 +98,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Go back to previous page selection await retry.try(async () => { await browser.goBack(); + await PageObjects.header.waitUntilLoadingHasFinished(); const backNavigationDatasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); expect(backNavigationDatasetSelectionTitle).to.be('All logs'); @@ -88,6 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Go forward to previous page selection await retry.try(async () => { await browser.goForward(); + await PageObjects.header.waitUntilLoadingHasFinished(); const forwardNavigationDatasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); expect(forwardNavigationDatasetSelectionTitle).to.be('[Azure Logs] activitylogs'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts index c7cba34e28ec2..882c5803a6cc0 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts @@ -18,10 +18,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'observabilityLogExplorer', 'svlCommonPage', 'timePicker', + 'header', ]); // FLAKY: https://github.com/elastic/kibana/issues/167189 - describe.skip('Header menu', () => { + describe('Header menu', () => { before(async () => { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.load( @@ -29,6 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await PageObjects.svlCommonPage.login(); await PageObjects.observabilityLogExplorer.navigateTo(); + await PageObjects.header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -47,6 +49,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Discover fallback link', () => { before(async () => { await PageObjects.observabilityLogExplorer.navigateTo(); + await PageObjects.header.waitUntilLoadingHasFinished(); }); it('should render a button link ', async () => { @@ -99,6 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Add data link', () => { before(async () => { await PageObjects.observabilityLogExplorer.navigateTo(); + await PageObjects.header.waitUntilLoadingHasFinished(); }); it('should render a button link ', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts index 5a7891968cb81..e3e82c0b0d97b 100644 --- a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts +++ b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts @@ -25,6 +25,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('should show search specific empty page in discover', async () => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'discover' }); + await testSubjects.existOrFail('~breadcrumb-deepLinkId-discover'); await testSubjects.existOrFail('kbnOverviewElasticsearchGettingStarted'); await testSubjects.click('kbnOverviewElasticsearchGettingStarted'); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Getting started' }); @@ -32,6 +33,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('should show search specific empty page in visualize', async () => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'visualize' }); + await testSubjects.existOrFail('~breadcrumb-deepLinkId-visualize'); await testSubjects.existOrFail('kbnOverviewElasticsearchGettingStarted'); await testSubjects.click('kbnOverviewElasticsearchGettingStarted'); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Getting started' }); @@ -39,6 +41,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('should show search specific empty page in dashboards', async () => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'dashboards' }); + await testSubjects.existOrFail('~breadcrumb-deepLinkId-dashboards'); await testSubjects.existOrFail('kbnOverviewElasticsearchGettingStarted'); await testSubjects.click('kbnOverviewElasticsearchGettingStarted'); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Getting started' }); From 706bf8f4a3a0aae976f22d83ab230ccf04a81fe3 Mon Sep 17 00:00:00 2001 From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:10:56 +0200 Subject: [PATCH 114/170] [Cases] fix create-case serverless flaky test (#167991) ## Summary fixes https://github.com/elastic/kibana/issues/166842 ## Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3319 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3334 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3348 --- .../observability/cases/create_case_form.ts | 2 ++ .../test_suites/observability/cases/view_case.ts | 1 + .../security/ftr/cases/create_case_form.ts | 13 +++++++------ .../test_suites/security/ftr/cases/view_case.ts | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts index b6c76f3ab1f49..e89e2b799dc30 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts @@ -21,6 +21,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const svlCommonPage = getPageObject('svlCommonPage'); const config = getService('config'); + const header = getPageObject('header'); before(async () => { await svlCommonPage.login(); @@ -28,6 +29,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { beforeEach(async () => { await navigateToCasesApp(getPageObject, getService, owner); + await header.waitUntilLoadingHasFinished(); }); after(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts index be6295903615a..24234d4a40e52 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts @@ -35,6 +35,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); after(async () => { + await cases.api.deleteAllCases(); await svlCommonPage.forceLogout(); }); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts index 14288c9c60668..01acd082021a2 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts @@ -15,22 +15,23 @@ import { navigateToCasesApp } from '../../../../../shared/lib/cases'; const owner = SECURITY_SOLUTION_OWNER; export default ({ getService, getPageObject }: FtrProviderContext) => { - // FLAKY: https://github.com/elastic/kibana/issues/166842 - describe.skip('Create Case', function () { + describe('Create Case', function () { const find = getService('find'); const cases = getService('cases'); const testSubjects = getService('testSubjects'); const config = getService('config'); const svlCommonPage = getPageObject('svlCommonPage'); - - beforeEach(async () => { - await navigateToCasesApp(getPageObject, getService, owner); - }); + const header = getPageObject('header'); before(async () => { await svlCommonPage.login(); }); + beforeEach(async () => { + await navigateToCasesApp(getPageObject, getService, owner); + await header.waitUntilLoadingHasFinished(); + }); + after(async () => { await cases.api.deleteAllCases(); await svlCommonPage.forceLogout(); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts index ca3e9af7df83f..4429c74040eaf 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts @@ -36,6 +36,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); after(async () => { + await cases.api.deleteAllCases(); await svlCommonPage.forceLogout(); }); From 48b66d72dc8fc40fdf21a8c812cfd7659686ccf2 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Thu, 5 Oct 2023 11:39:23 +0200 Subject: [PATCH 115/170] [infra] Use correct ML API to query blocking tasks (#167779) While working on https://github.com/elastic/kibana/issues/47477, I found that attempting to re-create a ML job faces a 404 because it uses an endpoint that has been removed / changed. This PR updates to use the newer endpoint to find which tasks are blocking in the ML system (like job deletion) and changes the types to match the new API. --- .../containers/logs/log_analysis/api/ml_cleanup.ts | 4 ++-- .../logs/log_analysis/log_analysis_cleanup.tsx | 6 ++++-- .../logs/log_analysis/log_analysis_module.tsx | 7 +++++-- .../logs/log_analysis/log_analysis_module_status.tsx | 4 ++-- .../infra/public/containers/ml/api/ml_cleanup.ts | 4 ++-- .../infra/public/containers/ml/infra_ml_cleanup.tsx | 6 ++++-- .../infra/public/containers/ml/infra_ml_module.tsx | 7 +++++-- .../public/containers/ml/infra_ml_module_status.tsx | 4 ++-- .../ml/anomaly_detection/job_setup_screen.tsx | 12 ++++++++++++ 9 files changed, 38 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts index e0cdd44bafe14..dd4fc9144976e 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts @@ -38,7 +38,7 @@ export const callDeleteJobs = async ( }; export const callGetJobDeletionTasks = async (fetch: HttpHandler) => { - const jobDeletionTasksResponse = await fetch('/internal/ml/jobs/deleting_jobs_tasks', { + const jobDeletionTasksResponse = await fetch('/internal/ml/jobs/blocking_jobs_tasks', { version: '1', }); @@ -87,7 +87,7 @@ export const deleteJobsResponsePayloadRT = rt.record( export type DeleteJobsResponsePayload = rt.TypeOf; export const getJobDeletionTasksResponsePayloadRT = rt.type({ - jobIds: rt.array(rt.string), + jobs: rt.array(rt.record(rt.string, rt.string)), }); export const stopDatafeedsRequestPayloadRT = rt.type({ diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx index 2a5493f153ff3..b9668311df062 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx @@ -46,8 +46,10 @@ const waitUntilJobsAreDeleted = async ( ) => { const moduleJobIds = jobTypes.map((jobType) => getJobId(spaceId, logViewId, jobType)); while (true) { - const { jobIds: jobIdsBeingDeleted } = await callGetJobDeletionTasks(fetch); - const needToWait = jobIdsBeingDeleted.some((jobId) => moduleJobIds.includes(jobId)); + const { jobs } = await callGetJobDeletionTasks(fetch); + const needToWait = jobs + .flatMap((job) => Object.keys(job)) + .some((jobId) => moduleJobIds.includes(jobId)); if (needToWait) { await timeout(1000); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx index 7224848ba2e90..58bade0a81d06 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx @@ -123,6 +123,9 @@ export const useLogAnalysisModule = ({ createPromise: async () => { return await moduleDescriptor.cleanUpModule(spaceId, logViewId, services.http.fetch); }, + onReject: (e) => { + throw new Error(`Failed to clean up previous ML job: ${e}`); + }, }, [spaceId, logViewId] ); @@ -144,8 +147,8 @@ export const useLogAnalysisModule = ({ .then(() => { setUpModule(selectedIndices, start, end, datasetFilter); }) - .catch(() => { - dispatchModuleStatus({ type: 'failedSetup' }); + .catch((e) => { + dispatchModuleStatus({ type: 'failedSetup', reason: e.toString() }); }); }, [cleanUpModule, dispatchModuleStatus, setUpModule] diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx index 90f36b40d14d7..6fcfea1038a04 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx @@ -35,7 +35,7 @@ type StatusReducerAction = jobSummaries: FetchJobStatusResponsePayload; datafeedSetupResults: SetupMlModuleResponsePayload['datafeeds']; } - | { type: 'failedSetup' } + | { type: 'failedSetup'; reason?: string } | { type: 'fetchingJobStatuses' } | { type: 'fetchedJobStatuses'; @@ -131,7 +131,7 @@ const createStatusReducer = }), {} as Record ), - setupStatus: { type: 'failed', reasons: ['unknown'] }, + setupStatus: { type: 'failed', reasons: action.reason ? [action.reason] : ['unknown'] }, }; } case 'fetchingJobStatuses': { diff --git a/x-pack/plugins/infra/public/containers/ml/api/ml_cleanup.ts b/x-pack/plugins/infra/public/containers/ml/api/ml_cleanup.ts index e2d22cd45bc11..d4e8152553244 100644 --- a/x-pack/plugins/infra/public/containers/ml/api/ml_cleanup.ts +++ b/x-pack/plugins/infra/public/containers/ml/api/ml_cleanup.ts @@ -37,7 +37,7 @@ export const callDeleteJobs = async ( }; export const callGetJobDeletionTasks = async (fetch: HttpHandler) => { - const jobDeletionTasksResponse = await fetch('/internal/ml/jobs/deleting_jobs_tasks', { + const jobDeletionTasksResponse = await fetch('/internal/ml/jobs/blocking_jobs_tasks', { version: '1', }); @@ -86,7 +86,7 @@ export const deleteJobsResponsePayloadRT = rt.record( export type DeleteJobsResponsePayload = rt.TypeOf; export const getJobDeletionTasksResponsePayloadRT = rt.type({ - jobIds: rt.array(rt.string), + jobs: rt.array(rt.record(rt.string, rt.string)), }); export const stopDatafeedsRequestPayloadRT = rt.type({ diff --git a/x-pack/plugins/infra/public/containers/ml/infra_ml_cleanup.tsx b/x-pack/plugins/infra/public/containers/ml/infra_ml_cleanup.tsx index 87d367ea56ff3..a5c89e93b0f63 100644 --- a/x-pack/plugins/infra/public/containers/ml/infra_ml_cleanup.tsx +++ b/x-pack/plugins/infra/public/containers/ml/infra_ml_cleanup.tsx @@ -46,8 +46,10 @@ const waitUntilJobsAreDeleted = async ( ) => { const moduleJobIds = jobTypes.map((jobType) => getJobId(spaceId, sourceId, jobType)); while (true) { - const { jobIds: jobIdsBeingDeleted } = await callGetJobDeletionTasks(fetch); - const needToWait = jobIdsBeingDeleted.some((jobId) => moduleJobIds.includes(jobId)); + const { jobs } = await callGetJobDeletionTasks(fetch); + const needToWait = jobs + .flatMap((job) => Object.keys(job)) + .some((jobId) => moduleJobIds.includes(jobId)); if (needToWait) { await timeout(1000); diff --git a/x-pack/plugins/infra/public/containers/ml/infra_ml_module.tsx b/x-pack/plugins/infra/public/containers/ml/infra_ml_module.tsx index 22376648ca003..e82c5423389b3 100644 --- a/x-pack/plugins/infra/public/containers/ml/infra_ml_module.tsx +++ b/x-pack/plugins/infra/public/containers/ml/infra_ml_module.tsx @@ -99,6 +99,9 @@ export const useInfraMLModule = ({ createPromise: async () => { return await moduleDescriptor.cleanUpModule(spaceId, sourceId, services.http.fetch); }, + onReject: (e) => { + throw new Error(`Failed to clean up previous ML job: ${e}`); + }, }, [spaceId, sourceId] ); @@ -121,8 +124,8 @@ export const useInfraMLModule = ({ .then(() => { setUpModule(selectedIndices, start, end, filter, partitionField); }) - .catch(() => { - dispatchModuleStatus({ type: 'failedSetup' }); + .catch((e) => { + dispatchModuleStatus({ type: 'failedSetup', reason: e.toString() }); }); }, [cleanUpModule, dispatchModuleStatus, setUpModule] diff --git a/x-pack/plugins/infra/public/containers/ml/infra_ml_module_status.tsx b/x-pack/plugins/infra/public/containers/ml/infra_ml_module_status.tsx index fc41e67c2bd2c..ea222080d410c 100644 --- a/x-pack/plugins/infra/public/containers/ml/infra_ml_module_status.tsx +++ b/x-pack/plugins/infra/public/containers/ml/infra_ml_module_status.tsx @@ -35,7 +35,7 @@ type StatusReducerAction = jobSummaries: FetchJobStatusResponsePayload; datafeedSetupResults: SetupMlModuleResponsePayload['datafeeds']; } - | { type: 'failedSetup' } + | { type: 'failedSetup'; reason?: string } | { type: 'fetchingJobStatuses' } | { type: 'fetchedJobStatuses'; @@ -131,7 +131,7 @@ const createStatusReducer = }), {} as Record ), - setupStatus: { type: 'failed', reasons: ['unknown'] }, + setupStatus: { type: 'failed', reasons: action.reason ? [action.reason] : ['unknown'] }, }; } case 'fetchingJobStatuses': { diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx index 2de3ee7bbb301..8003c0c9ece1f 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx @@ -18,6 +18,8 @@ import { EuiComboBox } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { EuiLoadingSpinner } from '@elastic/eui'; import { useUiTracker } from '@kbn/observability-shared-plugin/public'; +import { EuiCallOut } from '@elastic/eui'; +import { EuiCode } from '@elastic/eui'; import { useSourceContext } from '../../../../../../containers/metrics_source'; import { useMetricK8sModuleContext } from '../../../../../../containers/ml/modules/metrics_k8s/module'; import { useMetricHostsModuleContext } from '../../../../../../containers/ml/modules/metrics_hosts/module'; @@ -191,6 +193,12 @@ export const JobSetupScreen = (props: Props) => { defaultMessage="Something went wrong creating the necessary ML jobs." /> + {setupStatus.reasons.map((errorMessage, i) => ( + + {errorMessage} + + ))} + { ); }; + +const errorCalloutTitle = i18n.translate('xpack.infra.ml.steps.setupProcess.errorCalloutTitle', { + defaultMessage: 'An error occurred', +}); From 825ef56da5e4bb3021f2b4da2c3b9f661de0c5eb Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Thu, 5 Oct 2023 10:45:11 +0100 Subject: [PATCH 116/170] [Logs+] Add timed feedback toast (#167682) ## Summary Closes https://github.com/elastic/kibana/issues/166968 Adds a toast message asking for (optional) feedback when navigating from Observability Onboarding > Observability Log Explorer (via the Explore Logs button) after three minutes. The origin is attached to the history location state as part of the Locator. ## State machine A lightweight state machine handles the origin interpreting. We will very likely have more origins in the future. ![Screenshot 2023-10-02 at 17 33 41](https://github.com/elastic/kibana/assets/471693/b0f9ba81-b857-4185-a2dd-8049fae43932) ## Reviewer hints - Start the flow at `/app/observabilityOnboarding/customLogs`, continue to the last step of the wizard, click the "Explore logs" button to navigate to the Observability Log Explorer. - You can alter the `FEEDBACK_DELAY` constant for easier testing. - **Only** the onboarding origin should trigger the feedback toast. - Moves the feedback link to Observability shared to avoid cyclic dependency issues. ## Screenshot ![Screenshot 2023-10-03 at 14 45 21](https://github.com/elastic/kibana/assets/471693/8c5f0ac0-43a5-44f7-a361-4ea2f66e42b8) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Marco Antonio Ghiani --- .../locators/observability_log_explorer.ts | 11 ++- .../common/locators/index.ts | 1 + .../common/locators/utils/helpers.ts | 6 +- .../observability_log_explorer.tsx | 12 ++- .../components/log_explorer_top_nav_menu.tsx | 6 +- .../public/plugin.ts | 3 +- .../public/routes/main/main_route.tsx | 8 +- .../public/state_machines/index.ts | 8 ++ .../origin_interpreter/src/component.tsx | 29 ++++++ .../origin_interpreter/src/constants.ts | 9 ++ .../origin_interpreter/src/defaults.ts | 8 ++ .../origin_interpreter/src/lazy_component.tsx | 16 ++++ .../src/location_state_service.ts | 27 ++++++ .../origin_interpreter/src/notifications.tsx | 53 +++++++++++ .../origin_interpreter/src/state_machine.ts | 88 +++++++++++++++++++ .../origin_interpreter/src/types.ts | 32 +++++++ .../public/types.ts | 10 ++- .../observability_log_explorer/tsconfig.json | 7 +- .../app/custom_logs/install_elastic_agent.tsx | 1 + .../app/header_action_menu/index.tsx | 3 +- .../app/system_logs/install_elastic_agent.tsx | 5 +- .../observability_shared/common/index.ts | 2 + 22 files changed, 325 insertions(+), 20 deletions(-) create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/index.ts create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/component.tsx create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/constants.ts create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/defaults.ts create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/lazy_component.tsx create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/location_state_service.ts create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/notifications.tsx create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/state_machine.ts create mode 100644 x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/types.ts diff --git a/packages/deeplinks/observability/locators/observability_log_explorer.ts b/packages/deeplinks/observability/locators/observability_log_explorer.ts index e5392712f76b5..37bbf75f122f2 100644 --- a/packages/deeplinks/observability/locators/observability_log_explorer.ts +++ b/packages/deeplinks/observability/locators/observability_log_explorer.ts @@ -6,9 +6,18 @@ * Side Public License, v 1. */ +import { SerializableRecord } from '@kbn/utility-types'; import { LogExplorerNavigationParams } from './log_explorer'; -export type DatasetLocatorParams = LogExplorerNavigationParams; +// Will become a union once we have more origins +export interface ObservabilityLogExplorerLocationState extends SerializableRecord { + origin?: { + id: 'application-log-onboarding'; + }; +} + +export type DatasetLocatorParams = LogExplorerNavigationParams & + ObservabilityLogExplorerLocationState; // All datasets locator export const ALL_DATASETS_LOCATOR_ID = 'ALL_DATASETS_LOCATOR'; diff --git a/x-pack/plugins/observability_log_explorer/common/locators/index.ts b/x-pack/plugins/observability_log_explorer/common/locators/index.ts index 7571731a22221..e03ca4b22ac55 100644 --- a/x-pack/plugins/observability_log_explorer/common/locators/index.ts +++ b/x-pack/plugins/observability_log_explorer/common/locators/index.ts @@ -5,6 +5,7 @@ * 2.0. */ +export type { ObservabilityLogExplorerLocationState } from '@kbn/deeplinks-observability/locators'; import { AllDatasetsLocator } from './all_datasets'; import { SingleDatasetLocator } from './single_dataset'; diff --git a/x-pack/plugins/observability_log_explorer/common/locators/utils/helpers.ts b/x-pack/plugins/observability_log_explorer/common/locators/utils/helpers.ts index c22c000732839..5a93709e76522 100644 --- a/x-pack/plugins/observability_log_explorer/common/locators/utils/helpers.ts +++ b/x-pack/plugins/observability_log_explorer/common/locators/utils/helpers.ts @@ -20,7 +20,7 @@ export const constructLocatorPath = async (params: LocatorPathCosntructionParams const { isFilterPinned } = await import('@kbn/es-query'); const { - locatorParams: { filters, query, refreshInterval, timeRange, columns, sort }, + locatorParams: { filters, query, refreshInterval, timeRange, columns, sort, origin }, index, useHash, } = params; @@ -55,6 +55,8 @@ export const constructLocatorPath = async (params: LocatorPathCosntructionParams return { app: 'observability-log-explorer', path, - state: {}, + state: { + ...(origin ? { origin } : {}), + }, }; }; diff --git a/x-pack/plugins/observability_log_explorer/public/applications/observability_log_explorer.tsx b/x-pack/plugins/observability_log_explorer/public/applications/observability_log_explorer.tsx index 562ff3ba9d109..a8c6602f9d49f 100644 --- a/x-pack/plugins/observability_log_explorer/public/applications/observability_log_explorer.tsx +++ b/x-pack/plugins/observability_log_explorer/public/applications/observability_log_explorer.tsx @@ -5,20 +5,24 @@ * 2.0. */ -import { AppMountParameters, CoreStart } from '@kbn/core/public'; +import { CoreStart } from '@kbn/core/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { Route, Router, Routes } from '@kbn/shared-ux-router'; import React from 'react'; import ReactDOM from 'react-dom'; import { ObservablityLogExplorerMainRoute } from '../routes/main'; -import { ObservabilityLogExplorerPluginStart, ObservabilityLogExplorerStartDeps } from '../types'; +import { + ObservabilityLogExplorerAppMountParameters, + ObservabilityLogExplorerPluginStart, + ObservabilityLogExplorerStartDeps, +} from '../types'; import { useKibanaContextForPluginProvider } from '../utils/use_kibana'; export const renderObservabilityLogExplorer = ( core: CoreStart, pluginsStart: ObservabilityLogExplorerStartDeps, ownPluginStart: ObservabilityLogExplorerPluginStart, - appParams: AppMountParameters + appParams: ObservabilityLogExplorerAppMountParameters ) => { ReactDOM.render( ['services']; state$: BehaviorSubject; - theme$: AppMountParameters['theme$']; + theme$: ObservabilityLogExplorerAppMountParameters['theme$']; } export const LogExplorerTopNavMenu = ({ diff --git a/x-pack/plugins/observability_log_explorer/public/plugin.ts b/x-pack/plugins/observability_log_explorer/public/plugin.ts index 0bf10b5fab5b1..f3b3cffaf9701 100644 --- a/x-pack/plugins/observability_log_explorer/public/plugin.ts +++ b/x-pack/plugins/observability_log_explorer/public/plugin.ts @@ -23,6 +23,7 @@ import { OBSERVABILITY_LOG_EXPLORER_APP_ID } from '../common/constants'; import { logExplorerAppTitle } from '../common/translations'; import { renderObservabilityLogExplorer } from './applications/observability_log_explorer'; import type { + ObservabilityLogExplorerAppMountParameters, ObservabilityLogExplorerPluginSetup, ObservabilityLogExplorerPluginStart, ObservabilityLogExplorerSetupDeps, @@ -56,7 +57,7 @@ export class ObservabilityLogExplorerPlugin : AppNavLinkStatus.hidden, searchable: true, keywords: ['logs', 'log', 'explorer', 'logs explorer'], - mount: async (appMountParams) => { + mount: async (appMountParams: ObservabilityLogExplorerAppMountParameters) => { const [coreStart, pluginsStart, ownPluginStart] = await core.getStartServices(); return renderObservabilityLogExplorer( diff --git a/x-pack/plugins/observability_log_explorer/public/routes/main/main_route.tsx b/x-pack/plugins/observability_log_explorer/public/routes/main/main_route.tsx index b4eb120ba3cae..aece8474f0390 100644 --- a/x-pack/plugins/observability_log_explorer/public/routes/main/main_route.tsx +++ b/x-pack/plugins/observability_log_explorer/public/routes/main/main_route.tsx @@ -5,16 +5,17 @@ * 2.0. */ -import { AppMountParameters, CoreStart } from '@kbn/core/public'; +import { CoreStart } from '@kbn/core/public'; import React, { useState } from 'react'; import { BehaviorSubject } from 'rxjs'; import { LogExplorerTopNavMenu } from '../../components/log_explorer_top_nav_menu'; import { ObservabilityLogExplorerPageTemplate } from '../../components/page_template'; import { noBreadcrumbs, useBreadcrumbs } from '../../utils/breadcrumbs'; import { useKibanaContextForPlugin } from '../../utils/use_kibana'; - +import { ObservabilityLogExplorerAppMountParameters } from '../../types'; +import { LazyOriginInterpreter } from '../../state_machines/origin_interpreter/src/lazy_component'; export interface ObservablityLogExplorerMainRouteProps { - appParams: AppMountParameters; + appParams: ObservabilityLogExplorerAppMountParameters; core: CoreStart; } @@ -38,6 +39,7 @@ export const ObservablityLogExplorerMainRoute = ({ state$={state$} theme$={theme$} /> + diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/index.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/index.ts new file mode 100644 index 0000000000000..bad354ffa1b78 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 { createOriginInterpreterStateMachine } from './origin_interpreter/src/state_machine'; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/component.tsx b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/component.tsx new file mode 100644 index 0000000000000..87a96ec1dbb3f --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/component.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isDevMode } from '@kbn/xstate-utils'; +import { useInterpret } from '@xstate/react'; +import { + createOriginInterpreterStateMachine, + OriginInterpreterStateMachineDependencies, +} from './state_machine'; + +export const OriginInterpreter: React.FC = ({ + history, + toasts, +}) => { + useInterpret( + () => + createOriginInterpreterStateMachine({ + history, + toasts, + }), + { devTools: isDevMode() } + ); + + return null; +}; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/constants.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/constants.ts new file mode 100644 index 0000000000000..815483cfab7b4 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/constants.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const FEEDBACK_DELAY_MS = 30000; // 30 seconds +export const FEEDBACK_TOAST_LIFETIME_MS = 60000; // 1 minute diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/defaults.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/defaults.ts new file mode 100644 index 0000000000000..6545a48a0c846 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/defaults.ts @@ -0,0 +1,8 @@ +/* + * Copyright 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 DEFAULT_CONTEXT = undefined; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/lazy_component.tsx b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/lazy_component.tsx new file mode 100644 index 0000000000000..8c157c449d1be --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/lazy_component.tsx @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { withSuspense } from '@kbn/shared-ux-utility'; +import React from 'react'; + +export const LazyOriginInterpreter = withSuspense( + React.lazy(async () => ({ + default: (await import('./component')).OriginInterpreter, + })), + null +); diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/location_state_service.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/location_state_service.ts new file mode 100644 index 0000000000000..e0ce875d532e0 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/location_state_service.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { InvokeCreator } from 'xstate'; +import { ObservabilityLogExplorerHistory } from '../../../types'; +import { OriginInterpreterContext, OriginInterpreterEvent } from './types'; + +export const initializeFromLocationState = + ({ + history, + }: { + history: ObservabilityLogExplorerHistory; + }): InvokeCreator => + (context, event) => + (callback) => { + const origin = history.location?.state?.origin; + + if (!origin) { + return callback('INITIALIZED_WITH_NO_ORIGIN'); + } else if (origin.id === 'application-log-onboarding') { + return callback('INITIALIZED_WITH_ONBOARDING_ORIGIN'); + } + }; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/notifications.tsx b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/notifications.tsx new file mode 100644 index 0000000000000..64c5dcd157a3d --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/notifications.tsx @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IToasts } from '@kbn/core-notifications-browser'; +import { mountReactNode } from '@kbn/core-mount-utils-browser-internal'; +import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { LOGS_ONBOARDING_FEEDBACK_LINK } from '@kbn/observability-shared-plugin/common'; +import React from 'react'; +import { FEEDBACK_TOAST_LIFETIME_MS } from './constants'; + +export const createRequestFeedbackNotifier = (toasts: IToasts) => () => { + toasts.addInfo( + { + title: i18n.translate('xpack.observabilityLogExplorer.feedbackToast.title', { + defaultMessage: 'Tell us what you think!', + }), + text: mountReactNode( + <> +

    + {i18n.translate('xpack.observabilityLogExplorer.feedbackToast.text', { + defaultMessage: 'Share with us your onboarding experience and help us improve it.', + })} +

    + + + + + {i18n.translate('xpack.observabilityLogExplorer.feedbackToast.buttonText', { + defaultMessage: 'Take a quick survey', + })} + + + + + ), + iconType: 'editorComment', + }, + { + toastLifeTimeMs: FEEDBACK_TOAST_LIFETIME_MS, + } + ); +}; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/state_machine.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/state_machine.ts new file mode 100644 index 0000000000000..7ea65330d2a46 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/state_machine.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IToasts } from '@kbn/core-notifications-browser'; +import { createMachine, InterpreterFrom } from 'xstate'; +import { ObservabilityLogExplorerHistory } from '../../../types'; +import { FEEDBACK_DELAY_MS } from './constants'; +import { DEFAULT_CONTEXT } from './defaults'; +import { initializeFromLocationState } from './location_state_service'; +import { createRequestFeedbackNotifier } from './notifications'; +import { + OriginInterpreterContext, + OriginInterpreterEvent, + OriginInterpreterTypeState, +} from './types'; + +export const createPureOriginInterpreterStateMachine = (initialContext: OriginInterpreterContext) => + /** @xstate-layout N4IgpgJg5mDOIC5QBkD2UCiAPADgG1QCcxCAFQ1AMwEs8wA6AVwDtrWAXagQz2oC9IAYgDaABgC6iUDlSxqnVMykgsiAIwAOAMz0NagEwBWUdoBsWgOxaAnEYA0IAJ7rt9UxesWD+2xf2WAXwCHNExcAmIyCho6ejZ5bl4+NigAMQoAWwBVQjxBCEUGNgA3VABrBlDsfCIScipaIo5E-hT01GzchBLUAGMuBWYxcWHlGTlB5VUEYw1dfQ1RQ30LC0NrbX0HZwQ1CwAWemtDLTV991FTPWWtIJD0aoi66Ma45p5W5jTMnLySCkI9HwA0oRAy9Cq4VqUQasXinA+yS+7U6eG6zFK-UGw1GSBA4wSiimiFm80Wy1W60220QenoxlEjP2J32alEmmsdxAkJqkXqMSaCURKQAIgMuAA1ahgADu+UKb1KFQhDyhfJecPeSVF4qlsvRmIG1EUOIkY1khKUeOmPkM9D8pkMFm0bMpFhpM3Obi0tqdxk0Fi5PKeMIFbyF2q+YvYkulcv+RCBeBBYJVYV5z1hgoRkag0dj+p6WONQwkuOkFsm1sQtvt+kdztOojdHquonoah91h9WkWS1MQdVGdDr3hLSRUAAwop2BQ8KQuMwwHhYPKl4rypUhyH+aOtZ8pzO5wulyuDX0jSay2a8QSq6BphZTNZ6Po1O+jMy++YPScLEdLi0UwDG7Z9jkHdMdw1bNxxSadmFnVB50XZdVwTQFgXYUFCHBYNoV3TUIwPeDEOQ09YHPYsrxGG8KwmEtiQQJ8XzfD9DC-RkfycRB9msdt9kuBYNA0Dxlg0Adgm5bd8Og8McwPABlGN2DAEiuDYEg1yaJUt0gmSszk2CviUgZVJndSl0ISjL1LGjJFvSsGOrBAtC0Q4tFEc5DHE-YPI0XjTA9NRDCdI4rhEvR9HrEKIMefSwzHYVjOUsyEIszT0KTFMcLTOL1QMxLcxMlS1I0qyixs017Loy1GNc9zPMdHy-ICoLDDZehzg0Wx3z4vtbkkvD8oS-cBAgegIHFWAwHYBTlzAXpBnoYoPkmzhjPmxaS0EZAAEkFIAFQwAA5AB9A6AHlTsnAAJABBY6AHEMAU8t8UcolnOE-9fLWZ9NEsAwgtc9ttG6p0fQsQCNFitVMxGoixomqaZrmugtsUZbVqNDb0cGQQslIEU7qO07iYOu6FIwA7Tqp5AMEnA7dou463rvJyH1pETOssQx-u0Lwtm43Yzjtbz1jZGwDg2Ab7j04a90RyBkZjabZs2paVt4NaUjRhb8fJynqdpjB6cZ5mzoAJRey7rdO1I7t25AsmttmPqtTmEG+nm-usAHBba9rOp67trGffz-Nh4cCJgxFlbWrg1b1jHmDiCA6AJomSYwMmSaNmm6YZpmWbd+jPs9s5PFff19jWZsDH2IWdk7MP7UdUx-GbdxTGbKOoIK0b45R9W8ZLNOM8NqmC9NouLdO63Douu2Hadl2MFL2rnMr-8jHZWvjEFxvgcZehTn0fZIr48WYcG6SFcI+SkYTpONbHxgcB1qNdTjLSN2VIb4aK0fkPVWqNX6Y3fp-PM39CwYgvNia81V3plw9ioGsbI1CvnfJ5SwtdTB4OBmoF83k+KmHcCcNyN85Z5UAQ-ccIDE5gNHhAj+ONoExj1PGQgAIspYVTAAkcdC47jWfkw-Wb9WHrXYQWGU1kEF2XNCgxib52RYLZL9PBBDhadncPQEwfF-BXGWKIBYfd4pAPoSI4eyclqQLYcVVKMYyq-x6P-O+tDY5JAYS-Zhqc7FSIcaVSyciSxVUUZvT2KjMGsRwQcJ8Wjm7sUwdYEOlgnxOk5LfeWHjDLCJVowke4iWFQMCeZZxmVMLYVwu4wRnj+DeLESnJgkjdYpSCSQEJ1EN73jQQgFR+h6TnGsL5TQQlz5BWCnMEwEsTGeSipk6hcNam5K8eNXoR4kKPQoO-WATBWCDwgIIXax1dpMzuntAAWjnScLMDqWwusgU6j17mE1OndUgu1ukc16bYQ4ngyHuDDs2ICgVtFrB+syICfse5QxsGY++dSkbrIQnOLZqAdnjzAIIQ2p0JS7QwAAdVOoTcmGARRfPLr098T5T6+T4s6RYWhvIen0J5O0TLgpkPWN3FY8KcmFXqWsjZeA0UYuoOnLFJLs7XVufcx5pAHqm1erRZBESqWdh0EsWu-kiG1zWEFDQJxdAbHaqIYZVxnQSUWdHWSAqkXCtFTgXZ-i4LCpPKhFxcC3HZOWXa5WyLSKOudS0r4JFjwoTPBVeRFLUHTF+UcJ8ZCPAwpBUFPi7kNjnGlm+c1fLfUHPoAG1F2ynXNKgWGpC7qVyCAqcmPhOUBExxWYKwtDqS3BvLW6iNFEo2hMQeEnpcbz4JoBcm4FZC01V0NWoHuYd8F9SCJJZgqAIBwGUI26CA7vnTAALSgp2Duu0KTj0npPVFPNTaWB+ogFuyl0wj7aI0AMwFBxOx8ydG+C9trRptB+LkW9saazOmNf5aZ+CfTMjai+PYngjCdgOJ5bQX6B6Ix1BwuMAHGLuFbPg0+6xTV6EuMyK1UkfVNrta6lFlbu2YecsYAZjciGms8qyVlhhfxRQ7F2KW58Fh+2QwjR+rTTLtMILRz22HtHtRYhyN87gpZMoExY4R4nensR0E6PQz5WTsm+h6Tw7ZvIwuZBSZ8stSM0PzUrKxoDCkp1U9MCW9JnQzuGRgvT2ilhTMNSk8+axOz7CU0I1Z+SfFFNTlrcV9jwGoPZnexA5hiEue0+5kSx9-xgxScJXiWqFkWaWeRgtoi7NLXFXQBz6gjDPq8H7KkAkbDpd0DYfs6wTGdiC4ihpJWJFQPzJwiruwRIMf8rxXyzZmSdmPi+VyfFJawfEoYDrzan7WJi2W+xbSymWQG4Y0wnURvNYg0yiZ-ksHn20LxXsIUSMbpQ8AoVVGRXtoG05zTrmdOaDS9oshL5hkUL9D3KKVD8s2ru5Y1tj2g17OvQNtYcwZ2smy+Qp8WggrOnbCHYCLmNX6CW9eiHgb22YoG2cDqrJWR+Dwf6DQaaTG6GluJNy13nR44LUWzZROXWhq7eRAbiXnNabc7pr7zdDV7cQ+1CbthnyBkXUAA */ + createMachine( + { + context: initialContext, + predictableActionArguments: true, + id: 'OriginInterpreter', + initial: 'uninitialized', + states: { + uninitialized: { + always: 'initializingFromLocationState', + }, + initializingFromLocationState: { + invoke: { + src: 'initializeFromLocationState', + }, + on: { + INITIALIZED_WITH_NO_ORIGIN: '#done', + INITIALIZED_WITH_ONBOARDING_ORIGIN: '#onboarding', + }, + }, + onboarding: { + id: 'onboarding', + initial: 'waiting', + states: { + waiting: { + after: { + [FEEDBACK_DELAY_MS]: { + target: '#done', + actions: ['requestFeedback'], + }, + }, + }, + }, + }, + done: { + id: 'done', + type: 'final', + }, + }, + }, + { + actions: {}, + guards: {}, + } + ); + +export interface OriginInterpreterStateMachineDependencies { + initialContext?: OriginInterpreterContext; + history: ObservabilityLogExplorerHistory; + toasts: IToasts; +} + +export const createOriginInterpreterStateMachine = ({ + initialContext = DEFAULT_CONTEXT, + history, + toasts, +}: OriginInterpreterStateMachineDependencies) => + createPureOriginInterpreterStateMachine(initialContext).withConfig({ + actions: { + requestFeedback: createRequestFeedbackNotifier(toasts), + }, + services: { + initializeFromLocationState: initializeFromLocationState({ history }), + }, + }); + +export type OriginInterpreterService = InterpreterFrom; diff --git a/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/types.ts b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/types.ts new file mode 100644 index 0000000000000..47ee2d062c182 --- /dev/null +++ b/x-pack/plugins/observability_log_explorer/public/state_machines/origin_interpreter/src/types.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type OriginInterpreterContext = OriginInterpreterTypeState['context']; + +type DefaultOriginInterpreterContext = undefined; + +export type OriginInterpreterEvent = + | { + type: 'INITIALIZED_WITH_NO_ORIGIN'; + } + | { + type: 'INITIALIZED_WITH_ONBOARDING_ORIGIN'; + }; + +export type OriginInterpreterTypeState = + | { + value: 'uninitialized'; + context: DefaultOriginInterpreterContext; + } + | { + value: 'onboarding'; + context: DefaultOriginInterpreterContext; + } + | { + value: 'done'; + context: DefaultOriginInterpreterContext; + }; diff --git a/x-pack/plugins/observability_log_explorer/public/types.ts b/x-pack/plugins/observability_log_explorer/public/types.ts index a4596995a4a7b..82045faea76e8 100644 --- a/x-pack/plugins/observability_log_explorer/public/types.ts +++ b/x-pack/plugins/observability_log_explorer/public/types.ts @@ -11,7 +11,11 @@ import { DiscoverStart } from '@kbn/discover-plugin/public'; import { ObservabilitySharedPluginStart } from '@kbn/observability-shared-plugin/public'; import { ServerlessPluginStart } from '@kbn/serverless/public'; import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; -import { ObservabilityLogExplorerLocators } from '../common/locators'; +import { AppMountParameters, ScopedHistory } from '@kbn/core/public'; +import { + ObservabilityLogExplorerLocators, + ObservabilityLogExplorerLocationState, +} from '../common/locators'; export interface ObservabilityLogExplorerPluginSetup { locators: ObservabilityLogExplorerLocators; @@ -33,3 +37,7 @@ export interface ObservabilityLogExplorerStartDeps { serverless?: ServerlessPluginStart; share: SharePluginStart; } + +export type ObservabilityLogExplorerHistory = ScopedHistory; +export type ObservabilityLogExplorerAppMountParameters = + AppMountParameters; diff --git a/x-pack/plugins/observability_log_explorer/tsconfig.json b/x-pack/plugins/observability_log_explorer/tsconfig.json index 9a0fb5d43e7b9..a789445599923 100644 --- a/x-pack/plugins/observability_log_explorer/tsconfig.json +++ b/x-pack/plugins/observability_log_explorer/tsconfig.json @@ -23,13 +23,16 @@ "@kbn/core-chrome-browser", "@kbn/config-schema", "@kbn/kibana-utils-plugin", - "@kbn/core-application-browser", "@kbn/discover-plugin", "@kbn/es-query", "@kbn/react-kibana-mount", "@kbn/share-plugin", "@kbn/io-ts-utils", - "@kbn/deeplinks-observability" + "@kbn/deeplinks-observability", + "@kbn/core-notifications-browser", + "@kbn/core-mount-utils-browser-internal", + "@kbn/xstate-utils", + "@kbn/shared-ux-utility" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx index 3f2b61a833a58..bc9b34bd608f3 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx @@ -72,6 +72,7 @@ export function InstallElasticAgent() { await singleDatasetLocator!.navigate({ integration, dataset: enforcedDatasetName, + origin: { id: 'application-log-onboarding' }, }); } diff --git a/x-pack/plugins/observability_onboarding/public/components/app/header_action_menu/index.tsx b/x-pack/plugins/observability_onboarding/public/components/app/header_action_menu/index.tsx index 2cd68d599b48c..f4a883dd24fd7 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/header_action_menu/index.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/header_action_menu/index.tsx @@ -7,11 +7,10 @@ import { EuiButton } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { LOGS_ONBOARDING_FEEDBACK_LINK } from '@kbn/observability-shared-plugin/common'; import React from 'react'; import { useLocation } from 'react-router-dom'; -const LOGS_ONBOARDING_FEEDBACK_LINK = 'https://ela.st/logs-onboarding-feedback'; - export function ObservabilityOnboardingHeaderActionMenu() { const location = useLocation(); const normalizedPathname = location.pathname.replace(/\/$/, ''); diff --git a/x-pack/plugins/observability_onboarding/public/components/app/system_logs/install_elastic_agent.tsx b/x-pack/plugins/observability_onboarding/public/components/app/system_logs/install_elastic_agent.tsx index 385ba48e9b3be..8e99dc2ee1f59 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/system_logs/install_elastic_agent.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/system_logs/install_elastic_agent.tsx @@ -84,13 +84,16 @@ export function InstallElasticAgent() { async function onContinue() { if (systemIntegrationStatus === 'rejected') { - await allDataSetsLocator!.navigate({}); + await allDataSetsLocator!.navigate({ + origin: { id: 'application-log-onboarding' }, + }); return; } await singleDatasetLocator!.navigate({ integration: 'system', dataset: 'system.syslog', + origin: { id: 'application-log-onboarding' }, }); } diff --git a/x-pack/plugins/observability_shared/common/index.ts b/x-pack/plugins/observability_shared/common/index.ts index 7ecf64366dbca..c25eee3e0b02b 100644 --- a/x-pack/plugins/observability_shared/common/index.ts +++ b/x-pack/plugins/observability_shared/common/index.ts @@ -137,3 +137,5 @@ export { export { ObservabilityTriggerId } from './trigger_ids'; export { getInspectResponse } from './utils/get_inspect_response'; + +export const LOGS_ONBOARDING_FEEDBACK_LINK = 'https://ela.st/logs-onboarding-feedback'; From 6990b1a38c9b264d8c251a2cce83697a060600fa Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 5 Oct 2023 11:49:37 +0200 Subject: [PATCH 117/170] [Discover] Fix tabs border above the grid (#167967) ## Summary Since we are not merging https://github.com/elastic/kibana/pull/167179 yet, I cherry-picked a fix for the issue with the tabs border above the grid which was introduced in https://github.com/elastic/kibana/pull/165866 and can be backported to 8.11. Before: Screenshot 2023-10-04 at 11 01 13 Screenshot 2023-10-04 at 11 01 52 After: Screenshot 2023-10-04 at 11 02 55 Screenshot 2023-10-04 at 11 03 13 --------- Co-authored-by: Michael Marcialis --- .../main/components/layout/discover_layout.scss | 4 ++++ .../components/view_mode_toggle/view_mode_toggle.tsx | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.scss b/src/plugins/discover/public/application/main/components/layout/discover_layout.scss index 88da97d6f5333..d3978fe1c1d82 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.scss +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.scss @@ -53,6 +53,10 @@ discover-app { position: relative; overflow: hidden; height: 100%; + + .euiDataGrid__controls { + border-top: none; + } } .dscPageContent--centered { diff --git a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx index b5674b6833ada..63fcbcc40db37 100644 --- a/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx +++ b/src/plugins/discover/public/components/view_mode_toggle/view_mode_toggle.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { EuiTab, EuiTabs, useEuiPaddingSize, useEuiTheme } from '@elastic/eui'; +import { EuiTab, EuiTabs, useEuiTheme } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; import { SHOW_FIELD_STATISTICS } from '@kbn/discover-utils'; @@ -25,8 +25,7 @@ export const DocumentViewModeToggle = ({ const { uiSettings } = useDiscoverServices(); const tabsCss = css` - padding: 0 ${useEuiPaddingSize('s')}; - border-bottom: ${viewMode === VIEW_MODE.AGGREGATED_LEVEL ? euiTheme.border.thin : 'none'}; + padding: 0 ${euiTheme.size.s}; `; const showViewModeToggle = uiSettings.get(SHOW_FIELD_STATISTICS) ?? false; @@ -36,7 +35,7 @@ export const DocumentViewModeToggle = ({ } return ( - + setDiscoverViewMode(VIEW_MODE.DOCUMENT_LEVEL)} From 4874d5962dd065ef036065830513493e681d71b9 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:51:27 +0200 Subject: [PATCH 118/170] [Search] Add delete and copy connector ID functionality (#168020) ## Summary This adds copy id and delete actions to the Serverless connectors UI. --- .../kbn-search-connectors/lib/cancel_syncs.ts | 98 ++++++++-------- .../serverless_search/common/i18n_string.ts | 14 +++ .../connectors/connectors_table.tsx | 83 +++++++++++++- .../connectors/delete_connector_modal.tsx | 107 ++++++++++++++++++ .../components/connectors/edit_connector.tsx | 75 ++++++++++-- .../components/connectors_overview.tsx | 9 +- .../components/connectors_router.tsx | 6 +- .../server/routes/connectors_routes.ts | 55 +++++++++ 8 files changed, 378 insertions(+), 69 deletions(-) create mode 100644 x-pack/plugins/serverless_search/public/application/components/connectors/delete_connector_modal.tsx diff --git a/packages/kbn-search-connectors/lib/cancel_syncs.ts b/packages/kbn-search-connectors/lib/cancel_syncs.ts index 2a331e19d4cb7..c706dd7d311e3 100644 --- a/packages/kbn-search-connectors/lib/cancel_syncs.ts +++ b/packages/kbn-search-connectors/lib/cancel_syncs.ts @@ -10,64 +10,72 @@ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { CONNECTORS_INDEX, CONNECTORS_JOBS_INDEX } from '..'; import { SyncStatus } from '../types/connectors'; +import { isIndexNotFoundException } from '../utils/identify_exceptions'; export const cancelSyncs = async ( client: ElasticsearchClient, connectorId: string ): Promise => { - await client.updateByQuery({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': connectorId, + try { + await client.updateByQuery({ + index: CONNECTORS_JOBS_INDEX, + query: { + bool: { + must: [ + { + term: { + 'connector.id': connectorId, + }, }, - }, - { - terms: { - status: [SyncStatus.PENDING, SyncStatus.SUSPENDED], + { + terms: { + status: [SyncStatus.PENDING, SyncStatus.SUSPENDED], + }, }, - }, - ], + ], + }, }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELED}'; + script: { + lang: 'painless', + source: `ctx._source['status'] = '${SyncStatus.CANCELED}'; ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}'; ctx._source['canceled_at'] = '${new Date(Date.now()).toISOString()}'; ctx._source['completed_at'] = '${new Date(Date.now()).toISOString()}';`, - }, - }); - await client.updateByQuery({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': connectorId, + }, + }); + await client.updateByQuery({ + index: CONNECTORS_JOBS_INDEX, + query: { + bool: { + must: [ + { + term: { + 'connector.id': connectorId, + }, }, - }, - { - terms: { - status: [SyncStatus.IN_PROGRESS], + { + terms: { + status: [SyncStatus.IN_PROGRESS], + }, }, - }, - ], + ], + }, }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELING}'; + script: { + lang: 'painless', + source: `ctx._source['status'] = '${SyncStatus.CANCELING}'; ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}';`, - }, - }); - await client.update({ - doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false }, - id: connectorId, - index: CONNECTORS_INDEX, - }); + }, + }); + await client.update({ + doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false }, + id: connectorId, + index: CONNECTORS_INDEX, + }); + } catch (error) { + if (isIndexNotFoundException(error)) { + return; + } + throw error; + } }; diff --git a/x-pack/plugins/serverless_search/common/i18n_string.ts b/x-pack/plugins/serverless_search/common/i18n_string.ts index 37bd8f0ff51b4..1d2bfcc4add26 100644 --- a/x-pack/plugins/serverless_search/common/i18n_string.ts +++ b/x-pack/plugins/serverless_search/common/i18n_string.ts @@ -60,3 +60,17 @@ export const CONNECTORS_LABEL: string = i18n.translate('xpack.serverlessSearch.c export const CONNECTOR_LABEL: string = i18n.translate('xpack.serverlessSearch.connector', { defaultMessage: 'Connector', }); + +export const DELETE_CONNECTOR_LABEL = i18n.translate( + 'xpack.serverlessSearch.connectors.deleteConnectorLabel', + { + defaultMessage: 'Delete connector', + } +); + +export const COPY_CONNECTOR_ID_LABEL = i18n.translate( + 'xpack.serverlessSearch.connectors.copyConnectorIdLabel', + { + defaultMessage: 'Copy connector id', + } +); diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx index 6262cc8a12e38..6ab1e66279250 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/connectors_table.tsx @@ -6,10 +6,12 @@ */ import { + copyToClipboard, Criteria, EuiBadge, EuiBasicTable, EuiBasicTableColumn, + EuiButtonIcon, EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, @@ -21,6 +23,7 @@ import { EuiSelect, EuiSpacer, EuiText, + EuiToolTip, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -33,18 +36,28 @@ import { } from '@kbn/search-connectors'; import React, { useEffect, useState } from 'react'; import { generatePath } from 'react-router-dom'; -import { CONNECTORS_LABEL } from '../../../../common/i18n_string'; +import { + CONNECTORS_LABEL, + CONNECTOR_LABEL, + COPY_CONNECTOR_ID_LABEL, + DELETE_CONNECTOR_LABEL, +} from '../../../../common/i18n_string'; import { useConnectors } from '../../hooks/api/use_connectors'; import { useConnectorTypes } from '../../hooks/api/use_connector_types'; +import { useKibanaServices } from '../../hooks/use_kibana'; import { EDIT_CONNECTOR_PATH } from '../connectors_router'; +import { DeleteConnectorModal } from './delete_connector_modal'; export const ConnectorsTable: React.FC = () => { const [pageIndex, setPageIndex] = useState(0); const [pageSize, setPageSize] = useState(10); const [query, setQuery] = useState(''); - const { data, isError } = useConnectors(); + const { data, isError, isLoading } = useConnectors(); const { data: connectorTypes } = useConnectorTypes(); + const { + application: { navigateToUrl }, + } = useKibanaServices(); type Filter = 'service_type' | 'name' | 'last_sync_status' | 'description' | 'service_type'; const [filter, setFilter] = useState('name'); @@ -102,7 +115,9 @@ export const ConnectorsTable: React.FC = () => { field: 'name', name: nameLabel, render: (name: string, connector: Connector) => ( - + navigateToUrl(generatePath(EDIT_CONNECTOR_PATH, { id: connector.id }))} + > {name || connector.id} ), @@ -172,6 +187,37 @@ export const ConnectorsTable: React.FC = () => { ), }, + { + field: 'last_sync_status', + name: syncStatusLabel, + render: (syncStatus: SyncStatus | null) => + syncStatus ? ( + {syncStatusToText(syncStatus)} + ) : ( + + {i18n.translate('xpack.serverlessSearch.connectors.notSyncedLabel', { + defaultMessage: 'Not synced', + })} + + ), + }, + { + actions: [ + { + name: COPY_CONNECTOR_ID_LABEL, + description: COPY_CONNECTOR_ID_LABEL, + icon: 'copy', + type: 'icon', + onClick: (connector: Connector) => copyToClipboard(connector.id), + }, + { + render: (connector: Connector) => , + }, + ], + name: i18n.translate('xpack.serverlessSearch.connectors.actionsLabel', { + defaultMessage: 'Actions', + }), + }, ]; const items = @@ -203,11 +249,11 @@ export const ConnectorsTable: React.FC = () => { connectors: {CONNECTORS_LABEL}, items: ( - - - + - + ), - count: , + count: , }} /> @@ -215,6 +261,7 @@ export const ConnectorsTable: React.FC = () => { ) => { if (page) { @@ -232,3 +279,27 @@ export const ConnectorsTable: React.FC = () => { ); }; + +const DeleteConnectorModalAction: React.FC<{ connector: Connector }> = ({ connector }) => { + const [modalIsOpen, setModalIsOpen] = useState(false); + + return ( + <> + {modalIsOpen && ( + setModalIsOpen(false)} + connectorId={connector.id} + connectorName={connector.name || CONNECTOR_LABEL} + /> + )} + + setModalIsOpen(true)} + iconType="trash" + color="danger" + /> + + + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/delete_connector_modal.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/delete_connector_modal.tsx new file mode 100644 index 0000000000000..7e9ebb631fc43 --- /dev/null +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/delete_connector_modal.tsx @@ -0,0 +1,107 @@ +/* + * Copyright 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 { EuiConfirmModal, EuiFieldText, EuiForm, EuiFormRow } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { Connector } from '@kbn/search-connectors'; +import { useMutation } from '@tanstack/react-query'; +import React, { useEffect, useState } from 'react'; +import { useKibanaServices } from '../../hooks/use_kibana'; + +interface DeleteConnectorModalProps { + closeDeleteModal: () => void; + connectorId: string; + connectorName: string; + onSuccess?: () => void; +} + +export const DeleteConnectorModal: React.FC = ({ + connectorId, + connectorName, + closeDeleteModal, + onSuccess, +}) => { + const { http } = useKibanaServices(); + const { isLoading, isSuccess, mutate } = useMutation({ + mutationFn: async () => { + const result = await http.delete<{ connector: Connector }>( + `/internal/serverless_search/connectors/${connectorId}` + ); + return result.connector; + }, + }); + + useEffect(() => { + if (isSuccess) { + if (onSuccess) { + onSuccess(); + } + closeDeleteModal(); + } + }, [closeDeleteModal, isSuccess, onSuccess]); + + const [inputConnectorName, setInputConnectorName] = useState(''); + + return ( + { + closeDeleteModal(); + }} + onConfirm={() => { + mutate(); + }} + cancelButtonText={ + isLoading + ? i18n.translate('xpack.serverlessSearch.connectors.deleteModal.closeButton.title', { + defaultMessage: 'Close', + }) + : i18n.translate('xpack.serverlessSearch.connectors.deleteModal.cancelButton.title', { + defaultMessage: 'Cancel', + }) + } + confirmButtonText={i18n.translate( + 'xpack.serverlessSearch.connectors.deleteModal.confirmButton.title', + { + defaultMessage: 'Delete index', + } + )} + defaultFocusedButton="confirm" + buttonColor="danger" + confirmButtonDisabled={inputConnectorName.trim() !== connectorName} + isLoading={isLoading} + > +

    + {i18n.translate( + 'xpack.serverlessSearch.connectors.deleteModal.syncsWarning.connectorNameDescription', + { + defaultMessage: 'This action cannot be undone. Please type {connectorName} to confirm.', + values: { connectorName }, + } + )} +

    + + + setInputConnectorName(e.target.value)} + value={inputConnectorName} + /> + + +
    + ); +}; diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx index 8fda25a56e658..b41938f618cc2 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors/edit_connector.tsx @@ -7,26 +7,38 @@ import { EuiButton, EuiButtonIcon, + EuiContextMenu, EuiFlexGroup, EuiFlexItem, EuiPageTemplate, + EuiPopover, EuiSpacer, EuiText, } from '@elastic/eui'; import { useQuery } from '@tanstack/react-query'; import { Connector } from '@kbn/search-connectors'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; -import { CONNECTOR_LABEL } from '../../../../common/i18n_string'; +import { copyToClipboard } from '@elastic/eui'; +import { + CONNECTOR_LABEL, + COPY_CONNECTOR_ID_LABEL, + DELETE_CONNECTOR_LABEL, +} from '../../../../common/i18n_string'; import { useKibanaServices } from '../../hooks/use_kibana'; -import { BASE_CONNECTORS_PATH } from '../connectors_router'; import { EditName } from './edit_name'; import { EditServiceType } from './edit_service_type'; import { EditDescription } from './edit_description'; +import { DeleteConnectorModal } from './delete_connector_modal'; export const EditConnector: React.FC = () => { + const [deleteModalIsOpen, setDeleteModalIsOpen] = useState(false); + const [menuIsOpen, setMenuIsOpen] = useState(false); + const { id } = useParams<{ id: string }>(); + + useEffect(() => setDeleteModalIsOpen(false), [id, setDeleteModalIsOpen]); const { application: { navigateToUrl }, http, @@ -64,7 +76,7 @@ export const EditConnector: React.FC = () => { } actions={ - navigateToUrl(BASE_CONNECTORS_PATH)}> + navigateToUrl(`./`)}> {i18n.translate('xpack.serverlessSearch.connectors.goBack', { defaultMessage: 'Go back', })} @@ -86,13 +98,56 @@ export const EditConnector: React.FC = () => { - - setDeleteModalIsOpen(false)} + connectorId={connector.id} + connectorName={connector.name || CONNECTOR_LABEL} + onSuccess={() => navigateToUrl('./')} /> + )} + + setMenuIsOpen(!menuIsOpen)} + /> + } + isOpen={menuIsOpen} + closePopover={() => setMenuIsOpen(false)} + panelPaddingSize="none" + > + { + copyToClipboard(connector.id); + setMenuIsOpen(false); + }, + }, + { + name: DELETE_CONNECTOR_LABEL, + icon: 'trash', + onClick: () => { + setDeleteModalIsOpen(true); + }, + }, + ], + }, + ]} + /> +
    diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx index cd8fefc649c4a..1c766020b7b7c 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_overview.tsx @@ -20,16 +20,17 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useMutation } from '@tanstack/react-query'; import React, { useEffect } from 'react'; +import { generatePath } from 'react-router-dom'; import { LEARN_MORE_LABEL } from '../../../common/i18n_string'; import { PLUGIN_ID } from '../../../common'; import { useConnectors } from '../hooks/api/use_connectors'; import { useKibanaServices } from '../hooks/use_kibana'; import { EmptyConnectorsPrompt } from './connectors/empty_connectors_prompt'; import { ConnectorsTable } from './connectors/connectors_table'; -import { CREATE_CONNECTOR_PATH } from './connectors_router'; +import { EDIT_CONNECTOR_PATH } from './connectors_router'; export const ConnectorsOverview = () => { - const { data } = useConnectors(); + const { data, isLoading: connectorsLoading } = useConnectors(); const { application: { navigateToUrl }, http, @@ -51,7 +52,7 @@ export const ConnectorsOverview = () => { useEffect(() => { if (isSuccess) { - navigateToUrl(`${CREATE_CONNECTOR_PATH}/${connector?.id}`); + navigateToUrl(generatePath(EDIT_CONNECTOR_PATH, { id: connector?.id || '' })); } }, [connector, isSuccess, navigateToUrl]); @@ -121,7 +122,7 @@ export const ConnectorsOverview = () => {

    - {(data?.connectors || []).length > 0 ? ( + {connectorsLoading || (data?.connectors || []).length > 0 ? ( diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx index ef61b200835ad..9a17ef13c1b0e 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_router.tsx @@ -11,14 +11,12 @@ import { EditConnector } from './connectors/edit_connector'; import { ConnectorsOverview } from './connectors_overview'; export const BASE_CONNECTORS_PATH = 'connectors'; -export const CREATE_CONNECTOR_SLUG = `create_connector`; -export const EDIT_CONNECTOR_PATH = `${CREATE_CONNECTOR_SLUG}/:id`; -export const CREATE_CONNECTOR_PATH = `${CREATE_CONNECTOR_SLUG}`; +export const EDIT_CONNECTOR_PATH = `${BASE_CONNECTORS_PATH}/:id`; export const ConnectorsRouter: React.FC = () => { return ( - + diff --git a/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts b/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts index c1ee31f4326c9..b488cead97838 100644 --- a/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts +++ b/x-pack/plugins/serverless_search/server/routes/connectors_routes.ts @@ -9,8 +9,10 @@ import { schema } from '@kbn/config-schema'; import { CONNECTOR_DEFINITIONS, createConnector, + deleteConnectorById, fetchConnectorById, fetchConnectors, + updateConnectorConfiguration, updateConnectorNameAndDescription, updateConnectorServiceType, } from '@kbn/search-connectors'; @@ -196,4 +198,57 @@ export const registerConnectorsRoutes = ({ http, router }: RouteDependencies) => }); } ); + + router.delete( + { + path: '/internal/serverless_search/connectors/{connectorId}', + validate: { + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await deleteConnectorById(client.asCurrentUser, request.params.connectorId); + return response.ok({ + body: { + result, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); + + router.post( + { + path: '/internal/serverless_search/connectors/{connectorId}/configuration', + validate: { + body: schema.object({ + configuration: schema.recordOf( + schema.string(), + schema.oneOf([schema.string(), schema.number(), schema.boolean()]) + ), + }), + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + const result = await updateConnectorConfiguration( + client.asCurrentUser, + request.params.connectorId, + request.body.configuration + ); + + return response.ok({ + body: { + result, + }, + headers: { 'content-type': 'application/json' }, + }); + } + ); }; From 15a62fe5460230c46d6a61aecac2059b86692c9f Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 5 Oct 2023 12:40:40 +0200 Subject: [PATCH 119/170] [Synthetics] Fix project monitor private location editing (#168064) --- .../synthetics_private_location.test.ts | 2 ++ .../private_location/synthetics_private_location.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts index 87398936e1543..21dca2b05e0fe 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts @@ -19,6 +19,7 @@ import { formatSyntheticsPolicy } from '../formatters/private_formatters/format_ import { savedObjectsServiceMock } from '@kbn/core-saved-objects-server-mocks'; import { SyntheticsServerSetup } from '../../types'; import { PrivateLocationAttributes } from '../../runtime_types/private_locations'; +import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; describe('SyntheticsPrivateLocation', () => { const mockPrivateLocation: PrivateLocationAttributes = { @@ -77,6 +78,7 @@ describe('SyntheticsPrivateLocation', () => { }, coreStart: { savedObjects: savedObjectsServiceMock.createStartContract(), + elasticsearch: elasticsearchServiceMock.createStart(), }, } as unknown as SyntheticsServerSetup; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts index 69788a6f10ae0..d4e1a78977e36 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts @@ -356,7 +356,7 @@ export class SyntheticsPrivateLocation { async createPolicyBulk(newPolicies: NewPackagePolicyWithId[]) { const soClient = this.server.coreStart.savedObjects.createInternalRepository(); - const esClient = this.server.uptimeEsClient.baseESClient; + const esClient = this.server.coreStart.elasticsearch.client.asInternalUser; if (esClient && newPolicies.length > 0) { return await this.server.fleet.packagePolicyService.bulkCreate( soClient, @@ -368,8 +368,8 @@ export class SyntheticsPrivateLocation { async updatePolicyBulk(policiesToUpdate: NewPackagePolicyWithId[]) { const soClient = this.server.coreStart.savedObjects.createInternalRepository(); - const esClient = this.server.uptimeEsClient.baseESClient; - if (soClient && esClient && policiesToUpdate.length > 0) { + const esClient = this.server.coreStart.elasticsearch.client.asInternalUser; + if (policiesToUpdate.length > 0) { const { failedPolicies } = await this.server.fleet.packagePolicyService.bulkUpdate( soClient, esClient, @@ -384,8 +384,8 @@ export class SyntheticsPrivateLocation { async deletePolicyBulk(policyIdsToDelete: string[]) { const soClient = this.server.coreStart.savedObjects.createInternalRepository(); - const esClient = this.server.uptimeEsClient.baseESClient; - if (soClient && esClient && policyIdsToDelete.length > 0) { + const esClient = this.server.coreStart.elasticsearch.client.asInternalUser; + if (policyIdsToDelete.length > 0) { try { return await this.server.fleet.packagePolicyService.delete( soClient, @@ -403,7 +403,7 @@ export class SyntheticsPrivateLocation { async deleteMonitors(configs: HeartbeatConfig[], spaceId: string) { const soClient = this.server.coreStart.savedObjects.createInternalRepository(); - const esClient = this.server.uptimeEsClient.baseESClient; + const esClient = this.server.coreStart.elasticsearch.client.asInternalUser; const policyIdsToDelete = []; for (const config of configs) { From 2207928e63fa3900c13f9a8b76a0e5c2e59bfa92 Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Thu, 5 Oct 2023 12:52:41 +0200 Subject: [PATCH 120/170] [Log Explorer] Update serverless tests stability (#167482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary Update login logic, sorting and search algorithm to stabilize the flaky tests for Log Explorer. Closes #165915 Closes #165916 Closes #165975 Closes #166016 Closes #166672 Closes #166675 Closes #166817 Closes #167058 Closes #167189 Closes #167499 Closes #167515 Closes #167562 Closes #167567 Closes #167621 Closes #167664 Closes #167773 --------- Co-authored-by: Marco Antonio Ghiani Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../data_views/src/state_machine.ts | 5 ++- .../datasets/src/state_machine.ts | 9 +++++- .../integrations/src/state_machine.ts | 9 +++++- .../columns_selection.ts | 9 ++---- .../dataset_selection_state.ts | 13 ++++---- .../dataset_selector.ts | 5 ++- .../observability_log_explorer/header_menu.ts | 3 -- .../observability_log_explorer.ts | 31 ++++++++++++++++--- .../columns_selection.ts | 17 ++++------ .../dataset_selection_state.ts | 14 ++++----- .../dataset_selector.ts | 5 ++- .../filter_controls.ts | 6 ++-- .../observability_log_explorer/header_menu.ts | 4 --- 13 files changed, 73 insertions(+), 57 deletions(-) diff --git a/x-pack/plugins/log_explorer/public/state_machines/data_views/src/state_machine.ts b/x-pack/plugins/log_explorer/public/state_machines/data_views/src/state_machine.ts index 9f0aa9af396f3..55be0c470573f 100644 --- a/x-pack/plugins/log_explorer/public/state_machines/data_views/src/state_machine.ts +++ b/x-pack/plugins/log_explorer/public/state_machines/data_views/src/state_machine.ts @@ -146,7 +146,10 @@ export const createDataViewsStateMachine = ({ const searchParams = context.search; return context.cache.has(searchParams) ? Promise.resolve(context.cache.get(searchParams)) - : dataViews.getIdsWithTitle().then((views) => views.map(parseDataViewListItem)); + : dataViews + .getIdsWithTitle() + .then((views) => views.map(parseDataViewListItem)) + .then((views) => searchDataViews(views, searchParams)); }, }, }); diff --git a/x-pack/plugins/log_explorer/public/state_machines/datasets/src/state_machine.ts b/x-pack/plugins/log_explorer/public/state_machines/datasets/src/state_machine.ts index 005f41b18beaf..480d0f5bb8ff1 100644 --- a/x-pack/plugins/log_explorer/public/state_machines/datasets/src/state_machine.ts +++ b/x-pack/plugins/log_explorer/public/state_machines/datasets/src/state_machine.ts @@ -20,7 +20,7 @@ import type { export const createPureDatasetsStateMachine = ( initialContext: DefaultDatasetsContext = DEFAULT_CONTEXT ) => - /** @xstate-layout N4IgpgJg5mDOIC5QBECGAXVBldAnMqAtrAHQCuAdgJbXpWoA2VAXpAMQAyA8gILID6yHgBUe-LMIBKAUR4BZLAG0ADAF1EoAA4B7WFTraKGkAA9EAdmUBWEuYCMygJwBmc1YA0IAJ6IATFeUSO3NHewAOZWCrczC7XwBfeM80TBx8IlIGbVQIGig2CEMwEhoAN20Aa2KU7DwCYhIsnLyEMu0AYwwqQxVVXuMdPQMjJFMLO0dbOzC3Tx8EWJIA5WVnayiYuMTkjFr0hqbcinywXFxtXBJNBgwAMwvCEhq0+szso6hWinLO4d7+0aDfTdEagMwIOzTcwkXyrOIebx+RyTZx2NZWNEBRyQgAsVm2IGedQyjXe7CwskkAGEABKCERiCQyeRKNQDXTAwzGcF2ABsgTxqP8c0QVjFJCcvOcYRxvJlvhxOMcBKJ+zeOXJXEkwnponEUlkCgBWg5w25iD5AqsQoR82cOOhjmtdjFGLcmxVuxeJIgYAARtpKO0wFgCLh2gALPKq15sCk8al0oR6pmG1nqQGmkHmhA45w2KxhWE2kW57EkXkhcKRd2xT2pYkNX0BoMhsOR6NexuwNgmWCYdDFVC3Qe4AAUa2UAEo2DGff7AxRg6HUOGo8c58RjSAgWbRuDLDZ7E5XLbRfYK1XpjXonWkoSu2rSc1jgAxVBUBjsGTcPi6xkGiy267tm+4WlCMJwsKiIIAqYQkLE6KYk4uJhIk94UNovrwKMm44SaQygWCiAALS8qWZH1nsrzkNQtD0EwrAQOyhFcmBCBWFKCGODKp6lv4gSVqE14bLECT3nhz4fCxnKgmMCCOIqJCKc60HzL4ziTL4vjCREol2DiVHegcZLMZmrFyeCOK+KWaLwREDoibWWwSY+NHNouy7tuuUB4TJe7EbmkK2GeHEOkEV56c5RndlJeTvp+kD+UR8kGfmJAljBvgurYOnVvphnoUAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QBECGAXVsztgOgFcA7AS1PRNQBsSAvSAYgBkB5AQWQH1k2AVNgMoBRXgIDaABgC6iUAAcA9rBIUFRWSAAeiAGwBmAJx4DAdh0BWPXvMAWAIzn9BgDQgAnogAcdvDYP+dACYdfQk9e08AX0jXNExsXDwqBVQIMigGCDUwPDIANwUAaxy4rBx8ZNT0hHyFAGMMEjVJKRaNRWVVdSQtXUNjM0tre0dDVw8EG09A339PHU8wwMWw6NiMMsTKtKIMsAAnfYV9vDkqDAAzY4BbPFKEipSdqBqiAoaulraejpUm7tA2gQdhBMwkEhMJnMjhseh0Ek8nnGiEC5iM5hBJmm+k8BimwTWIHu5SST3SDGEbAASgBhAAS3D4ghE4mk7SUfzUGiBOhMNjwJnC4Vh8J0eJsyOBnnMxjsFmW5m8JjsnhshOJWzJuwpLCpvEZ-GEom+8g5XW5iAMEiMsL5NnhWMChkCksxeB0NkC4MVCz0nj5OnVGwepNSjEptIZPENLJNIF+5p6QLlEl8ljsCvCEjlC0lXr0sosiNhqokapiRODJO24d1+ujzONbJ+Zv+FuB8LTegz0qzOaR7kQVk8AsFgQM03HJitUQrGvwEDAACMFMQ6mABGBUPs6gALdLzilCan0g2N1kyFudNtJxA2cF4QJ2KbdsKQq0uwfA++zfwihxYgigZzlWiSLiua4bluO77rsh6aLAmDoDkqAXMh+wABR6OCACUDDzng4GrkQ66btue4HqBsBxgmN6An0RimBYVi2A4Th5nCvhyrY8yeOEKoEiB8TVlqUAAGKoCQVCMFSQisBwZ5Ghe7LXlyt7AqCeDgpC0IenCCIDhMXpGNmdhmKiegmIEL56NEFZEAoi7wD084qZyAK9AgAC0OiSj5QbCYkxBkH81B0JAbmJvRkwGAWcr3jYJjWjYGJ2C4X7TFp4LgiqIIToKJgBZsjxVLskV0Z5uL8kEfgpYY-o2BKX5PiZBgYiliWNRIHqzusgUlYuEDlWp0WepK5hOlptjTcs07deWfXFYRy7EaR0EUXBVHDR5QKWamQpWW1VndUErptcY-gGPoyp8osfJFSG2zpBJUkRVe7ntnY3YjsqCJTAYcqovMrpingaIYo4V0pXx912UAA */ createMachine( { context: initialContext, @@ -44,6 +44,13 @@ export const createPureDatasetsStateMachine = ( }, onError: 'loadingFailed', }, + on: { + SEARCH_DATASETS: 'debounceSearchingDatasets', + SORT_DATASETS: { + target: 'loading', + actions: 'storeSearch', + }, + }, }, loaded: { on: { diff --git a/x-pack/plugins/log_explorer/public/state_machines/integrations/src/state_machine.ts b/x-pack/plugins/log_explorer/public/state_machines/integrations/src/state_machine.ts index e3c858e6f2658..b6bcc5ddd5922 100644 --- a/x-pack/plugins/log_explorer/public/state_machines/integrations/src/state_machine.ts +++ b/x-pack/plugins/log_explorer/public/state_machines/integrations/src/state_machine.ts @@ -24,7 +24,7 @@ export const createPureIntegrationsStateMachine = ( ) => createMachine( { - /** @xstate-layout N4IgpgJg5mDOIC5QEkB2AXMUBOBDdAlgPaqwB0ArqgdYbgDYEBekAxANoAMAuoqAA5FYBQiT4gAHogC0ATgBs8sgEYAHAHYALMs7rV85ctkAmADQgAnonWcysgKwHZmgMwPlN1aoC+382kwcfGJSMnoiXAgaKFYIEjAyGgA3IgBrBICsPFFQ8MjohGSiAGNgki5uCvFBYRzxKQRpdQ8yY3tlRTVOF05OTXMrBGUXJXtZVU1J1UMXTWNffwwsstyIqNQYsGxsImwyfnp8ADNdgFsyTKCc8jz1qELUFNKciqqkEBqREPqZHWNjMj2GzGTiqWQuYyuYyqAaIaFKVScZzydT2EY6FwuBYgS7ZEI3NaQRIQehgVgAGQA8gBBAAiAH0ALKUgBKAFF6cgAHIAFTZAHEWdSechKVyAMpvARCL5id4NaTGHqApyyDzKYxaDywhA9VRkMGycGcZSuPSg7G4lYEyJEggksnitnUlkAYQAEpzeQKhSKxZKeNUZXV5TIXOpZGRNA5-prUUigTq2uoyLNOGjFJoI7N5n4cUsrviwoSIMTSaxxayeV6+YLhaKJVKPsHvqHGs1bBrFJj7JN7I4zJZEJolOpjApZoZ5FD9JaC3iSDaIHaHRXnW7Pdza76G+L6eKeezqYyA7x3p8Q6AFSCEUZe2jVD1ZEidUZNGQI2iO7IbA5ZHPAgXVZbVLe1y0rFlqy3H1639fdD2dE8mwvVsrzDMYozRVx7FUTUxiRdQdWkQwAUMbQRkhZ8XCBTQAOWa5ixAxi7kZXYyTiVAEiKdILnna1mKJW5olY7AwAeJ4VleQNzxbOU0IQLN3wotxphsFFDCI2YDXsOM0Q1I1NVovMrQY25BLWYS2NYLYdj2A5jjOXjAP4szSyEjYRLEopnhCKSz2lWpUMkX4TXfdN-lw0E+kUQihwQHD9W6XRsOmEdXDowtFwE0tlwAIyIKhijAcUwFwbBigAC2iEz8TXF0PRrGC-UbaSAtlVAfkaexbAhdRUQmU1+yBLQdTmWx0xwmxPFmeRc0WZzTJLMg8oK1AipKsrKuqvjrlYCRYHQfAElwI5MGwAAKHpOAASlYGqstc5awHywritK8qqo2e7SGQ2SOrbaRpxTVR2jGXDUXBPRRuMZRAX7EH1HkBR1BcU0jPm+ii0elbXo2j7toW-FxXQUTcFOWA6o3Rq62avcDyPJDWubQK5OC+Leg-VHDA8MdXDUeQdQhSNUY7cdmkxTg5vzQmHqWnG1rezbPqgb7YGJ0nyb2g6jrIE6zsu3pbtV7KnpehW8a2r6dqJknSvJ36Wf++Sug-BR2mMeRerBadRv1f4FDVT3wV69Hpcx2X8g2AAxXACFJCBWHZKk6Wpnd-Qd9rOuIzVYemadOBREHoxRpMQdTJEzRBTUwXUXw81QIhl3gd5VaDR2s+GIwDQ6TQC70XsfxcIjoRTMiOg1XCDAjUPjaoGgvgYZhIDbzOAYMsh0xHboNF7Nwh7i4j7FTMYPcfftZhRtEMqApdohXy82eI7pR2jExEb1D3YsGDpbD6xFnH7DoUE4Zr4uRLPfIKCo5gpmjDpf4fVuoOC-r8I0ZADDaFmvoHQyh2hYmMtbCOy5QIOggaza8XhATTFwtMGMIM2g6iRphWayU+4I3sKAxaTF3JQE8qQp2bMXYozcECHsU5lClyPm4I0mh8LdC0FLY22NnqrXWu9S2KsCGkD4VncMsNwxImfkiDQfVBYKDhglac05wQKA4VjOWyjcZqOVqrdWdtm5tQfg0DUAI5jB17moOY44BZxXVK0Bw1EcH6D5v+fBMtgJ3BjnHZeMl24A2wZGHQ4If5omrsg3UiNWh9RjPpaM4467eCAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QEkB2AXMUBOBDdAlgPaqwB0ArqgdYbgDYEBekAxANoAMAuoqAA5FYBQiT4gAHogBMnAMxkAHAEZpAVmnSALIoCcc5Vt3SANCACeiYwDYy1rWoDsjxdcXPH1gL5ezaTDj4xKRk9ES4EDRQrBAkYGQ0AG5EANbx-lh4oiFhEVEISUQAxkEkXNzl4oLC2eJSCBpmlgjKnLpaSrpOatacnNbWhlo+fhiZpTnhkajRYNjYRNhk-PT4AGaLALZkGYHZ5LnTUAWoySXZ5ZVIINUiwXWIytbSimSc0oPy+optjnJNVnsZC0nE8anaoMc8mGvhAuyywQOUyirAAygBRACCACUAMIACQA+sgAHIAFXRAHFsZiycgAPIk1FXARCO5ia71Vo9MhQtRGFxqTjKZS6XQAlrC3S85zSRy6RxaOSKIXSEZwsZ7RGhZEzNH07Fk4nkqk0umM5k8Kps2qcx5qZSOOyqMVaIzuXTWNQS+WcOzWXTKORORRutyKdXwiZIiKQBIQehgVgAGXpmIAIoSALIG9HGinU2kMpksm42+52hBKhRyuRKzR6XSccFaCVu6RkAzadT2dQaRWRzUIkgxiBxggJpMYnEE-OmosW0u3W2gerVsi1+svMXN9oSgMduRdRyqwx-ZQR2FR-Y62MQeOJ-WGueF80lq3XZcV1ePPtvAwqk2Oi9IoEpqE4nZaIMhjSEeiihsog4BMOkx3g+U5YniRKkgWZrFqihKomS2JYlmlq8J+5Ycj+VZyDWfxbo2u6thYMhusCahyKC7iDJ4XGOEh4w3oc46Tk+Ro4fOb4EURJGYmRS5UagDwIAAtCeG5yloTxuG4CpqKBrENH0bzuOCIqDIGfQwqMyHRreY73ocURZosSaxKg8SFGkOxDvZIlObqUCudgYAnGcEyXB+rI1N+kiIF6yhkAq1iONoWjSJ6UGmEZmUdF0XF6AZvwioJWojg5cbOTMIVJnMCxLCs6xbL5dnCVMVVBbV4XFJFPCKbF1HxS02gKGKmhGHRLhQf8RlKn6R4GeBsiipoAlXn57VoWOABGRBUEUYComAuDYEUAAWUTXoiaKYbOkmvvhA3ssplZAW82geOovrWD6dZ2A4zhnpwrjtGVKGjnGu37agh3HadF1XZtN0SLA6D4PEuBrJg2AABRcZwACUrDXRVAVkNDB1HSdZ2XTMpOkM9K7DaoSrJcY2j6HI03WLNzQqB09hOO0nHzV04P+R196U7D1MI3TUAM7AqLoKFuCbLAt0zthJqPRahHEaR5HWoNr00WZSgnv0PYaB6EpPK8DgGG6ijKroPzqBLW2ORTYB7VT8O00jbWIirasa6wqPo5gZBYzj+N9MTSuVdLfsw3DNOI-TyMjmHJ0a0zcX1M8ahvFB7QKievPNvbDpvH0fRem6QYGd4G0h2TQUAGK4AQiYQKwJGphmL54Yu0VlqbKlPC8H2fEeyq-HzVhBsloL2Cq8FGBoPiwqgRBjvA1xKybL0qapjpJWt2kDK4egnoZzSqbB7NimlAyKqG7he9qVA0HcDBmCQFPszYuOVmjGFLkLP4lcXDvBshqDuqEjggKLo8I8SUfh-DrNzHQrsJTvTkKNOsrtlpKh-p3O8qChr1Avi-a+Ok776UfglBQQo+hPG+EQ-kYN25CW1OTCciZqFm2GrIBQypUqcCgkGWCmV9zOF5JfRUHNlBODbrZfhlCfbVWCm5ERKk9CvDkKlbQDpVCyJYs0EEpciryjlHKRul5NHlWQVDNOAdM4KxPpRKelYPRkAMnRH4LsQZGB9E2MghgQyaCbJCBBydyYywzvLYOWjSB53VkfGKZ9-GDCifYVoHwvT8lBBKTQY1OLNgdJ6RQshnAUOQVEHufdgG+NyTRC8bhAkfDCYGVQdSrGIBVElJsnhHSV0DGoXeXggA */ context: initialContext, preserveActionOrder: true, predictableActionArguments: true, @@ -45,6 +45,13 @@ export const createPureIntegrationsStateMachine = ( }, onError: 'loadingFailed', }, + on: { + SEARCH_INTEGRATIONS: 'loaded.debounceSearchingIntegrations', + SORT_INTEGRATIONS: { + target: '#loading', + actions: 'storeSearch', + }, + }, }, loaded: { id: 'loaded', diff --git a/x-pack/test/functional/apps/observability_log_explorer/columns_selection.ts b/x-pack/test/functional/apps/observability_log_explorer/columns_selection.ts index b8af643d828c7..7738d3b97b2bc 100644 --- a/x-pack/test/functional/apps/observability_log_explorer/columns_selection.ts +++ b/x-pack/test/functional/apps/observability_log_explorer/columns_selection.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; import rison from '@kbn/rison'; -import querystring from 'querystring'; import { FtrProviderContext } from '../../ftr_provider_context'; const defaultLogColumns = ['@timestamp', 'service.name', 'host.name', 'message']; @@ -33,8 +32,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it("should initialize the table columns to logs' default selection", async () => { await PageObjects.observabilityLogExplorer.navigateTo(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql(defaultLogColumns); }); @@ -42,15 +39,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should restore the table columns from the URL state if exists', async () => { await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ columns: ['service.name', 'host.name', 'message', 'data_stream.namespace'], }), - }), + }, }); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql([ ...defaultLogColumns, diff --git a/x-pack/test/functional/apps/observability_log_explorer/dataset_selection_state.ts b/x-pack/test/functional/apps/observability_log_explorer/dataset_selection_state.ts index 1a62d952546b9..e232b9df5f1c4 100644 --- a/x-pack/test/functional/apps/observability_log_explorer/dataset_selection_state.ts +++ b/x-pack/test/functional/apps/observability_log_explorer/dataset_selection_state.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; import rison from '@kbn/rison'; -import querystring from 'querystring'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { @@ -30,9 +29,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const azureActivitylogsIndex = 'BQZwpgNmDGAuCWB7AdgLmAEwIay+W6yWAtmKgOQSIDmIAtFgF4CuATmAHRZzwBu8sAJ5VadAFTkANAlhRU3BPyEiQASklFS8lu2kC55AII6wAAgAyNEFN5hWIJGnIBGDgFYOAJgDM5deCgeFAAVQQAHMgdkaihVIA==='; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: azureActivitylogsIndex }), - }), + }, }); const datasetSelectionTitle = @@ -44,9 +43,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should fallback to the "All logs" selection and notify the user of an invalid encoded index', async () => { const invalidEncodedIndex = 'invalid-encoded-index'; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: invalidEncodedIndex }), - }), + }, }); const datasetSelectionTitle = @@ -67,10 +66,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const azureActivitylogsIndex = 'BQZwpgNmDGAuCWB7AdgLmAEwIay+W6yWAtmKgOQSIDmIAtFgF4CuATmAHRZzwBu8sAJ5VadAFTkANAlhRU3BPyEiQASklFS8lu2kC55AII6wAAgAyNEFN5hWIJGnIBGDgFYOAJgDM5deCgeFAAVQQAHMgdkaihVIA==='; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: azureActivitylogsIndex }), controlPanels: rison.encode({}), - }), + }, }); const azureDatasetSelectionTitle = await PageObjects.observabilityLogExplorer.getDatasetSelectorButtonText(); diff --git a/x-pack/test/functional/apps/observability_log_explorer/dataset_selector.ts b/x-pack/test/functional/apps/observability_log_explorer/dataset_selector.ts index b630cfea6ba4d..73426c990ec48 100644 --- a/x-pack/test/functional/apps/observability_log_explorer/dataset_selector.ts +++ b/x-pack/test/functional/apps/observability_log_explorer/dataset_selector.ts @@ -14,7 +14,7 @@ const initialPackageMap = { }; const initialPackagesTexts = Object.values(initialPackageMap); -const expectedDataViews = ['logstash-*', 'logs-*', 'metrics-*']; +const expectedDataViews = ['logs-*', 'logstash-*', 'metrics-*']; const sortedExpectedDataViews = expectedDataViews.slice().sort(); const uncategorized = ['logs-gaming-*', 'logs-manufacturing-*', 'logs-retail-*']; @@ -30,8 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const noIntegrationsTitle = 'No integrations found'; const noUncategorizedTitle = 'No data streams found'; - // Failing: See https://github.com/elastic/kibana/issues/167621 - describe.skip('Dataset Selector', () => { + describe('Dataset Selector', () => { before(async () => { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await PageObjects.observabilityLogExplorer.removeInstalledPackages(); diff --git a/x-pack/test/functional/apps/observability_log_explorer/header_menu.ts b/x-pack/test/functional/apps/observability_log_explorer/header_menu.ts index b67cac94ae32f..eb3c94b62403b 100644 --- a/x-pack/test/functional/apps/observability_log_explorer/header_menu.ts +++ b/x-pack/test/functional/apps/observability_log_explorer/header_menu.ts @@ -47,9 +47,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should navigate to discover keeping the current columns/filters/query/time/data view', async () => { - // Set timerange to specific values to match data and retrieve config - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { await testSubjects.existOrFail('superDatePickerstartDatePopoverButton'); await testSubjects.existOrFail('superDatePickerendDatePopoverButton'); 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 e4b8270cff6d4..15da13b99c70f 100644 --- a/x-pack/test/functional/page_objects/observability_log_explorer.ts +++ b/x-pack/test/functional/page_objects/observability_log_explorer.ts @@ -5,6 +5,8 @@ * 2.0. */ import expect from '@kbn/expect'; +import rison from '@kbn/rison'; +import querystring from 'querystring'; import { WebElementWrapper } from '../../../../test/functional/services/lib/web_element_wrapper'; import { FtrProviderContext } from '../ftr_provider_context'; @@ -99,6 +101,9 @@ const packages: IntegrationPackage[] = [ const initialPackages = packages.slice(0, 3); const additionalPackages = packages.slice(3); +const FROM = '2023-08-03T10:24:14.035Z'; +const TO = '2023-08-03T10:24:14.091Z'; + export function ObservabilityLogExplorerPageObject({ getPageObjects, getService, @@ -109,7 +114,12 @@ export function ObservabilityLogExplorerPageObject({ const testSubjects = getService('testSubjects'); const toasts = getService('toasts'); - type NavigateToAppOptions = Parameters[1]; + type NavigateToAppOptions = Omit< + Parameters[1], + 'search' + > & { + search?: Record; + }; return { uninstallPackage: ({ name, version }: IntegrationPackage) => { @@ -172,8 +182,19 @@ export function ObservabilityLogExplorerPageObject({ }; }, - async navigateTo(options?: NavigateToAppOptions) { - return await PageObjects.common.navigateToApp('observabilityLogExplorer', options); + async navigateTo(options: NavigateToAppOptions = {}) { + const { search = {}, ...extraOptions } = options; + const composedSearch = querystring.stringify({ + ...search, + _g: rison.encode({ + time: { from: FROM, to: TO }, + }), + }); + + return await PageObjects.common.navigateToApp('observabilityLogExplorer', { + search: composedSearch, + ...extraOptions, + }); }, getDatasetSelector() { @@ -181,7 +202,7 @@ export function ObservabilityLogExplorerPageObject({ }, getDatasetSelectorButton() { - return testSubjects.find('datasetSelectorPopoverButton', 30000); // Increase timeout if refresh takes longer before opening the selector + return testSubjects.find('datasetSelectorPopoverButton', 120000); // Increase timeout if refresh takes longer before opening the selector }, getDatasetSelectorContent() { @@ -290,7 +311,7 @@ export function ObservabilityLogExplorerPageObject({ const searchField = await searchControlsContainer.findByCssSelector('input[type=search]'); await searchField.clearValueWithKeyboard(); - return searchField.type(name); + return searchField.type(name, { charByChar: true }); }, async clearSearchField() { diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/columns_selection.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/columns_selection.ts index 955ef8d22055f..a011a00a24f9c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/columns_selection.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/columns_selection.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; import rison from '@kbn/rison'; -import querystring from 'querystring'; import { FtrProviderContext } from '../../../ftr_provider_context'; const defaultLogColumns = ['@timestamp', 'service.name', 'host.name', 'message']; @@ -14,18 +13,18 @@ const defaultLogColumns = ['@timestamp', 'service.name', 'host.name', 'message'] export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const retry = getService('retry'); - const PageObjects = getPageObjects(['discover', 'observabilityLogExplorer']); + const PageObjects = getPageObjects(['discover', 'observabilityLogExplorer', 'svlCommonPage']); - // FLAKY: https://github.com/elastic/kibana/issues/165915 - // FLAKY: https://github.com/elastic/kibana/issues/165916 - describe.skip('Columns selection initialization and update', () => { + describe('Columns selection initialization and update', () => { before(async () => { await esArchiver.load( 'x-pack/test/functional/es_archives/observability_log_explorer/data_streams' ); + await PageObjects.svlCommonPage.login(); }); after(async () => { + await PageObjects.svlCommonPage.forceLogout(); await esArchiver.unload( 'x-pack/test/functional/es_archives/observability_log_explorer/data_streams' ); @@ -35,8 +34,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it("should initialize the table columns to logs' default selection", async () => { await PageObjects.observabilityLogExplorer.navigateTo(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql(defaultLogColumns); }); @@ -44,15 +41,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should restore the table columns from the URL state if exists', async () => { await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ columns: ['service.name', 'host.name', 'message', 'data_stream.namespace'], }), - }), + }, }); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { expect(await PageObjects.discover.getColumnHeaders()).to.eql([ ...defaultLogColumns, diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts index 1e12a054c852f..9f6e978e1f270 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selection_state.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; import rison from '@kbn/rison'; -import querystring from 'querystring'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { @@ -19,7 +18,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'header', ]); - // https://github.com/elastic/kibana/issues/166016 describe('DatasetSelection initialization and update', () => { before(async () => { await PageObjects.svlCommonPage.login(); @@ -45,9 +43,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const azureActivitylogsIndex = 'BQZwpgNmDGAuCWB7AdgLmAEwIay+W6yWAtmKgOQSIDmIAtFgF4CuATmAHRZzwBu8sAJ5VadAFTkANAlhRU3BPyEiQASklFS8lu2kC55AII6wAAgAyNEFN5hWIJGnIBGDgFYOAJgDM5deCgeFAAVQQAHMgdkaihVIA==='; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: azureActivitylogsIndex }), - }), + }, }); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -60,9 +58,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should fallback to the "All logs" selection and notify the user of an invalid encoded index', async () => { const invalidEncodedIndex = 'invalid-encoded-index'; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: invalidEncodedIndex }), - }), + }, }); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -85,10 +83,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const azureActivitylogsIndex = 'BQZwpgNmDGAuCWB7AdgLmAEwIay+W6yWAtmKgOQSIDmIAtFgF4CuATmAHRZzwBu8sAJ5VadAFTkANAlhRU3BPyEiQASklFS8lu2kC55AII6wAAgAyNEFN5hWIJGnIBGDgFYOAJgDM5deCgeFAAVQQAHMgdkaihVIA==='; await PageObjects.observabilityLogExplorer.navigateTo({ - search: querystring.stringify({ + search: { _a: rison.encode({ index: azureActivitylogsIndex }), controlPanels: rison.encode({}), - }), + }, }); await PageObjects.header.waitUntilLoadingHasFinished(); const azureDatasetSelectionTitle = diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts index 4d0ff2f3b2378..ef51de3c4b693 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts @@ -34,8 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const noIntegrationsTitle = 'No integrations found'; const noUncategorizedTitle = 'No data streams found'; - // Failing: See https://github.com/elastic/kibana/issues/167773 - describe.skip('Dataset Selector', () => { + describe('Dataset Selector', () => { before(async () => { await PageObjects.svlCommonPage.login(); await PageObjects.observabilityLogExplorer.removeInstalledPackages(); @@ -55,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.observabilityLogExplorer.openDatasetSelector(); }); - it('should always display the Integrations Uncategorized and Data Views top level tabs', async () => { + it('should always display the Integrations, Uncategorized and Data Views top level tabs', async () => { const integrationsTab = await PageObjects.observabilityLogExplorer.getIntegrationsTab(); const uncategorizedTab = await PageObjects.observabilityLogExplorer.getUncategorizedTab(); const dataViewsTab = await PageObjects.observabilityLogExplorer.getDataViewsTab(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts index b28c040f56c98..4cd5924e7608c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts @@ -8,18 +8,18 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['observabilityLogExplorer', 'svlCommonPage']); const testSubjects = getService('testSubjects'); + const PageObjects = getPageObjects(['observabilityLogExplorer', 'svlCommonPage']); describe('Filter controls customization', () => { before('initialize tests', async () => { - await PageObjects.svlCommonPage.login(); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + await PageObjects.svlCommonPage.login(); }); after('clean up archives', async () => { - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await PageObjects.svlCommonPage.forceLogout(); + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); }); it('renders a filter controls section as part of the unified search bar', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts index 882c5803a6cc0..c9f8e598ff2a8 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/header_menu.ts @@ -21,7 +21,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'header', ]); - // FLAKY: https://github.com/elastic/kibana/issues/167189 describe('Header menu', () => { before(async () => { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); @@ -58,9 +57,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should navigate to discover keeping the current columns/filters/query/time/data view', async () => { - // Set timerange to specific values to match data and retrieve config - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await retry.try(async () => { await testSubjects.existOrFail('superDatePickerstartDatePopoverButton'); await testSubjects.existOrFail('superDatePickerendDatePopoverButton'); From 64b77ab874f59da20ce9614e2ec08a4322a63c78 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Thu, 5 Oct 2023 13:28:27 +0200 Subject: [PATCH 121/170] [ML] AIOps: Reenable `kibana_sample_data_logs` dataset for functional tests (#168066) Reenables the `kibana_sample_data_logs` dataset for functional tests for log rate analysis. --- x-pack/test/functional/apps/aiops/test_data.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/x-pack/test/functional/apps/aiops/test_data.ts b/x-pack/test/functional/apps/aiops/test_data.ts index 7a1b47cf9ca63..adf1447b1f346 100644 --- a/x-pack/test/functional/apps/aiops/test_data.ts +++ b/x-pack/test/functional/apps/aiops/test_data.ts @@ -21,7 +21,7 @@ export const kibanaLogsDataViewTestData: TestData = { fieldSelectorApplyAvailable: true, action: { type: 'LogPatternAnalysis', - tableRowId: '157690148', + tableRowId: '1064853178', expected: { queryBar: 'clientip:30.156.16.164 AND host.keyword:elastic-elastic-elastic.org AND ip:30.156.16.163 AND response.keyword:404 AND machine.os.keyword:win xp AND geo.dest:IN AND geo.srcdest:US\\:IN', @@ -233,9 +233,7 @@ const getArtificialLogDataViewTestData = (analysisType: LogRateAnalysisType): Te }); export const logRateAnalysisTestData: TestData[] = [ - // Temporarily disabling since the data seems out of sync on local dev installs and CI - // so it's not possible to compare and update assertions accordingly. - // kibanaLogsDataViewTestData, + kibanaLogsDataViewTestData, farequoteDataViewTestData, farequoteDataViewTestDataWithQuery, getArtificialLogDataViewTestData(LOG_RATE_ANALYSIS_TYPE.SPIKE), From 0d617e132600f16b01153bf46b84eef0f16cc690 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Thu, 5 Oct 2023 13:29:00 +0200 Subject: [PATCH 122/170] [Obs AI Assistant] Complete chat in background (#168072) Closes https://github.com/elastic/obs-ai-assistant-team/issues/64 Browsers throttle timers when a tab runs in the background. Our previous approach with concatMap meant that only one value is emitted per tick of the timer. This resulted in the observable effectively emitting one value per second when the tab is not active. We now calculate up front when a value should be emitted (at least n ms later than the previous value), and then use this in concatMap to calculate the needed delay when the value passes through. This allows the chat to complete in the background as fast as possible. --- .../public/service/create_chat_service.ts | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts b/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts index bebc3bd074b20..269e81101d8aa 100644 --- a/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts +++ b/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts @@ -23,6 +23,7 @@ import { scan, shareReplay, tap, + timestamp, } from 'rxjs'; import { ContextRegistry, @@ -202,28 +203,38 @@ export async function createChatService({ const subscription = readableStreamReaderIntoObservable(reader) .pipe( + // lines start with 'data: ' map((line) => line.substring(6)), + // a message completes with the line '[DONE]' rxJsFilter((line) => !!line && line !== '[DONE]'), + // parse the JSON, add the type map( (line) => JSON.parse(line) as | CreateChatCompletionResponseChunk | { error: { message: string } } ), + // validate the message. in some cases OpenAI + // will throw halfway through the message tap((line) => { if ('error' in line) { throw new ServerError(line.error.message); } }), + // there also might be some metadata that we need + // to exclude rxJsFilter( (line): line is CreateChatCompletionResponseChunk => 'object' in line && line.object === 'chat.completion.chunk' ), + // this is how OpenAI signals that the context window + // limit has been exceeded tap((line) => { if (line.choices[0].finish_reason === 'length') { throw new TokenLimitReachedError(); } }), + // merge the messages scan( (acc, { choices }) => { acc.message.content += choices[0].delta.content ?? ''; @@ -244,6 +255,7 @@ export async function createChatService({ }, } ), + // convert an error into state catchError((error) => of({ ...subject.value, @@ -254,6 +266,7 @@ export async function createChatService({ ) .subscribe(subject); + // if the request is aborted, convert that into state as well controller.signal.addEventListener('abort', () => { subscription.unsubscribe(); subject.next({ @@ -282,13 +295,46 @@ export async function createChatService({ subject.complete(); }); - return subject.pipe( - concatMap((value) => of(value).pipe(delay(50))), + const MIN_DELAY = 35; + + const pendingMessages$ = subject.pipe( + // make sure the request is only triggered once, + // even with multiple subscribers shareReplay(1), + // if the Observable is no longer subscribed, + // abort the running request finalize(() => { controller.abort(); + }), + // append a timestamp of when each value was emitted + timestamp(), + // use the previous timestamp to calculate a target + // timestamp for emitting the next value + scan((acc, value) => { + const lastTimestamp = acc.timestamp || 0; + const emitAt = Math.max(lastTimestamp + MIN_DELAY, value.timestamp); + return { + timestamp: emitAt, + value: value.value, + }; + }), + // add the delay based on the elapsed time + // using concatMap(of(value).pipe(delay(50)) + // leads to browser issues because timers + // are throttled when the tab is not active + concatMap((value) => { + const now = Date.now(); + const delayFor = value.timestamp - now; + + if (delayFor <= 0) { + return of(value.value); + } + + return of(value.value).pipe(delay(delayFor)); }) ); + + return pendingMessages$; }, }; } From 56bd62fa2f74c92ae74f84671a1c4ba5957d8bfc Mon Sep 17 00:00:00 2001 From: James Rodewig Date: Thu, 5 Oct 2023 08:00:40 -0400 Subject: [PATCH 123/170] Add platform docs as codeowners for OpenAPI files (#168055) --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8eec80f9cd5c9..6ed67c90a0f66 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1421,6 +1421,12 @@ x-pack/plugins/observability_shared/public/components/profiling @elastic/profili # Shared UX packages/react @elastic/appex-sharedux +# OpenAPI spec files +/x-pack/plugins/fleet/common/openapi @elastic/platform-docs +/x-pack/plugins/ml/common/openapi @elastic/platform-docs +/packages/core/saved-objects/docs/openapi @elastic/platform-docs +/plugins/data_views/docs/openapi @elastic/platform-docs + #### ## These rules are always last so they take ultimate priority over everything else #### From 4f9e2bdf195caace9ce860230929c86e31cacb6a Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 5 Oct 2023 14:02:13 +0200 Subject: [PATCH 124/170] [Discover] Show field tokens in the grid header (#167179) - Resolves https://github.com/elastic/kibana/issues/166906 ## Summary This PR adds field tokens to column header for the grid. There are also additional necessary changes: - field utils (name, description, icon) were moved from `@kbn/unified-field-list` and `@kbn/discover-utils` to its own new package `@kbn/field-utils` - Unified Data Table and Unified Doc Viewer got a new prop `columnTypes` which allows to render correct field icons for ES|QL searches (before types were derived from the data view fields which could be misleading in text-based searches as users can customize field names via query) Screenshot 2023-09-25 at 19 30 21 ### Checklist - [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) - [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] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Davis McPhee --- .github/CODEOWNERS | 1 + .i18nrc.json | 1 + package.json | 1 + packages/kbn-discover-utils/index.ts | 4 - packages/kbn-discover-utils/src/types.ts | 13 +- .../src/utils/format_hit.test.ts | 30 +- .../src/utils/format_hit.ts | 43 +- .../kbn-discover-utils/src/utils/index.ts | 2 - packages/kbn-discover-utils/types.ts | 2 +- .../tooltip_annotation_panel.tsx | 3 +- .../tsconfig.json | 9 +- packages/kbn-field-utils/README.md | 3 + packages/kbn-field-utils/index.ts | 22 + .../jest.config.js} | 8 +- packages/kbn-field-utils/kibana.jsonc | 5 + packages/kbn-field-utils/package.json | 7 + .../__snapshots__/field_icon.test.tsx.snap | 8 +- .../components/field_icon/field_icon.test.tsx | 2 +- .../src/components/field_icon/field_icon.tsx | 2 +- .../field_icon/get_field_icon_props.ts | 12 +- .../src/components/field_icon/index.tsx | 4 +- packages/kbn-field-utils/src/types.ts | 26 + .../src/utils/field_types.ts | 7 +- .../src/utils}/get_field_icon_type.test.ts | 4 +- .../src/utils}/get_field_icon_type.ts | 6 +- .../src/utils}/get_field_type.test.ts | 2 +- .../src/utils}/get_field_type.ts | 5 +- .../utils}/get_field_type_description.test.ts | 4 +- .../src/utils}/get_field_type_description.ts | 56 +- .../src/utils/get_field_type_name.test.ts | 2 +- .../src/utils/get_field_type_name.ts | 56 +- packages/kbn-field-utils/tsconfig.json | 14 + packages/kbn-field-utils/types.ts | 9 + packages/kbn-unified-data-table/index.ts | 1 + .../data_table_columns.test.tsx.snap | 1720 +++++++++++++++++ .../src/components/data_table.test.tsx | 35 +- .../src/components/data_table.tsx | 44 +- .../data_table_column_header.test.tsx | 113 ++ .../components/data_table_column_header.tsx | 83 + .../components/data_table_columns.test.tsx | 485 +---- .../src/components/data_table_columns.tsx | 23 +- packages/kbn-unified-data-table/src/types.ts | 5 + .../src/utils/get_column_types.test.ts | 46 + .../src/utils/get_column_types.ts | 24 + .../src/utils/get_render_cell_value.test.tsx | 322 ++- .../src/utils/get_render_cell_value.tsx | 56 +- packages/kbn-unified-data-table/tsconfig.json | 1 + .../src/components/field_name/field_name.tsx | 2 +- .../src/services/types.ts | 5 + packages/kbn-unified-doc-viewer/tsconfig.json | 1 + packages/kbn-unified-field-list/index.ts | 3 - .../field_item_button/field_item_button.tsx | 2 +- .../field_list_filters/field_type_filter.tsx | 13 +- .../src/hooks/use_field_filters.ts | 3 +- packages/kbn-unified-field-list/src/types.ts | 12 +- packages/kbn-unified-field-list/tsconfig.json | 1 + .../components/field_picker/field_picker.tsx | 2 +- .../tsconfig.json | 2 +- .../context/context_app_content.tsx | 1 + .../components/layout/discover_documents.tsx | 34 +- .../discover_grid_flyout.tsx | 3 + .../doc_table/utils/row_formatter.test.ts | 38 +- .../doc_table/utils/row_formatter.tsx | 14 +- .../embeddable/saved_search_embeddable.tsx | 8 +- .../saved_search_embeddable_component.tsx | 1 + .../public/embeddable/saved_search_grid.tsx | 15 +- .../doc_viewer_table/legacy/table.tsx | 2 +- .../components/doc_viewer_table/table.tsx | 8 +- src/plugins/unified_doc_viewer/tsconfig.json | 4 +- .../group2/_data_grid_field_tokens.ts | 184 ++ test/functional/apps/discover/group2/index.ts | 1 + test/functional/services/data_grid.ts | 4 +- tsconfig.base.json | 2 + .../field_type_icon/field_type_icon.tsx | 2 +- .../field_types_filter/field_types_filter.tsx | 2 +- .../field_types_help_popover.tsx | 2 +- .../common/util/field_types_utils.ts | 2 +- .../search_panel/field_type_filter.tsx | 2 +- x-pack/plugins/data_visualizer/tsconfig.json | 5 +- .../datasources/common/field_item.test.tsx | 3 +- .../dimension_panel/field_select.tsx | 2 +- x-pack/plugins/lens/tsconfig.json | 1 + .../translations/translations/fr-FR.json | 110 +- .../translations/translations/ja-JP.json | 110 +- .../translations/translations/zh-CN.json | 110 +- .../discover/search_source_alert.ts | 4 +- yarn.lock | 4 + 87 files changed, 3018 insertions(+), 1037 deletions(-) create mode 100644 packages/kbn-field-utils/README.md create mode 100644 packages/kbn-field-utils/index.ts rename packages/{kbn-unified-field-list/src/utils/field_types/index.ts => kbn-field-utils/jest.config.js} (66%) create mode 100644 packages/kbn-field-utils/kibana.jsonc create mode 100644 packages/kbn-field-utils/package.json rename packages/{kbn-unified-field-list => kbn-field-utils}/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap (52%) rename packages/{kbn-unified-field-list => kbn-field-utils}/src/components/field_icon/field_icon.test.tsx (96%) rename packages/{kbn-unified-field-list => kbn-field-utils}/src/components/field_icon/field_icon.tsx (93%) rename packages/{kbn-unified-field-list => kbn-field-utils}/src/components/field_icon/get_field_icon_props.ts (57%) rename packages/{kbn-unified-field-list => kbn-field-utils}/src/components/field_icon/index.tsx (86%) create mode 100644 packages/kbn-field-utils/src/types.ts rename packages/{kbn-discover-utils => kbn-field-utils}/src/utils/field_types.ts (87%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_icon_type.test.ts (91%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_icon_type.ts (83%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_type.test.ts (94%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_type.ts (76%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_type_description.test.ts (92%) rename packages/{kbn-unified-field-list/src/utils/field_types => kbn-field-utils/src/utils}/get_field_type_description.ts (66%) rename packages/{kbn-discover-utils => kbn-field-utils}/src/utils/get_field_type_name.test.ts (96%) rename packages/{kbn-discover-utils => kbn-field-utils}/src/utils/get_field_type_name.ts (65%) create mode 100644 packages/kbn-field-utils/tsconfig.json create mode 100644 packages/kbn-field-utils/types.ts create mode 100644 packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap create mode 100644 packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx create mode 100644 packages/kbn-unified-data-table/src/components/data_table_column_header.tsx create mode 100644 packages/kbn-unified-data-table/src/utils/get_column_types.test.ts create mode 100644 packages/kbn-unified-data-table/src/utils/get_column_types.ts create mode 100644 test/functional/apps/discover/group2/_data_grid_field_tokens.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6ed67c90a0f66..d8c1199399804 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -396,6 +396,7 @@ x-pack/test/functional_execution_context/plugins/alerts @elastic/kibana-core examples/field_formats_example @elastic/kibana-data-discovery src/plugins/field_formats @elastic/kibana-data-discovery packages/kbn-field-types @elastic/kibana-data-discovery +packages/kbn-field-utils @elastic/kibana-data-discovery x-pack/plugins/file_upload @elastic/kibana-gis examples/files_example @elastic/appex-sharedux src/plugins/files_management @elastic/appex-sharedux diff --git a/.i18nrc.json b/.i18nrc.json index 266db6c1f1577..4a71e696efc1f 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -48,6 +48,7 @@ "eventAnnotationListing": "src/plugins/event_annotation_listing", "eventAnnotationCommon": "packages/kbn-event-annotation-common", "eventAnnotationComponents": "packages/kbn-event-annotation-components", + "fieldUtils": "packages/kbn-field-utils", "fieldFormats": "src/plugins/field_formats", "files": "src/plugins/files", "filesManagement": "src/plugins/files_management", diff --git a/package.json b/package.json index 5df7c8919a278..b54bc3023be37 100644 --- a/package.json +++ b/package.json @@ -432,6 +432,7 @@ "@kbn/field-formats-example-plugin": "link:examples/field_formats_example", "@kbn/field-formats-plugin": "link:src/plugins/field_formats", "@kbn/field-types": "link:packages/kbn-field-types", + "@kbn/field-utils": "link:packages/kbn-field-utils", "@kbn/file-upload-plugin": "link:x-pack/plugins/file_upload", "@kbn/files-example-plugin": "link:examples/files_example", "@kbn/files-management-plugin": "link:src/plugins/files_management", diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index d19f50c5dc646..5eb2650482611 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -16,8 +16,6 @@ export { ENABLE_ESQL, FIELDS_LIMIT_SETTING, HIDE_ANNOUNCEMENTS, - KNOWN_FIELD_TYPE_LIST, - KNOWN_FIELD_TYPES, MAX_DOC_FIELDS_DISPLAYED, MODIFY_COLUMNS_ON_SWITCH, ROW_HEIGHT_OPTION, @@ -36,10 +34,8 @@ export { formatFieldValue, formatHit, getDocId, - getFieldTypeName, getIgnoredReason, getShouldShowFieldHandler, - isKnownFieldType, isNestedFieldParent, usePager, } from './src'; diff --git a/packages/kbn-discover-utils/src/types.ts b/packages/kbn-discover-utils/src/types.ts index 5a2f3ed9b085e..1fcc7c6a07c7f 100644 --- a/packages/kbn-discover-utils/src/types.ts +++ b/packages/kbn-discover-utils/src/types.ts @@ -8,7 +8,7 @@ import type { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -export type { FieldTypeKnown, IgnoredReason, ShouldShowFieldInTableHandler } from './utils'; +export type { IgnoredReason, ShouldShowFieldInTableHandler } from './utils'; export interface EsHitRecord extends Omit { _source?: Record; @@ -35,3 +35,14 @@ export interface DataTableRecord { */ isAnchor?: boolean; } + +type FormattedHitPair = readonly [ + fieldDisplayName: string, + formattedValue: string, + fieldName: string | null // `null` is when number of fields is limited and there is an extra pair about it +]; + +/** + * Pairs array for each field in the hit + */ +export type FormattedHit = FormattedHitPair[]; diff --git a/packages/kbn-discover-utils/src/utils/format_hit.test.ts b/packages/kbn-discover-utils/src/utils/format_hit.test.ts index b61c672641bbc..94beff6871baa 100644 --- a/packages/kbn-discover-utils/src/utils/format_hit.test.ts +++ b/packages/kbn-discover-utils/src/utils/format_hit.test.ts @@ -41,11 +41,11 @@ describe('formatHit', () => { fieldFormatsMock ); expect(formatted).toEqual([ - ['extension', 'formatted:png'], - ['message', 'formatted:foobar'], - ['object.value', 'formatted:42,13'], - ['_index', 'formatted:logs'], - ['_score', undefined], + ['extension', 'formatted:png', 'extension'], + ['message', 'formatted:foobar', 'message'], + ['object.value', 'formatted:42,13', 'object.value'], + ['_index', 'formatted:logs', '_index'], + ['_score', undefined, '_score'], ]); }); @@ -83,9 +83,9 @@ describe('formatHit', () => { fieldFormatsMock ); expect(formatted).toEqual([ - ['extension', 'formatted:png'], - ['message', 'formatted:foobar'], - ['and 3 more fields', ''], + ['extension', 'formatted:png', 'extension'], + ['message', 'formatted:foobar', 'message'], + ['and 3 more fields', '', null], ]); }); @@ -98,10 +98,10 @@ describe('formatHit', () => { fieldFormatsMock ); expect(formatted).toEqual([ - ['message', 'formatted:foobar'], - ['object.value', 'formatted:42,13'], - ['_index', 'formatted:logs'], - ['_score', undefined], + ['message', 'formatted:foobar', 'message'], + ['object.value', 'formatted:42,13', 'object.value'], + ['_index', 'formatted:logs', '_index'], + ['_score', undefined, '_score'], ]); }); @@ -114,9 +114,9 @@ describe('formatHit', () => { fieldFormatsMock ); expect(formatted).toEqual([ - ['bytesDisplayName', 'formatted:123'], - ['_index', 'formatted:logs'], - ['_score', undefined], + ['bytesDisplayName', 'formatted:123', 'bytes'], + ['_index', 'formatted:logs', '_index'], + ['_score', undefined, '_score'], ]); }); }); diff --git a/packages/kbn-discover-utils/src/utils/format_hit.ts b/packages/kbn-discover-utils/src/utils/format_hit.ts index d58e79c35fe7f..824c56c71c4cf 100644 --- a/packages/kbn-discover-utils/src/utils/format_hit.ts +++ b/packages/kbn-discover-utils/src/utils/format_hit.ts @@ -10,20 +10,23 @@ import type { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey' import { i18n } from '@kbn/i18n'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import type { DataTableRecord, ShouldShowFieldInTableHandler } from '../types'; +import type { DataTableRecord, ShouldShowFieldInTableHandler, FormattedHit } from '../types'; import { formatFieldValue } from './format_value'; -const formattedHitCache = new WeakMap(); - -type FormattedHit = Array; +const formattedHitCache = new WeakMap< + SearchHit, + { formattedHit: FormattedHit; maxEntries: number } +>(); /** * Returns a formatted document in form of key/value pairs of the fields name and a formatted value. * The value returned in each pair is an HTML string which is safe to be applied to the DOM, since * it's formatted using field formatters. - * @param hit The hit to format - * @param dataView The corresponding data view - * @param shouldShowFieldHandler A function to check a field. + * @param hit + * @param dataView + * @param shouldShowFieldHandler + * @param maxEntries + * @param fieldFormats */ export function formatHit( hit: DataTableRecord, @@ -33,40 +36,35 @@ export function formatHit( fieldFormats: FieldFormatsStart ): FormattedHit { const cached = formattedHitCache.get(hit.raw); - if (cached) { - return cached; + if (cached && cached.maxEntries === maxEntries) { + return cached.formattedHit; } const highlights = hit.raw.highlight ?? {}; // Flatten the object using the flattenHit implementation we use across Discover for flattening documents. const flattened = hit.flattened; - const highlightPairs: Array<[fieldName: string, formattedValue: string]> = []; - const sourcePairs: Array<[fieldName: string, formattedValue: string]> = []; + const highlightPairs: FormattedHit = []; + const sourcePairs: FormattedHit = []; // Add each flattened field into the corresponding array for highlighted or other fields, // depending on whether the original hit had a highlight for it. That way we can later // put highlighted fields first in the document summary. Object.entries(flattened).forEach(([key, val]) => { // Retrieve the (display) name of the fields, if it's a mapped field on the data view - const displayKey = dataView.fields.getByName(key)?.displayName; + const field = dataView.fields.getByName(key); + const displayKey = field?.displayName; const pairs = highlights[key] ? highlightPairs : sourcePairs; // Format the raw value using the regular field formatters for that field - const formattedValue = formatFieldValue( - val, - hit.raw, - fieldFormats, - dataView, - dataView.fields.getByName(key) - ); + const formattedValue = formatFieldValue(val, hit.raw, fieldFormats, dataView, field); // If the field was a mapped field, we validate it against the fieldsToShow list, if not // we always include it into the result. if (displayKey) { if (shouldShowFieldHandler(key)) { - pairs.push([displayKey, formattedValue]); + pairs.push([displayKey, formattedValue, key]); } } else { - pairs.push([key, formattedValue]); + pairs.push([key, formattedValue, key]); } }); const pairs = [...highlightPairs, ...sourcePairs]; @@ -83,8 +81,9 @@ export function formatHit( values: { count: pairs.length - maxEntries }, }), '', + null, ] as const, ]; - formattedHitCache.set(hit.raw, formatted); + formattedHitCache.set(hit.raw, { formattedHit: formatted, maxEntries }); return formatted; } diff --git a/packages/kbn-discover-utils/src/utils/index.ts b/packages/kbn-discover-utils/src/utils/index.ts index fc8288f533deb..4828fcf82a447 100644 --- a/packages/kbn-discover-utils/src/utils/index.ts +++ b/packages/kbn-discover-utils/src/utils/index.ts @@ -7,11 +7,9 @@ */ export * from './build_data_record'; -export * from './field_types'; export * from './format_hit'; export * from './format_value'; export * from './get_doc_id'; -export * from './get_field_type_name'; export * from './get_ignored_reason'; export * from './get_should_show_field_handler'; export * from './nested_fields'; diff --git a/packages/kbn-discover-utils/types.ts b/packages/kbn-discover-utils/types.ts index ea9c48f34c39f..d3963c32c1227 100644 --- a/packages/kbn-discover-utils/types.ts +++ b/packages/kbn-discover-utils/types.ts @@ -9,7 +9,7 @@ export type { DataTableRecord, EsHitRecord, - FieldTypeKnown, IgnoredReason, ShouldShowFieldInTableHandler, + FormattedHit, } from './src/types'; diff --git a/packages/kbn-event-annotation-components/components/annotation_editor_controls/tooltip_annotation_panel.tsx b/packages/kbn-event-annotation-components/components/annotation_editor_controls/tooltip_annotation_panel.tsx index f66e47bbb26d0..00f4d70bc4558 100644 --- a/packages/kbn-event-annotation-components/components/annotation_editor_controls/tooltip_annotation_panel.tsx +++ b/packages/kbn-event-annotation-components/components/annotation_editor_controls/tooltip_annotation_panel.tsx @@ -9,7 +9,8 @@ import { htmlIdGenerator, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useCallback, useMemo } from 'react'; -import { useExistingFieldsReader, getFieldIconType } from '@kbn/unified-field-list'; +import { getFieldIconType } from '@kbn/field-utils'; +import { useExistingFieldsReader } from '@kbn/unified-field-list'; import { FieldOption, FieldOptionValue, diff --git a/packages/kbn-event-annotation-components/tsconfig.json b/packages/kbn-event-annotation-components/tsconfig.json index 462501c387a04..e7e5f468f4665 100644 --- a/packages/kbn-event-annotation-components/tsconfig.json +++ b/packages/kbn-event-annotation-components/tsconfig.json @@ -15,10 +15,10 @@ "target/**/*" ], "kbn_references": [ - "@kbn/i18n", - "@kbn/visualization-ui-components", - "@kbn/ui-theme", - "@kbn/chart-icons", + "@kbn/i18n", + "@kbn/visualization-ui-components", + "@kbn/ui-theme", + "@kbn/chart-icons", "@kbn/unified-field-list", "@kbn/data-views-plugin", "@kbn/data-plugin", @@ -28,5 +28,6 @@ "@kbn/i18n-react", "@kbn/saved-objects-finder-plugin", "@kbn/expressions-plugin", + "@kbn/field-utils" ] } diff --git a/packages/kbn-field-utils/README.md b/packages/kbn-field-utils/README.md new file mode 100644 index 0000000000000..f3f5185734e56 --- /dev/null +++ b/packages/kbn-field-utils/README.md @@ -0,0 +1,3 @@ +# @kbn/field-utils + +Utils for rendering fields diff --git a/packages/kbn-field-utils/index.ts b/packages/kbn-field-utils/index.ts new file mode 100644 index 0000000000000..c9f85c9cfcec5 --- /dev/null +++ b/packages/kbn-field-utils/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { FieldTypeKnown, FieldBase } from './types'; + +export { + isKnownFieldType, + KNOWN_FIELD_TYPES, + KNOWN_FIELD_TYPE_LIST, +} from './src/utils/field_types'; + +export { getFieldIconType } from './src/utils/get_field_icon_type'; +export { getFieldType } from './src/utils/get_field_type'; +export { getFieldTypeDescription } from './src/utils/get_field_type_description'; +export { getFieldTypeName, UNKNOWN_FIELD_TYPE_MESSAGE } from './src/utils/get_field_type_name'; + +export { FieldIcon, type FieldIconProps, getFieldIconProps } from './src/components/field_icon'; diff --git a/packages/kbn-unified-field-list/src/utils/field_types/index.ts b/packages/kbn-field-utils/jest.config.js similarity index 66% rename from packages/kbn-unified-field-list/src/utils/field_types/index.ts rename to packages/kbn-field-utils/jest.config.js index 59d09efdd19d6..c9e0a4c0baff1 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/index.ts +++ b/packages/kbn-field-utils/jest.config.js @@ -6,6 +6,8 @@ * Side Public License, v 1. */ -export { getFieldTypeDescription } from './get_field_type_description'; -export { getFieldType } from './get_field_type'; -export { getFieldIconType } from './get_field_icon_type'; +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-field-utils'], +}; diff --git a/packages/kbn-field-utils/kibana.jsonc b/packages/kbn-field-utils/kibana.jsonc new file mode 100644 index 0000000000000..891f5f962f9e3 --- /dev/null +++ b/packages/kbn-field-utils/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/field-utils", + "owner": "@elastic/kibana-data-discovery" +} diff --git a/packages/kbn-field-utils/package.json b/packages/kbn-field-utils/package.json new file mode 100644 index 0000000000000..ddc8825b52020 --- /dev/null +++ b/packages/kbn-field-utils/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/field-utils", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false +} \ No newline at end of file diff --git a/packages/kbn-unified-field-list/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap b/packages/kbn-field-utils/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap similarity index 52% rename from packages/kbn-unified-field-list/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap rename to packages/kbn-field-utils/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap index 66a9236679abc..2481de05be59d 100644 --- a/packages/kbn-unified-field-list/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap +++ b/packages/kbn-field-utils/src/components/field_icon/__snapshots__/field_icon.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnifiedFieldList accepts additional props 1`] = ` +exports[`FieldUtils accepts additional props 1`] = ` accepts additional props 1`] = ` /> `; -exports[`UnifiedFieldList renders Document type properly 1`] = ` +exports[`FieldUtils renders Document type properly 1`] = ` `; -exports[`UnifiedFieldList renders properly 1`] = ` +exports[`FieldUtils renders properly 1`] = ` renders properly 1`] = ` /> `; -exports[`UnifiedFieldList renders properly scripted fields 1`] = ` +exports[`FieldUtils renders properly scripted fields 1`] = ` ', () => { +describe('FieldUtils ', () => { test('renders properly', () => { const component = shallow(); expect(component).toMatchSnapshot(); diff --git a/packages/kbn-unified-field-list/src/components/field_icon/field_icon.tsx b/packages/kbn-field-utils/src/components/field_icon/field_icon.tsx similarity index 93% rename from packages/kbn-unified-field-list/src/components/field_icon/field_icon.tsx rename to packages/kbn-field-utils/src/components/field_icon/field_icon.tsx index cd6fcb7588fdd..4dbf3311ce4e1 100644 --- a/packages/kbn-unified-field-list/src/components/field_icon/field_icon.tsx +++ b/packages/kbn-field-utils/src/components/field_icon/field_icon.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { FieldIcon as KbnFieldIcon, FieldIconProps as KbnFieldIconProps } from '@kbn/react-field'; -import { getFieldTypeName } from '@kbn/discover-utils'; +import { getFieldTypeName } from '../../utils/get_field_type_name'; export type FieldIconProps = KbnFieldIconProps; diff --git a/packages/kbn-unified-field-list/src/components/field_icon/get_field_icon_props.ts b/packages/kbn-field-utils/src/components/field_icon/get_field_icon_props.ts similarity index 57% rename from packages/kbn-unified-field-list/src/components/field_icon/get_field_icon_props.ts rename to packages/kbn-field-utils/src/components/field_icon/get_field_icon_props.ts index 4ab52364abc66..fd79d343a6771 100644 --- a/packages/kbn-unified-field-list/src/components/field_icon/get_field_icon_props.ts +++ b/packages/kbn-field-utils/src/components/field_icon/get_field_icon_props.ts @@ -6,14 +6,12 @@ * Side Public License, v 1. */ -import { type DataViewField } from '@kbn/data-views-plugin/common'; -import { FieldListItem } from '../../types'; -import { getFieldIconType } from '../../utils/field_types'; -import { type FieldIconProps } from './field_icon'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; +import type { FieldIconProps } from './field_icon'; +import { getFieldIconType } from '../../utils/get_field_icon_type'; +import type { FieldBase } from '../../types'; -export function getFieldIconProps( - field: T -): FieldIconProps { +export function getFieldIconProps(field: T): FieldIconProps { return { type: getFieldIconType(field), scripted: field.scripted, diff --git a/packages/kbn-unified-field-list/src/components/field_icon/index.tsx b/packages/kbn-field-utils/src/components/field_icon/index.tsx similarity index 86% rename from packages/kbn-unified-field-list/src/components/field_icon/index.tsx rename to packages/kbn-field-utils/src/components/field_icon/index.tsx index 590c4f488b43c..f8890e3ff1d9d 100644 --- a/packages/kbn-unified-field-list/src/components/field_icon/index.tsx +++ b/packages/kbn-field-utils/src/components/field_icon/index.tsx @@ -9,13 +9,13 @@ import React, { Fragment } from 'react'; import { type DataViewField } from '@kbn/data-views-plugin/common'; import type { FieldIconProps, GenericFieldIcon } from './field_icon'; -import { type FieldListItem } from '../../types'; +import { type FieldBase } from '../../types'; const Fallback = () => ; const LazyFieldIcon = React.lazy(() => import('./field_icon')) as GenericFieldIcon; -function WrappedFieldIcon(props: FieldIconProps) { +function WrappedFieldIcon(props: FieldIconProps) { return ( }> diff --git a/packages/kbn-field-utils/src/types.ts b/packages/kbn-field-utils/src/types.ts new file mode 100644 index 0000000000000..cfbc0339117a7 --- /dev/null +++ b/packages/kbn-field-utils/src/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { DataViewField } from '@kbn/data-views-plugin/common'; + +export type FieldTypeKnown = Exclude< + DataViewField['timeSeriesMetric'] | DataViewField['type'], + undefined +>; + +export interface FieldBase { + name: DataViewField['name']; + type?: DataViewField['type']; + displayName?: DataViewField['displayName']; + count?: DataViewField['count']; + timeSeriesMetric?: DataViewField['timeSeriesMetric']; + esTypes?: DataViewField['esTypes']; + scripted?: DataViewField['scripted']; +} + +export type GetCustomFieldType = (field: T) => FieldTypeKnown; diff --git a/packages/kbn-discover-utils/src/utils/field_types.ts b/packages/kbn-field-utils/src/utils/field_types.ts similarity index 87% rename from packages/kbn-discover-utils/src/utils/field_types.ts rename to packages/kbn-field-utils/src/utils/field_types.ts index 320f606dd0d8e..88d1a46949494 100644 --- a/packages/kbn-discover-utils/src/utils/field_types.ts +++ b/packages/kbn-field-utils/src/utils/field_types.ts @@ -6,12 +6,7 @@ * Side Public License, v 1. */ -import type { DataViewField } from '@kbn/data-views-plugin/common'; - -export type FieldTypeKnown = Exclude< - DataViewField['timeSeriesMetric'] | DataViewField['type'], - undefined ->; +import { type FieldTypeKnown } from '../types'; /** * Field types for which name and description are defined diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.test.ts b/packages/kbn-field-utils/src/utils/get_field_icon_type.test.ts similarity index 91% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.test.ts rename to packages/kbn-field-utils/src/utils/get_field_icon_type.test.ts index 70f54ba84685e..bb0c8f201f52e 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.test.ts +++ b/packages/kbn-field-utils/src/utils/get_field_icon_type.test.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { DataViewField } from '@kbn/data-views-plugin/common'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; import { getFieldIconType } from './get_field_icon_type'; -describe('UnifiedFieldList getFieldIconType()', () => { +describe('FieldUtils getFieldIconType()', () => { it('extracts type for non-string types', () => { expect( getFieldIconType({ diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts b/packages/kbn-field-utils/src/utils/get_field_icon_type.ts similarity index 83% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts rename to packages/kbn-field-utils/src/utils/get_field_icon_type.ts index b03ad8cb1389e..bb3bdeca2315c 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts +++ b/packages/kbn-field-utils/src/utils/get_field_icon_type.ts @@ -7,9 +7,9 @@ */ import { type DataViewField } from '@kbn/data-views-plugin/common'; -import { isKnownFieldType } from '@kbn/discover-utils'; -import type { FieldListItem, GetCustomFieldType } from '../../types'; +import { isKnownFieldType } from './field_types'; import { getFieldType } from './get_field_type'; +import type { FieldBase, GetCustomFieldType } from '../types'; /** * Returns an icon type for a field @@ -17,7 +17,7 @@ import { getFieldType } from './get_field_type'; * @param getCustomFieldType * @public */ -export function getFieldIconType( +export function getFieldIconType( field: T, getCustomFieldType?: GetCustomFieldType ): string { diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type.test.ts b/packages/kbn-field-utils/src/utils/get_field_type.test.ts similarity index 94% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_type.test.ts rename to packages/kbn-field-utils/src/utils/get_field_type.test.ts index 99e109603132f..d336f631bb80f 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type.test.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type.test.ts @@ -9,7 +9,7 @@ import { DataViewField } from '@kbn/data-views-plugin/common'; import { getFieldType } from './get_field_type'; -describe('UnifiedFieldList getFieldType()', () => { +describe('FieldUtils getFieldType()', () => { it('uses time series metric if set', () => { expect( getFieldType({ diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type.ts b/packages/kbn-field-utils/src/utils/get_field_type.ts similarity index 76% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_type.ts rename to packages/kbn-field-utils/src/utils/get_field_type.ts index fc92301b8f8e3..52eb701613a11 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type.ts @@ -7,14 +7,13 @@ */ import { type DataViewField } from '@kbn/data-views-plugin/common'; -import type { FieldTypeKnown } from '@kbn/discover-utils/types'; -import type { FieldListItem } from '../../types'; +import type { FieldBase, FieldTypeKnown } from '../types'; /** * Returns a field type. Time series metric type will override the original field type. * @param field */ -export function getFieldType(field: T): FieldTypeKnown { +export function getFieldType(field: T): FieldTypeKnown { const timeSeriesMetric = field.timeSeriesMetric; if (timeSeriesMetric) { return timeSeriesMetric; diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.test.ts b/packages/kbn-field-utils/src/utils/get_field_type_description.test.ts similarity index 92% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.test.ts rename to packages/kbn-field-utils/src/utils/get_field_type_description.test.ts index 8c9ed41e05287..ae2153464eefb 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.test.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type_description.test.ts @@ -7,9 +7,9 @@ */ import { getFieldTypeDescription, UNKNOWN_FIELD_TYPE_DESC } from './get_field_type_description'; -import { KNOWN_FIELD_TYPES } from '@kbn/discover-utils'; +import { KNOWN_FIELD_TYPES } from './field_types'; -describe('UnifiedFieldList getFieldTypeDescription()', () => { +describe('FieldUtils getFieldTypeDescription()', () => { describe('known field types should be recognized', () => { it.each(Object.values(KNOWN_FIELD_TYPES))( `'%s' should return a string that does not match '${UNKNOWN_FIELD_TYPE_DESC}'`, diff --git a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.ts b/packages/kbn-field-utils/src/utils/get_field_type_description.ts similarity index 66% rename from packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.ts rename to packages/kbn-field-utils/src/utils/get_field_type_description.ts index 7f6f9b6e1d765..3049da4304ec7 100644 --- a/packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type_description.ts @@ -8,13 +8,13 @@ import { i18n } from '@kbn/i18n'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; -import { KNOWN_FIELD_TYPES } from '@kbn/discover-utils'; +import { KNOWN_FIELD_TYPES } from './field_types'; /** * A user-friendly description of an unknown field type */ export const UNKNOWN_FIELD_TYPE_DESC = i18n.translate( - 'unifiedFieldList.fieldNameDescription.unknownField', + 'fieldUtils.fieldNameDescription.unknownField', { defaultMessage: 'Unknown field', } @@ -33,110 +33,110 @@ export function getFieldTypeDescription(type?: string) { const knownType: KNOWN_FIELD_TYPES = type as KNOWN_FIELD_TYPES; switch (knownType) { case KNOWN_FIELD_TYPES.DOCUMENT: - return i18n.translate('unifiedFieldList.fieldNameDescription.recordField', { + return i18n.translate('fieldUtils.fieldNameDescription.recordField', { defaultMessage: 'Count of records.', }); case KNOWN_FIELD_TYPES.BINARY: - return i18n.translate('unifiedFieldList.fieldNameDescription.binaryField', { + return i18n.translate('fieldUtils.fieldNameDescription.binaryField', { defaultMessage: 'Binary value encoded as a Base64 string.', }); case KNOWN_FIELD_TYPES.BOOLEAN: - return i18n.translate('unifiedFieldList.fieldNameDescription.booleanField', { + return i18n.translate('fieldUtils.fieldNameDescription.booleanField', { defaultMessage: 'True and false values.', }); case KNOWN_FIELD_TYPES.CONFLICT: - return i18n.translate('unifiedFieldList.fieldNameDescription.conflictField', { + return i18n.translate('fieldUtils.fieldNameDescription.conflictField', { defaultMessage: 'Field has values of different types. Resolve in Management > Data Views.', }); case KNOWN_FIELD_TYPES.COUNTER: - return i18n.translate('unifiedFieldList.fieldNameDescription.counterField', { + return i18n.translate('fieldUtils.fieldNameDescription.counterField', { defaultMessage: 'A number that only increases or resets to 0 (zero). Available only for numeric and aggregate_metric_double fields.', }); case KNOWN_FIELD_TYPES.DATE: - return i18n.translate('unifiedFieldList.fieldNameDescription.dateField', { + return i18n.translate('fieldUtils.fieldNameDescription.dateField', { defaultMessage: 'A date string or the number of seconds or milliseconds since 1/1/1970.', }); case KNOWN_FIELD_TYPES.DATE_RANGE: - return i18n.translate('unifiedFieldList.fieldNameDescription.dateRangeField', { + return i18n.translate('fieldUtils.fieldNameDescription.dateRangeField', { defaultMessage: 'Range of date values.', }); case KNOWN_FIELD_TYPES.DENSE_VECTOR: - return i18n.translate('unifiedFieldList.fieldNameDescription.denseVectorField', { + return i18n.translate('fieldUtils.fieldNameDescription.denseVectorField', { defaultMessage: 'Records dense vectors of float values.', }); case KNOWN_FIELD_TYPES.GAUGE: - return i18n.translate('unifiedFieldList.fieldNameDescription.gaugeField', { + return i18n.translate('fieldUtils.fieldNameDescription.gaugeField', { defaultMessage: 'A number that can increase or decrease. Available only for numeric and aggregate_metric_double fields.', }); case KNOWN_FIELD_TYPES.GEO_POINT: - return i18n.translate('unifiedFieldList.fieldNameDescription.geoPointField', { + return i18n.translate('fieldUtils.fieldNameDescription.geoPointField', { defaultMessage: 'Latitude and longitude points.', }); case KNOWN_FIELD_TYPES.GEO_SHAPE: - return i18n.translate('unifiedFieldList.fieldNameDescription.geoShapeField', { + return i18n.translate('fieldUtils.fieldNameDescription.geoShapeField', { defaultMessage: 'Complex shapes, such as polygons.', }); case KNOWN_FIELD_TYPES.HISTOGRAM: - return i18n.translate('unifiedFieldList.fieldNameDescription.histogramField', { + return i18n.translate('fieldUtils.fieldNameDescription.histogramField', { defaultMessage: 'Pre-aggregated numerical values in the form of a histogram.', }); case KNOWN_FIELD_TYPES.IP: - return i18n.translate('unifiedFieldList.fieldNameDescription.ipAddressField', { + return i18n.translate('fieldUtils.fieldNameDescription.ipAddressField', { defaultMessage: 'IPv4 and IPv6 addresses.', }); case KNOWN_FIELD_TYPES.IP_RANGE: - return i18n.translate('unifiedFieldList.fieldNameDescription.ipAddressRangeField', { + return i18n.translate('fieldUtils.fieldNameDescription.ipAddressRangeField', { defaultMessage: 'Range of ip values supporting either IPv4 or IPv6 (or mixed) addresses.', }); case KNOWN_FIELD_TYPES.FLATTENED: - return i18n.translate('unifiedFieldList.fieldNameDescription.flattenedField', { + return i18n.translate('fieldUtils.fieldNameDescription.flattenedField', { defaultMessage: 'An entire JSON object as a single field value.', }); case KNOWN_FIELD_TYPES.MURMUR3: - return i18n.translate('unifiedFieldList.fieldNameDescription.murmur3Field', { + return i18n.translate('fieldUtils.fieldNameDescription.murmur3Field', { defaultMessage: 'Field that computes and stores hashes of values.', }); case KNOWN_FIELD_TYPES.NUMBER: - return i18n.translate('unifiedFieldList.fieldNameDescription.numberField', { + return i18n.translate('fieldUtils.fieldNameDescription.numberField', { defaultMessage: 'Long, integer, short, byte, double, and float values.', }); case KNOWN_FIELD_TYPES.RANK_FEATURE: - return i18n.translate('unifiedFieldList.fieldNameDescription.rankFeatureField', { + return i18n.translate('fieldUtils.fieldNameDescription.rankFeatureField', { defaultMessage: 'Records a numeric feature to boost hits at query time.', }); case KNOWN_FIELD_TYPES.RANK_FEATURES: - return i18n.translate('unifiedFieldList.fieldNameDescription.rankFeaturesField', { + return i18n.translate('fieldUtils.fieldNameDescription.rankFeaturesField', { defaultMessage: 'Records numeric features to boost hits at query time.', }); case KNOWN_FIELD_TYPES.POINT: - return i18n.translate('unifiedFieldList.fieldNameDescription.pointField', { + return i18n.translate('fieldUtils.fieldNameDescription.pointField', { defaultMessage: 'Arbitrary cartesian points.', }); case KNOWN_FIELD_TYPES.SHAPE: - return i18n.translate('unifiedFieldList.fieldNameDescription.shapeField', { + return i18n.translate('fieldUtils.fieldNameDescription.shapeField', { defaultMessage: 'Arbitrary cartesian geometries.', }); case KNOWN_FIELD_TYPES.STRING: - return i18n.translate('unifiedFieldList.fieldNameDescription.stringField', { + return i18n.translate('fieldUtils.fieldNameDescription.stringField', { defaultMessage: 'Full text such as the body of an email or a product description.', }); case KNOWN_FIELD_TYPES.TEXT: - return i18n.translate('unifiedFieldList.fieldNameDescription.textField', { + return i18n.translate('fieldUtils.fieldNameDescription.textField', { defaultMessage: 'Full text such as the body of an email or a product description.', }); case KNOWN_FIELD_TYPES.KEYWORD: - return i18n.translate('unifiedFieldList.fieldNameDescription.keywordField', { + return i18n.translate('fieldUtils.fieldNameDescription.keywordField', { defaultMessage: 'Structured content such as an ID, email address, hostname, status code, or tag.', }); case KNOWN_FIELD_TYPES.NESTED: - return i18n.translate('unifiedFieldList.fieldNameDescription.nestedField', { + return i18n.translate('fieldUtils.fieldNameDescription.nestedField', { defaultMessage: 'JSON object that preserves the relationship between its subfields.', }); case KNOWN_FIELD_TYPES.VERSION: - return i18n.translate('unifiedFieldList.fieldNameDescription.versionField', { + return i18n.translate('fieldUtils.fieldNameDescription.versionField', { defaultMessage: 'Software versions. Supports "Semantic Versioning" precedence rules.', }); default: diff --git a/packages/kbn-discover-utils/src/utils/get_field_type_name.test.ts b/packages/kbn-field-utils/src/utils/get_field_type_name.test.ts similarity index 96% rename from packages/kbn-discover-utils/src/utils/get_field_type_name.test.ts rename to packages/kbn-field-utils/src/utils/get_field_type_name.test.ts index feed44a08aed2..a471672beab34 100644 --- a/packages/kbn-discover-utils/src/utils/get_field_type_name.test.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type_name.test.ts @@ -9,7 +9,7 @@ import { getFieldTypeName, UNKNOWN_FIELD_TYPE_MESSAGE } from './get_field_type_name'; import { KNOWN_FIELD_TYPES } from './field_types'; -describe('UnifiedFieldList getFieldTypeName()', () => { +describe('FieldUtils getFieldTypeName()', () => { describe('known field types should be recognized', () => { it.each(Object.values(KNOWN_FIELD_TYPES))( `'%s' should return a string that does not match '${UNKNOWN_FIELD_TYPE_MESSAGE}'`, diff --git a/packages/kbn-discover-utils/src/utils/get_field_type_name.ts b/packages/kbn-field-utils/src/utils/get_field_type_name.ts similarity index 65% rename from packages/kbn-discover-utils/src/utils/get_field_type_name.ts rename to packages/kbn-field-utils/src/utils/get_field_type_name.ts index 7e7bd102f3353..65ce720385b8e 100644 --- a/packages/kbn-discover-utils/src/utils/get_field_type_name.ts +++ b/packages/kbn-field-utils/src/utils/get_field_type_name.ts @@ -14,7 +14,7 @@ import { KNOWN_FIELD_TYPES } from './field_types'; * A user-friendly name of an unknown field type */ export const UNKNOWN_FIELD_TYPE_MESSAGE = i18n.translate( - 'discover.fieldNameIcons.unknownFieldAriaLabel', + 'fieldUtils.fieldNameIcons.unknownFieldAriaLabel', { defaultMessage: 'Unknown field', } @@ -32,7 +32,7 @@ export function getFieldTypeName(type?: string) { if (type === 'source') { // Note that this type is currently not provided, type for _source is undefined - return i18n.translate('discover.fieldNameIcons.sourceFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.sourceFieldAriaLabel', { defaultMessage: 'Source field', }); } @@ -40,107 +40,107 @@ export function getFieldTypeName(type?: string) { const knownType: KNOWN_FIELD_TYPES = type as KNOWN_FIELD_TYPES; switch (knownType) { case KNOWN_FIELD_TYPES.DOCUMENT: - return i18n.translate('discover.fieldNameIcons.recordAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.recordAriaLabel', { defaultMessage: 'Records', }); case KNOWN_FIELD_TYPES.BINARY: - return i18n.translate('discover.fieldNameIcons.binaryAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.binaryAriaLabel', { defaultMessage: 'Binary', }); case KNOWN_FIELD_TYPES.BOOLEAN: - return i18n.translate('discover.fieldNameIcons.booleanAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.booleanAriaLabel', { defaultMessage: 'Boolean', }); case KNOWN_FIELD_TYPES.CONFLICT: - return i18n.translate('discover.fieldNameIcons.conflictFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.conflictFieldAriaLabel', { defaultMessage: 'Conflict', }); case KNOWN_FIELD_TYPES.COUNTER: - return i18n.translate('discover.fieldNameIcons.counterFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.counterFieldAriaLabel', { defaultMessage: 'Counter metric', }); case KNOWN_FIELD_TYPES.DATE: - return i18n.translate('discover.fieldNameIcons.dateFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.dateFieldAriaLabel', { defaultMessage: 'Date', }); case KNOWN_FIELD_TYPES.DATE_RANGE: - return i18n.translate('discover.fieldNameIcons.dateRangeFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.dateRangeFieldAriaLabel', { defaultMessage: 'Date range', }); case KNOWN_FIELD_TYPES.DENSE_VECTOR: - return i18n.translate('discover.fieldNameIcons.denseVectorFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.denseVectorFieldAriaLabel', { defaultMessage: 'Dense vector', }); case KNOWN_FIELD_TYPES.GAUGE: - return i18n.translate('discover.fieldNameIcons.gaugeFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.gaugeFieldAriaLabel', { defaultMessage: 'Gauge metric', }); case KNOWN_FIELD_TYPES.GEO_POINT: - return i18n.translate('discover.fieldNameIcons.geoPointFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.geoPointFieldAriaLabel', { defaultMessage: 'Geo point', }); case KNOWN_FIELD_TYPES.GEO_SHAPE: - return i18n.translate('discover.fieldNameIcons.geoShapeFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.geoShapeFieldAriaLabel', { defaultMessage: 'Geo shape', }); case KNOWN_FIELD_TYPES.HISTOGRAM: - return i18n.translate('discover.fieldNameIcons.histogramFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.histogramFieldAriaLabel', { defaultMessage: 'Histogram', }); case KNOWN_FIELD_TYPES.IP: - return i18n.translate('discover.fieldNameIcons.ipAddressFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.ipAddressFieldAriaLabel', { defaultMessage: 'IP address', }); case KNOWN_FIELD_TYPES.IP_RANGE: - return i18n.translate('discover.fieldNameIcons.ipRangeFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.ipRangeFieldAriaLabel', { defaultMessage: 'IP range', }); case KNOWN_FIELD_TYPES.FLATTENED: - return i18n.translate('discover.fieldNameIcons.flattenedFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.flattenedFieldAriaLabel', { defaultMessage: 'Flattened', }); case KNOWN_FIELD_TYPES.MURMUR3: - return i18n.translate('discover.fieldNameIcons.murmur3FieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.murmur3FieldAriaLabel', { defaultMessage: 'Murmur3', }); case KNOWN_FIELD_TYPES.NUMBER: - return i18n.translate('discover.fieldNameIcons.numberFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.numberFieldAriaLabel', { defaultMessage: 'Number', }); case KNOWN_FIELD_TYPES.RANK_FEATURE: - return i18n.translate('discover.fieldNameIcons.rankFeatureFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.rankFeatureFieldAriaLabel', { defaultMessage: 'Rank feature', }); case KNOWN_FIELD_TYPES.RANK_FEATURES: - return i18n.translate('discover.fieldNameIcons.rankFeaturesFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.rankFeaturesFieldAriaLabel', { defaultMessage: 'Rank features', }); case KNOWN_FIELD_TYPES.POINT: - return i18n.translate('discover.fieldNameIcons.pointFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.pointFieldAriaLabel', { defaultMessage: 'Point', }); case KNOWN_FIELD_TYPES.SHAPE: - return i18n.translate('discover.fieldNameIcons.shapeFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.shapeFieldAriaLabel', { defaultMessage: 'Shape', }); case KNOWN_FIELD_TYPES.STRING: - return i18n.translate('discover.fieldNameIcons.stringFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.stringFieldAriaLabel', { defaultMessage: 'String', }); case KNOWN_FIELD_TYPES.TEXT: - return i18n.translate('discover.fieldNameIcons.textFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.textFieldAriaLabel', { defaultMessage: 'Text', }); case KNOWN_FIELD_TYPES.KEYWORD: - return i18n.translate('discover.fieldNameIcons.keywordFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.keywordFieldAriaLabel', { defaultMessage: 'Keyword', }); case KNOWN_FIELD_TYPES.NESTED: - return i18n.translate('discover.fieldNameIcons.nestedFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.nestedFieldAriaLabel', { defaultMessage: 'Nested', }); case KNOWN_FIELD_TYPES.VERSION: - return i18n.translate('discover.fieldNameIcons.versionFieldAriaLabel', { + return i18n.translate('fieldUtils.fieldNameIcons.versionFieldAriaLabel', { defaultMessage: 'Version', }); default: diff --git a/packages/kbn-field-utils/tsconfig.json b/packages/kbn-field-utils/tsconfig.json new file mode 100644 index 0000000000000..9aaae0d119e68 --- /dev/null +++ b/packages/kbn-field-utils/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": ["*.ts", "src/**/*", "__mocks__/**/*.ts"], + "kbn_references": [ + "@kbn/i18n", + "@kbn/data-views-plugin", + "@kbn/react-field", + "@kbn/field-types", + ], + "exclude": ["target/**/*"] +} diff --git a/packages/kbn-field-utils/types.ts b/packages/kbn-field-utils/types.ts new file mode 100644 index 0000000000000..2d6f0e294e488 --- /dev/null +++ b/packages/kbn-field-utils/types.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { FieldTypeKnown, FieldBase } from './src/types'; diff --git a/packages/kbn-unified-data-table/index.ts b/packages/kbn-unified-data-table/index.ts index cc692420cd209..7e823f9d6b4b5 100644 --- a/packages/kbn-unified-data-table/index.ts +++ b/packages/kbn-unified-data-table/index.ts @@ -9,6 +9,7 @@ export { UnifiedDataTable, DataLoadingState } from './src/components/data_table'; export type { UnifiedDataTableProps } from './src/components/data_table'; export { getDisplayedColumns } from './src/utils/columns'; +export { getTextBasedColumnTypes } from './src/utils/get_column_types'; export { ROWS_HEIGHT_OPTIONS } from './src/constants'; export { JSONCodeEditorCommonMemoized } from './src/components/json_code_editor/json_code_editor_common'; diff --git a/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap new file mode 100644 index 0000000000000..253289db87177 --- /dev/null +++ b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap @@ -0,0 +1,1720 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Data table columns column tokens returns eui grid columns with tokens 1`] = ` +Array [ + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": false, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display":
    + + + timestamp + + + + +
    , + "displayAsText": "timestamp", + "id": "timestamp", + "initialWidth": 212, + "isSortable": true, + "schema": "datetime", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display": , + "displayAsText": "extension", + "id": "extension", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + ], + "display": , + "displayAsText": "message", + "id": "message", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, +] +`; + +exports[`Data table columns column tokens returns eui grid columns with tokens for custom column types 1`] = ` +Array [ + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display": , + "displayAsText": "extension", + "id": "extension", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + ], + "display": , + "displayAsText": "message", + "id": "message", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, +] +`; + +exports[`Data table columns getEuiGridColumns returns eui grid columns showing default columns 1`] = ` +Array [ + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": false, + "showMoveLeft": false, + "showMoveRight": false, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display": undefined, + "displayAsText": "extension", + "id": "extension", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": false, + "showMoveLeft": false, + "showMoveRight": false, + }, + "cellActions": Array [ + [Function], + ], + "display": undefined, + "displayAsText": "message", + "id": "message", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, +] +`; + +exports[`Data table columns getEuiGridColumns returns eui grid columns with time column 1`] = ` +Array [ + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": false, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display":
    + + + timestamp + + + + +
    , + "displayAsText": "timestamp", + "id": "timestamp", + "initialWidth": 212, + "isSortable": true, + "schema": "datetime", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display": undefined, + "displayAsText": "extension", + "id": "extension", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + ], + "display": undefined, + "displayAsText": "message", + "id": "message", + "isSortable": false, + "schema": "string", + "visibleCellActions": undefined, + }, +] +`; + +exports[`Data table columns getEuiGridColumns returns eui grid with in memory sorting 1`] = ` +Array [ + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": false, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display":
    + + + timestamp + + + + +
    , + "displayAsText": "timestamp", + "id": "timestamp", + "initialWidth": 212, + "isSortable": true, + "schema": "datetime", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + [Function], + [Function], + ], + "display": undefined, + "displayAsText": "extension", + "id": "extension", + "isSortable": true, + "schema": "string", + "visibleCellActions": undefined, + }, + Object { + "actions": Object { + "additional": Array [ + Object { + "data-test-subj": "gridCopyColumnNameToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + Object { + "data-test-subj": "gridCopyColumnValuesToClipBoardButton", + "iconProps": Object { + "size": "m", + }, + "iconType": "copyClipboard", + "label": , + "onClick": [Function], + "size": "xs", + }, + ], + "showHide": Object { + "iconType": "cross", + "label": "Remove column", + }, + "showMoveLeft": true, + "showMoveRight": true, + }, + "cellActions": Array [ + [Function], + ], + "display": undefined, + "displayAsText": "message", + "id": "message", + "isSortable": true, + "schema": "string", + "visibleCellActions": undefined, + }, +] +`; diff --git a/packages/kbn-unified-data-table/src/components/data_table.test.tsx b/packages/kbn-unified-data-table/src/components/data_table.test.tsx index 8803e12509284..c59149132cdf4 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.test.tsx @@ -324,27 +324,36 @@ describe('UnifiedDataTable', () => { }); it('should render provided in renderDocumentView DocumentView on expand clicked', async () => { + const expandedDoc = { + id: 'test', + raw: { + _index: 'test_i', + _id: 'test', + }, + flattened: { test: jest.fn() }, + }; + const columnTypesOverride = { testField: 'number ' }; + const renderDocumentViewMock = jest.fn((hit: DataTableRecord) => ( +
    {hit.id}
    + )); + const component = await getComponent({ ...getProps(), - expandedDoc: { - id: 'test', - raw: { - _index: 'test_i', - _id: 'test', - }, - flattened: { test: jest.fn() }, - }, + expandedDoc, setExpandedDoc: jest.fn(), - renderDocumentView: ( - hit: DataTableRecord, - displayedRows: DataTableRecord[], - displayedColumns: string[] - ) =>
    {hit.id}
    , + columnTypes: columnTypesOverride, + renderDocumentView: renderDocumentViewMock, externalControlColumns: [testLeadingControlColumn], }); findTestSubject(component, 'docTableExpandToggleColumn').first().simulate('click'); expect(findTestSubject(component, 'test-document-view').exists()).toBeTruthy(); + expect(renderDocumentViewMock).toHaveBeenLastCalledWith( + expandedDoc, + getProps().rows, + ['_source'], + columnTypesOverride + ); }); describe('externalAdditionalControls', () => { diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 478114868da65..aa61ecdd1bfe6 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -43,7 +43,11 @@ import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { ThemeServiceStart } from '@kbn/react-kibana-context-common'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; -import { UnifiedDataTableSettings, ValueToStringConverter } from '../types'; +import type { + UnifiedDataTableSettings, + ValueToStringConverter, + DataTableColumnTypes, +} from '../types'; import { getDisplayedColumns } from '../utils/columns'; import { convertValueToString } from '../utils/convert_value_to_string'; import { getRowsPerPageOptions } from '../utils/rows_per_page'; @@ -75,6 +79,9 @@ interface SortObj { direction: string; } +/** + * Unified Data Table props + */ export interface UnifiedDataTableProps { /** * Determines which element labels the grid for ARIA @@ -88,6 +95,16 @@ export interface UnifiedDataTableProps { * Determines ids of the columns which are displayed */ columns: string[]; + /** + * If not provided, types will be derived by default from the dataView field types. + * For displaying text-based search results, pass column types (which are available separately in the fetch request) down here. + * Check available utils in `utils/get_column_types.ts` + */ + columnTypes?: DataTableColumnTypes; + /** + * Field tokens could be rendered in column header next to the field name. + */ + showColumnTokens?: boolean; /** * If set, the given document is displayed in a flyout */ @@ -214,7 +231,8 @@ export interface UnifiedDataTableProps { renderDocumentView?: ( hit: DataTableRecord, displayedRows: DataTableRecord[], - displayedColumns: string[] + displayedColumns: string[], + columnTypes?: DataTableColumnTypes ) => JSX.Element | undefined; /** * Optional value for providing configuration setting for UnifiedDataTable rows height @@ -300,6 +318,8 @@ const CONTROL_COLUMN_IDS_DEFAULT = ['openDetails', 'select']; export const UnifiedDataTable = ({ ariaLabelledBy, columns, + columnTypes, + showColumnTokens, controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT, dataView, loadingState, @@ -509,16 +529,16 @@ export const UnifiedDataTable = ({ */ const renderCellValue = useMemo( () => - getRenderCellValueFn( + getRenderCellValueFn({ dataView, - displayedRows, + rows: displayedRows, useNewFieldsApi, shouldShowFieldHandler, - () => dataGridRef.current?.closeCellPopover(), - services.fieldFormats, - maxDocFieldsDisplayed, - externalCustomRenderers - ), + closePopover: () => dataGridRef.current?.closeCellPopover(), + fieldFormats: services.fieldFormats, + maxEntries: maxDocFieldsDisplayed, + externalCustomRenderers, + }), [ dataView, displayedRows, @@ -616,6 +636,8 @@ export const UnifiedDataTable = ({ onFilter, editField, visibleCellActions, + columnTypes, + showColumnTokens, }), [ onFilter, @@ -633,6 +655,8 @@ export const UnifiedDataTable = ({ valueToStringConverter, editField, visibleCellActions, + columnTypes, + showColumnTokens, ] ); @@ -841,7 +865,7 @@ export const UnifiedDataTable = ({ )} {canSetExpandedDoc && expandedDoc && - renderDocumentView!(expandedDoc, displayedRows, displayedColumns)} + renderDocumentView!(expandedDoc, displayedRows, displayedColumns, columnTypes)} ); diff --git a/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx new file mode 100644 index 0000000000000..a3dbf6f895027 --- /dev/null +++ b/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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, { ReactElement } from 'react'; +import { FieldIcon } from '@kbn/field-utils'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { + createStubDataView, + stubLogstashDataView, +} from '@kbn/data-views-plugin/common/data_view.stub'; +import { DataTableColumnHeader } from './data_table_column_header'; + +const stubDataViewWithNested = createStubDataView({ + spec: { + id: 'index_with_nested', + fields: { + 'nested_user.lastname': { + name: 'nested_user.lastname', + esTypes: ['text'], + type: 'string', + aggregatable: false, + searchable: true, + subType: { + nested: { + path: 'nested_user', + }, + }, + }, + 'nested_user.lastname.keyword': { + name: 'nested_user.lastname.keyword', + esTypes: ['keyword'], + type: 'string', + aggregatable: true, + searchable: true, + subType: { + multi: { + parent: 'nested_user.lastname', + }, + nested: { + path: 'nested_user', + }, + }, + }, + }, + title: 'index_with_nested', + }, +}); + +describe('DataTableColumnHeader', function () { + async function mountComponent(element: ReactElement) { + const component = mountWithIntl(element); + // wait for lazy modules + await new Promise((resolve) => setTimeout(resolve, 0)); + component.update(); + + return component; + } + it('should render a correct token', async () => { + const component = await mountComponent( + + ); + expect(component.text()).toBe('NumberbytesDisplayName'); + expect(component.find(FieldIcon).first().prop('type')).toBe('number'); + }); + + it('should render a correct token for a custom column type (in case of text-based queries)', async () => { + const component = await mountComponent( + + ); + expect(component.text()).toBe('KeywordbytesDisplayName'); + expect(component.find(FieldIcon).first().prop('type')).toBe('keyword'); + }); + + it('should not render a token for Document column', async () => { + const component = await mountComponent( + + ); + expect(component.text()).toBe('Document'); + expect(component.find(FieldIcon).exists()).toBe(false); + }); + + it('should render the nested icon', async () => { + const component = await mountComponent( + + ); + expect(component.text()).toBe('NestedNested User'); + expect(component.find(FieldIcon).first().prop('type')).toBe('nested'); + }); +}); diff --git a/packages/kbn-unified-data-table/src/components/data_table_column_header.tsx b/packages/kbn-unified-data-table/src/components/data_table_column_header.tsx new file mode 100644 index 0000000000000..37d8d937c0a89 --- /dev/null +++ b/packages/kbn-unified-data-table/src/components/data_table_column_header.tsx @@ -0,0 +1,83 @@ +/* + * Copyright 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, { useMemo } from 'react'; +import { css } from '@emotion/react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { FieldIcon, getFieldIconProps } from '@kbn/field-utils'; +import { isNestedFieldParent } from '@kbn/discover-utils'; +import type { DataTableColumnTypes } from '../types'; + +interface DataTableColumnHeaderProps { + dataView: DataView; + columnName: string | null; + columnDisplayName: string; + columnTypes?: DataTableColumnTypes; +} + +export const DataTableColumnHeader: React.FC = (props) => { + const { columnDisplayName, columnName, columnTypes, dataView } = props; + const columnToken = useMemo( + () => getRenderedToken({ columnName, columnTypes, dataView }), + [columnName, columnTypes, dataView] + ); + + return ( + + {columnToken && {columnToken}} + + {columnDisplayName} + + + ); +}; + +function getRenderedToken({ + dataView, + columnName, + columnTypes, +}: Pick) { + if (!columnName || columnName === '_source') { + return null; + } + + // for text-based searches + if (columnTypes) { + return columnTypes[columnName] && columnTypes[columnName] !== 'unknown' ? ( // renders an icon or nothing + + ) : null; + } + + const dataViewField = dataView.getFieldByName(columnName); + + if (dataViewField) { + return ; + } + + if (isNestedFieldParent(columnName, dataView)) { + return ; + } + + return null; +} diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx index 7eceeda173809..c46c676b48baa 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx @@ -39,102 +39,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, }); - expect(actual).toMatchInlineSnapshot(` - Array [ - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - }, - "cellActions": Array [ - [Function], - [Function], - [Function], - ], - "displayAsText": "extension", - "id": "extension", - "isSortable": false, - "schema": "string", - "visibleCellActions": undefined, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": false, - "showMoveRight": false, - }, - "cellActions": Array [ - [Function], - ], - "displayAsText": "message", - "id": "message", - "isSortable": false, - "schema": "string", - "visibleCellActions": undefined, - }, - ] - `); + expect(actual).toMatchSnapshot(); }); it('returns eui grid columns with time column', async () => { @@ -155,174 +60,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, }); - expect(actual).toMatchInlineSnapshot(` - Array [ - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - [Function], - [Function], - ], - "display":
    - - - timestamp - - - - -
    , - "displayAsText": "timestamp", - "id": "timestamp", - "initialWidth": 212, - "isSortable": true, - "schema": "datetime", - "visibleCellActions": undefined, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": Object { - "iconType": "cross", - "label": "Remove column", - }, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - [Function], - [Function], - ], - "displayAsText": "extension", - "id": "extension", - "isSortable": false, - "schema": "string", - "visibleCellActions": undefined, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": Object { - "iconType": "cross", - "label": "Remove column", - }, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - ], - "displayAsText": "message", - "id": "message", - "isSortable": false, - "schema": "string", - "visibleCellActions": undefined, - }, - ] - `); + expect(actual).toMatchSnapshot(); }); it('returns eui grid with in memory sorting', async () => { @@ -343,174 +81,7 @@ describe('Data table columns', function () { servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, }); - expect(actual).toMatchInlineSnapshot(` - Array [ - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": false, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - [Function], - [Function], - ], - "display":
    - - - timestamp - - - - -
    , - "displayAsText": "timestamp", - "id": "timestamp", - "initialWidth": 212, - "isSortable": true, - "schema": "datetime", - "visibleCellActions": undefined, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": Object { - "iconType": "cross", - "label": "Remove column", - }, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - [Function], - [Function], - ], - "displayAsText": "extension", - "id": "extension", - "isSortable": true, - "schema": "string", - "visibleCellActions": undefined, - }, - Object { - "actions": Object { - "additional": Array [ - Object { - "data-test-subj": "gridCopyColumnNameToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - Object { - "data-test-subj": "gridCopyColumnValuesToClipBoardButton", - "iconProps": Object { - "size": "m", - }, - "iconType": "copyClipboard", - "label": , - "onClick": [Function], - "size": "xs", - }, - ], - "showHide": Object { - "iconType": "cross", - "label": "Remove column", - }, - "showMoveLeft": true, - "showMoveRight": true, - }, - "cellActions": Array [ - [Function], - ], - "displayAsText": "message", - "id": "message", - "isSortable": true, - "schema": "string", - "visibleCellActions": undefined, - }, - ] - `); + expect(actual).toMatchSnapshot(); }); }); @@ -538,4 +109,54 @@ describe('Data table columns', function () { expect(actual).toEqual(['timestamp', 'extension', 'message']); }); }); + + describe('column tokens', () => { + it('returns eui grid columns with tokens', async () => { + const actual = getEuiGridColumns({ + showColumnTokens: true, + columns: columnsWithTimeCol, + settings: {}, + dataView: dataViewWithTimefieldMock, + defaultColumns: false, + isSortEnabled: true, + isPlainRecord: false, + valueToStringConverter: dataTableContextMock.valueToStringConverter, + rowsCount: 100, + services: { + uiSettings: servicesMock.uiSettings, + toastNotifications: servicesMock.toastNotifications, + }, + hasEditDataViewPermission: () => + servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), + onFilter: () => {}, + }); + expect(actual).toMatchSnapshot(); + }); + + it('returns eui grid columns with tokens for custom column types', async () => { + const actual = getEuiGridColumns({ + showColumnTokens: true, + columnTypes: { + extension: 'number', + message: 'keyword', + }, + columns, + settings: {}, + dataView: dataViewWithTimefieldMock, + defaultColumns: false, + isSortEnabled: true, + isPlainRecord: false, + valueToStringConverter: dataTableContextMock.valueToStringConverter, + rowsCount: 100, + services: { + uiSettings: servicesMock.uiSettings, + toastNotifications: servicesMock.toastNotifications, + }, + hasEditDataViewPermission: () => + servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), + onFilter: () => {}, + }); + expect(actual).toMatchSnapshot(); + }); + }); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index 4b4ac622e78f6..13b740a0bc703 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -20,13 +20,16 @@ import { ToastsStart, IUiSettingsClient } from '@kbn/core/public'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { ExpandButton } from './data_table_expand_button'; import { UnifiedDataTableSettings } from '../types'; -import type { ValueToStringConverter } from '../types'; +import type { ValueToStringConverter, DataTableColumnTypes } from '../types'; import { buildCellActions } from './default_cell_actions'; import { getSchemaByKbnType } from './data_table_schema'; import { SelectButton } from './data_table_document_selection'; import { defaultTimeColumnWidth } from '../constants'; import { buildCopyColumnNameButton, buildCopyColumnValuesButton } from './build_copy_column_button'; import { buildEditFieldButton } from './build_edit_field_button'; +import { DataTableColumnHeader } from './data_table_column_header'; + +const DataTableColumnHeaderMemoized = React.memo(DataTableColumnHeader); const openDetails = { id: 'openDetails', @@ -80,6 +83,8 @@ function buildEuiGridColumn({ editField, columnCellActions, visibleCellActions, + columnTypes, + showColumnTokens, }: { columnName: string; columnWidth: number | undefined; @@ -95,6 +100,8 @@ function buildEuiGridColumn({ editField?: (fieldName: string) => void; columnCellActions?: EuiDataGridColumnCellAction[]; visibleCellActions?: number; + columnTypes?: DataTableColumnTypes; + showColumnTokens?: boolean; }) { const dataViewField = dataView.getFieldByName(columnName); const editFieldButton = @@ -122,6 +129,14 @@ function buildEuiGridColumn({ id: columnName, schema: getSchemaByKbnType(dataViewField?.type), isSortable: isSortEnabled && (isPlainRecord || dataViewField?.sortable === true), + display: showColumnTokens ? ( + + ) : undefined, displayAsText: columnDisplayName, actions: { showHide: @@ -203,6 +218,8 @@ export function getEuiGridColumns({ onFilter, editField, visibleCellActions, + columnTypes, + showColumnTokens, }: { columns: string[]; columnsCellActions?: EuiDataGridColumnCellAction[][]; @@ -221,6 +238,8 @@ export function getEuiGridColumns({ onFilter: DocViewFilterFn; editField?: (fieldName: string) => void; visibleCellActions?: number; + columnTypes?: DataTableColumnTypes; + showColumnTokens?: boolean; }) { const getColWidth = (column: string) => settings?.columns?.[column]?.width ?? 0; @@ -240,6 +259,8 @@ export function getEuiGridColumns({ onFilter, editField, visibleCellActions, + columnTypes, + showColumnTokens, }) ); } diff --git a/packages/kbn-unified-data-table/src/types.ts b/packages/kbn-unified-data-table/src/types.ts index 79ca4e721e910..77eb6243ac35d 100644 --- a/packages/kbn-unified-data-table/src/types.ts +++ b/packages/kbn-unified-data-table/src/types.ts @@ -22,3 +22,8 @@ export type ValueToStringConverter = ( columnId: string, options?: { compatibleWithCSV?: boolean } ) => { formattedString: string; withFormula: boolean }; + +/** + * Custom column types per column name + */ +export type DataTableColumnTypes = Record; diff --git a/packages/kbn-unified-data-table/src/utils/get_column_types.test.ts b/packages/kbn-unified-data-table/src/utils/get_column_types.test.ts new file mode 100644 index 0000000000000..f26086607a966 --- /dev/null +++ b/packages/kbn-unified-data-table/src/utils/get_column_types.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { getTextBasedColumnTypes } from './get_column_types'; + +describe('getColumnTypes', () => { + describe('getTextBasedColumnTypes', () => { + test('returns a correct column types map', async () => { + const result = getTextBasedColumnTypes([ + { + id: '@timestamp', + name: '@timestamp', + meta: { + type: 'date', + }, + }, + { + id: 'agent.keyword', + name: 'agent.keyword', + meta: { + type: 'string', + }, + }, + { + id: 'bytes', + name: 'bytes', + meta: { + type: 'number', + }, + }, + ]); + expect(result).toMatchInlineSnapshot(` + Object { + "@timestamp": "date", + "agent.keyword": "string", + "bytes": "number", + } + `); + }); + }); +}); diff --git a/packages/kbn-unified-data-table/src/utils/get_column_types.ts b/packages/kbn-unified-data-table/src/utils/get_column_types.ts new file mode 100644 index 0000000000000..edc8c1eb49ce5 --- /dev/null +++ b/packages/kbn-unified-data-table/src/utils/get_column_types.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { DatatableColumn, DatatableColumnType } from '@kbn/expressions-plugin/common'; + +type TextBasedColumnTypes = Record; + +/** + * Column types for text based searches + * @param textBasedColumns + */ +export const getTextBasedColumnTypes = ( + textBasedColumns: DatatableColumn[] +): TextBasedColumnTypes => { + return textBasedColumns.reduce((map, next) => { + map[next.name] = next.meta.type; + return map; + }, {}); +}; diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx index 0f6624a120b9c..d522ae70d28b5 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx @@ -105,15 +105,15 @@ const build = (hit: EsHitRecord) => buildDataTableRecord(hit, dataViewMock); describe('Unified data table cell rendering', function () { it('renders bytes column correctly', () => { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { const closePopoverMockFn = jest.fn(); - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFields.map(build), - false, - () => false, - closePopoverMockFn, - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFields.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: closePopoverMockFn, + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = mountWithIntl( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - (fieldName) => ['extension', 'bytes'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: (fieldName) => ['extension', 'bytes'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFields.map(build), - true, - (fieldName) => ['extension', 'bytes'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFields.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => ['extension', 'bytes'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFields.map(build), - true, - (fieldName) => ['extension', 'bytes'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFields.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => ['extension', 'bytes'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, // this is the number of rendered items - 1 - ); + maxEntries: 1, + }); const component = shallow( - bytesDisplayName - - - - _index - - - - _score + and 3 more fields @@ -520,15 +492,15 @@ describe('Unified data table cell rendering', function () { }); it('renders fields-based column correctly when isDetails is set to true', () => { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFields.map(build), - true, - (fieldName) => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFields.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFieldsWithTopLevelObject.map(build), - true, - (fieldName) => ['object.value', 'extension', 'bytes'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsWithTopLevelObject.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => + ['object.value', 'extension', 'bytes'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { (dataViewMock.getFieldByName as jest.Mock).mockReturnValueOnce(undefined); - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFieldsWithTopLevelObject.map(build), - true, - (fieldName) => ['extension', 'bytes', 'object.value'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsWithTopLevelObject.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => + ['extension', 'bytes', 'object.value'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { const closePopoverMockFn = jest.fn(); - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFieldsWithTopLevelObject.map(build), - true, - () => false, - closePopoverMockFn, - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsWithTopLevelObject.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: () => false, + closePopover: closePopoverMockFn, + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { const closePopoverMockFn = jest.fn(); - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFieldsWithTopLevelObject.map(build), - true, - () => false, - closePopoverMockFn, - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsWithTopLevelObject.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: () => false, + closePopover: closePopoverMockFn, + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = mountWithIntl( { (dataViewMock.getFieldByName as jest.Mock).mockReturnValueOnce(undefined); - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsFieldsWithTopLevelObject.map(build), - true, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsWithTopLevelObject.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( { - const DataTableCellValue = getRenderCellValueFn( - dataViewMock, - rowsSource.map(build), - false, - () => false, - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsSource.map(build), + useNewFieldsApi: false, + shouldShowFieldHandler: () => false, + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( ['unmapped'].includes(fieldName), - jest.fn(), - mockServices.fieldFormats as unknown as FieldFormatsStart, - 100 - ); + const DataTableCellValue = getRenderCellValueFn({ + dataView: dataViewMock, + rows: rowsFieldsUnmapped.map(build), + useNewFieldsApi: true, + shouldShowFieldHandler: (fieldName) => ['unmapped'].includes(fieldName), + closePopover: jest.fn(), + fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, + maxEntries: 100, + }); const component = shallow( void, - fieldFormats: FieldFormatsStart, - maxEntries: number, - externalCustomRenderers?: Record< - string, - (props: EuiDataGridCellValueElementProps) => React.ReactNode - > - ) => - ({ +export const getRenderCellValueFn = ({ + dataView, + rows, + useNewFieldsApi, + shouldShowFieldHandler, + closePopover, + fieldFormats, + maxEntries, + externalCustomRenderers, +}: { + dataView: DataView; + rows: DataTableRecord[] | undefined; + useNewFieldsApi: boolean; + shouldShowFieldHandler: ShouldShowFieldInTableHandler; + closePopover: () => void; + fieldFormats: FieldFormatsStart; + maxEntries: number; + externalCustomRenderers?: Record< + string, + (props: EuiDataGridCellValueElementProps) => React.ReactNode + >; +}) => { + return ({ rowIndex, columnId, isDetails, @@ -122,7 +131,7 @@ export const getRenderCellValueFn = } if (field?.type === '_source' || useTopLevelObjectColumns) { - const pairs = useTopLevelObjectColumns + const pairs: FormattedHit = useTopLevelObjectColumns ? getTopLevelObjectPairs(row.raw, columnId, dataView, shouldShowFieldHandler).slice( 0, maxEntries @@ -135,10 +144,10 @@ export const getRenderCellValueFn = compressed className={classnames('unifiedDataTable__descriptionList', CELL_CLASS)} > - {pairs.map(([key, value]) => ( - + {pairs.map(([fieldDisplayName, value]) => ( + - {key} + {fieldDisplayName} ); }; +}; /** * Helper function to show top level objects @@ -272,8 +282,8 @@ function getTopLevelObjectPairs( const innerColumns = getInnerColumns(row.fields as Record, columnId); // Put the most important fields first const highlights: Record = (row.highlight as Record) ?? {}; - const highlightPairs: Array<[string, string]> = []; - const sourcePairs: Array<[string, string]> = []; + const highlightPairs: FormattedHit = []; + const sourcePairs: FormattedHit = []; Object.entries(innerColumns).forEach(([key, values]) => { const subField = dataView.getFieldByName(key); const displayKey = dataView.fields.getByName @@ -293,10 +303,10 @@ function getTopLevelObjectPairs( const pairs = highlights[key] ? highlightPairs : sourcePairs; if (displayKey) { if (shouldShowFieldHandler(displayKey)) { - pairs.push([displayKey, formatted]); + pairs.push([displayKey, formatted, key]); } } else { - pairs.push([key, formatted]); + pairs.push([key, formatted, key]); } }); return [...highlightPairs, ...sourcePairs]; diff --git a/packages/kbn-unified-data-table/tsconfig.json b/packages/kbn-unified-data-table/tsconfig.json index bed8d16a279b1..c9c4c1fef6fea 100644 --- a/packages/kbn-unified-data-table/tsconfig.json +++ b/packages/kbn-unified-data-table/tsconfig.json @@ -33,5 +33,6 @@ "@kbn/code-editor", "@kbn/config", "@kbn/monaco", + "@kbn/field-utils", ] } diff --git a/packages/kbn-unified-doc-viewer/src/components/field_name/field_name.tsx b/packages/kbn-unified-doc-viewer/src/components/field_name/field_name.tsx index 824de1da96dbb..4a525d7136214 100644 --- a/packages/kbn-unified-doc-viewer/src/components/field_name/field_name.tsx +++ b/packages/kbn-unified-doc-viewer/src/components/field_name/field_name.tsx @@ -14,7 +14,7 @@ import { i18n } from '@kbn/i18n'; import { FieldIcon, FieldIconProps } from '@kbn/react-field'; import type { DataViewField } from '@kbn/data-views-plugin/public'; import { getDataViewFieldSubtypeMulti } from '@kbn/es-query'; -import { getFieldTypeName } from '@kbn/discover-utils'; +import { getFieldTypeName } from '@kbn/field-utils'; interface Props { fieldName: string; diff --git a/packages/kbn-unified-doc-viewer/src/services/types.ts b/packages/kbn-unified-doc-viewer/src/services/types.ts index 0cce5ea3ff813..071704e0559a2 100644 --- a/packages/kbn-unified-doc-viewer/src/services/types.ts +++ b/packages/kbn-unified-doc-viewer/src/services/types.ts @@ -29,6 +29,11 @@ export interface DocViewRenderProps { hit: DataTableRecord; dataView: DataView; columns?: string[]; + /** + * If not provided, types will be derived by default from the dataView field types. + * For displaying text-based search results, define column types (which are available separately in the fetch request) here. + */ + columnTypes?: Record; query?: Query | AggregateQuery; textBasedHits?: DataTableRecord[]; filter?: DocViewFilterFn; diff --git a/packages/kbn-unified-doc-viewer/tsconfig.json b/packages/kbn-unified-doc-viewer/tsconfig.json index 856fbe93d6b0f..e9429af74bd74 100644 --- a/packages/kbn-unified-doc-viewer/tsconfig.json +++ b/packages/kbn-unified-doc-viewer/tsconfig.json @@ -23,5 +23,6 @@ "@kbn/i18n-react", "@kbn/i18n", "@kbn/react-field", + "@kbn/field-utils", ] } diff --git a/packages/kbn-unified-field-list/index.ts b/packages/kbn-unified-field-list/index.ts index ffee31c4642fc..fbcccb3c7630d 100755 --- a/packages/kbn-unified-field-list/index.ts +++ b/packages/kbn-unified-field-list/index.ts @@ -9,7 +9,6 @@ export { FieldList, type FieldListProps } from './src/components/field_list'; export { FieldListGrouped, type FieldListGroupedProps } from './src/components/field_list_grouped'; export { FieldListFilters, type FieldListFiltersProps } from './src/components/field_list_filters'; -export { FieldIcon, type FieldIconProps, getFieldIconProps } from './src/components/field_icon'; export { FieldItemButton, type FieldItemButtonProps } from './src/components/field_item_button'; export type { FieldTopValuesBucketProps, @@ -85,8 +84,6 @@ export { type QuerySubscriberParams, } from './src/hooks/use_query_subscriber'; -export { getFieldTypeDescription, getFieldType, getFieldIconType } from './src/utils/field_types'; - export { UnifiedFieldListSidebarContainer, type UnifiedFieldListSidebarContainerApi, diff --git a/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.tsx b/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.tsx index c9be7af08638c..fda7145eeae83 100644 --- a/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.tsx +++ b/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.tsx @@ -12,8 +12,8 @@ import classnames from 'classnames'; import { FieldButton, type FieldButtonProps } from '@kbn/react-field'; import { EuiButtonIcon, EuiButtonIconProps, EuiHighlight, EuiIcon, EuiToolTip } from '@elastic/eui'; import type { DataViewField } from '@kbn/data-views-plugin/common'; +import { FieldIcon, getFieldIconProps } from '@kbn/field-utils'; import { type FieldListItem, type GetCustomFieldType } from '../../types'; -import { FieldIcon, getFieldIconProps } from '../field_icon'; import { fieldNameWildcardMatcher } from '../../utils/field_name_wildcard_matcher'; import './field_item_button.scss'; diff --git a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx index b1a6387143edd..7179d326841ad 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx @@ -32,10 +32,15 @@ import type { CoreStart } from '@kbn/core-lifecycle-browser'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { type DataViewField } from '@kbn/data-views-plugin/common'; -import type { FieldTypeKnown } from '@kbn/discover-utils/types'; -import { getFieldTypeName, isKnownFieldType, KNOWN_FIELD_TYPE_LIST } from '@kbn/discover-utils'; -import { FieldIcon } from '../field_icon'; -import { getFieldIconType, getFieldTypeDescription } from '../../utils/field_types'; +import { + type FieldTypeKnown, + getFieldIconType, + getFieldTypeDescription, + getFieldTypeName, + isKnownFieldType, + KNOWN_FIELD_TYPE_LIST, + FieldIcon, +} from '@kbn/field-utils'; import type { FieldListItem, GetCustomFieldType } from '../../types'; const EQUAL_HEIGHT_OFFSET = 2; // to avoid changes in the header's height after "Clear all" button appears diff --git a/packages/kbn-unified-field-list/src/hooks/use_field_filters.ts b/packages/kbn-unified-field-list/src/hooks/use_field_filters.ts index 0c04ace0911f6..a6c84fbd30622 100644 --- a/packages/kbn-unified-field-list/src/hooks/use_field_filters.ts +++ b/packages/kbn-unified-field-list/src/hooks/use_field_filters.ts @@ -10,10 +10,9 @@ import { useMemo, useState } from 'react'; import { htmlIdGenerator } from '@elastic/eui'; import { type DataViewField } from '@kbn/data-views-plugin/common'; import type { CoreStart } from '@kbn/core-lifecycle-browser'; -import type { FieldTypeKnown } from '@kbn/discover-utils/types'; +import { type FieldTypeKnown, getFieldIconType } from '@kbn/field-utils'; import { type FieldListFiltersProps } from '../components/field_list_filters'; import { type FieldListItem, GetCustomFieldType } from '../types'; -import { getFieldIconType } from '../utils/field_types'; import { fieldNameWildcardMatcher } from '../utils/field_name_wildcard_matcher'; const htmlId = htmlIdGenerator('fieldList'); diff --git a/packages/kbn-unified-field-list/src/types.ts b/packages/kbn-unified-field-list/src/types.ts index dad321dbe56b3..3fde4b6e0085c 100755 --- a/packages/kbn-unified-field-list/src/types.ts +++ b/packages/kbn-unified-field-list/src/types.ts @@ -8,7 +8,7 @@ import type { DataViewField } from '@kbn/data-views-plugin/common'; import type { EuiButtonIconProps, EuiButtonProps } from '@elastic/eui'; -import type { FieldTypeKnown } from '@kbn/discover-utils/types'; +import type { FieldTypeKnown, FieldBase } from '@kbn/field-utils/types'; export interface BucketedAggregation { buckets: Array<{ @@ -48,15 +48,7 @@ export enum ExistenceFetchStatus { unknown = 'unknown', } -export interface FieldListItem { - name: DataViewField['name']; - type?: DataViewField['type']; - displayName?: DataViewField['displayName']; - count?: DataViewField['count']; - timeSeriesMetric?: DataViewField['timeSeriesMetric']; - esTypes?: DataViewField['esTypes']; - scripted?: DataViewField['scripted']; -} +export type FieldListItem = FieldBase; export enum FieldsGroupNames { SpecialFields = 'SpecialFields', diff --git a/packages/kbn-unified-field-list/tsconfig.json b/packages/kbn-unified-field-list/tsconfig.json index f60d203786439..27cbb23cf3d7c 100644 --- a/packages/kbn-unified-field-list/tsconfig.json +++ b/packages/kbn-unified-field-list/tsconfig.json @@ -30,6 +30,7 @@ "@kbn/discover-utils", "@kbn/ebt-tools", "@kbn/shared-ux-button-toolbar", + "@kbn/field-utils", ], "exclude": ["target/**/*"] } diff --git a/packages/kbn-visualization-ui-components/components/field_picker/field_picker.tsx b/packages/kbn-visualization-ui-components/components/field_picker/field_picker.tsx index 77def3fd4cd3b..4827bb2fd628c 100644 --- a/packages/kbn-visualization-ui-components/components/field_picker/field_picker.tsx +++ b/packages/kbn-visualization-ui-components/components/field_picker/field_picker.tsx @@ -11,7 +11,7 @@ import React, { useRef } from 'react'; import { i18n } from '@kbn/i18n'; import useEffectOnce from 'react-use/lib/useEffectOnce'; import { EuiComboBox, EuiComboBoxProps, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { FieldIcon } from '@kbn/unified-field-list/src/components/field_icon'; +import { FieldIcon } from '@kbn/field-utils/src/components/field_icon'; import classNames from 'classnames'; import type { DataType } from './types'; import { TruncatedLabel } from './truncated_label'; diff --git a/packages/kbn-visualization-ui-components/tsconfig.json b/packages/kbn-visualization-ui-components/tsconfig.json index 69de29b5eed5e..78f0b8a4b111f 100644 --- a/packages/kbn-visualization-ui-components/tsconfig.json +++ b/packages/kbn-visualization-ui-components/tsconfig.json @@ -30,6 +30,6 @@ "@kbn/ui-theme", "@kbn/coloring", "@kbn/field-formats-plugin", - "@kbn/unified-field-list", + "@kbn/field-utils", ], } diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index 6c566758c9d07..ff99c46816f25 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -191,6 +191,7 @@ export function ContextAppContent({ + documentState.textBasedQueryColumns + ? getTextBasedColumnTypes(documentState.textBasedQueryColumns) + : undefined, + [documentState.textBasedQueryColumns] + ); + const renderDocumentView = useCallback( - (hit: DataTableRecord, displayedRows: DataTableRecord[], displayedColumns: string[]) => ( + ( + hit: DataTableRecord, + displayedRows: DataTableRecord[], + displayedColumns: string[], + customColumnTypes?: DataTableColumnTypes + ) => ( - diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx index 7c0598abbfe18..e837ed6fbfa2a 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx @@ -34,6 +34,7 @@ export interface DiscoverGridFlyoutProps { filters?: Filter[]; query?: Query | AggregateQuery; columns: string[]; + columnTypes?: Record; hit: DataTableRecord; hits?: DataTableRecord[]; dataView: DataView; @@ -57,6 +58,7 @@ export function DiscoverGridFlyout({ hits, dataView, columns, + columnTypes, savedSearchId, filters, query, @@ -160,6 +162,7 @@ export function DiscoverGridFlyout({ { diff --git a/src/plugins/discover/public/components/doc_table/utils/row_formatter.test.ts b/src/plugins/discover/public/components/doc_table/utils/row_formatter.test.ts index e1ff381ae7b29..39a7e96fd0b5c 100644 --- a/src/plugins/discover/public/components/doc_table/utils/row_formatter.test.ts +++ b/src/plugins/discover/public/components/doc_table/utils/row_formatter.test.ts @@ -68,26 +68,32 @@ describe('Row formatter', () => { Array [ "also", "with \\"quotes\\" or 'single quotes'", + "also", ], Array [ "foo", "bar", + "foo", ], Array [ "hello", "

    World

    ", + "hello", ], Array [ "number", 42, + "number", ], Array [ "_id", "a", + "_id", ], Array [ "_score", 1, + "_score", ], ] } @@ -112,26 +118,12 @@ describe('Row formatter', () => { Array [ "also", "with \\"quotes\\" or 'single quotes'", + "also", ], Array [ - "foo", - "bar", - ], - Array [ - "hello", - "

    World

    ", - ], - Array [ - "number", - 42, - ], - Array [ - "_id", - "a", - ], - Array [ - "_score", - 1, + "and 4 more fields", + "", + null, ], ] } @@ -153,26 +145,32 @@ describe('Row formatter', () => { Array [ "number", 42, + "number", ], Array [ "also", "with \\"quotes\\" or 'single quotes'", + "also", ], Array [ "foo", "bar", + "foo", ], Array [ "hello", "

    World

    ", + "hello", ], Array [ "_id", "a", + "_id", ], Array [ "_score", 1, + "_score", ], ] } @@ -208,6 +206,7 @@ describe('Row formatter', () => { Array [ "object.value", "formatted, formatted", + "object.value", ], ] } @@ -266,10 +265,12 @@ describe('Row formatter', () => { Array [ "object.keys", "formatted, formatted", + "object.keys", ], Array [ "object.value", "formatted, formatted", + "object.value", ], ] } @@ -301,6 +302,7 @@ describe('Row formatter', () => { Array [ "object.value", "5, 10", + "object.value", ], ] } diff --git a/src/plugins/discover/public/components/doc_table/utils/row_formatter.tsx b/src/plugins/discover/public/components/doc_table/utils/row_formatter.tsx index 83af153fc419d..c5fa7f5b971ca 100644 --- a/src/plugins/discover/public/components/doc_table/utils/row_formatter.tsx +++ b/src/plugins/discover/public/components/doc_table/utils/row_formatter.tsx @@ -9,13 +9,17 @@ import React, { Fragment } from 'react'; import type { DataView } from '@kbn/data-views-plugin/public'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import type { DataTableRecord, ShouldShowFieldInTableHandler } from '@kbn/discover-utils/types'; +import type { + DataTableRecord, + ShouldShowFieldInTableHandler, + FormattedHit, +} from '@kbn/discover-utils/types'; import { formatHit } from '@kbn/discover-utils'; import './row_formatter.scss'; interface Props { - defPairs: Array; + defPairs: FormattedHit; } const TemplateComponent = ({ defPairs }: Props) => { return ( @@ -57,8 +61,8 @@ export const formatTopLevelObject = ( maxEntries: number ) => { const highlights = row.highlight ?? {}; - const highlightPairs: Array<[string, string]> = []; - const sourcePairs: Array<[string, string]> = []; + const highlightPairs: FormattedHit = []; + const sourcePairs: FormattedHit = []; const sorted = Object.entries(fields).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)); sorted.forEach(([key, values]) => { const field = dataView.getFieldByName(key); @@ -76,7 +80,7 @@ export const formatTopLevelObject = ( ) .join(', '); const pairs = highlights[key] ? highlightPairs : sourcePairs; - pairs.push([displayKey ? displayKey : key, formatted]); + pairs.push([displayKey ? displayKey : key, formatted, key]); }); return ; }; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index 6b4856d3a298f..7e7bf727fe230 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -59,9 +59,8 @@ import { SORT_DEFAULT_ORDER_SETTING, buildDataTableRecord, } from '@kbn/discover-utils'; -import type { UnifiedDataTableProps } from '@kbn/unified-data-table'; -import type { UnifiedDataTableSettings } from '@kbn/unified-data-table'; -import { columnActions } from '@kbn/unified-data-table'; +import type { UnifiedDataTableProps, UnifiedDataTableSettings } from '@kbn/unified-data-table'; +import { columnActions, getTextBasedColumnTypes } from '@kbn/unified-data-table'; import { VIEW_MODE, getDefaultRowsPerPage } from '../../common/constants'; import type { ISearchEmbeddable, SearchInput, SearchOutput } from './types'; import type { DiscoverServices } from '../build_services'; @@ -341,6 +340,9 @@ export class SavedSearchEmbeddable loading: false, }); + searchProps.columnTypes = result.textBasedQueryColumns + ? getTextBasedColumnTypes(result.textBasedQueryColumns) + : undefined; searchProps.rows = result.records; searchProps.totalHitCount = result.records.length; searchProps.isLoading = false; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx index f8c7aa39c1a7c..6c499a09d4152 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable_component.tsx @@ -43,6 +43,7 @@ export function SavedSearchEmbeddableComponent({ {...(searchProps as DiscoverGridEmbeddableProps)} // TODO later: remove the type casting to prevent unexpected errors due to missing props! loadingState={searchProps.isLoading ? DataLoadingState.loading : DataLoadingState.loaded} showFullScreenButton={false} + showColumnTokens query={query} className="unifiedDataTable" /> diff --git a/src/plugins/discover/public/embeddable/saved_search_grid.tsx b/src/plugins/discover/public/embeddable/saved_search_grid.tsx index 580a55534b573..ec27b15d15dbb 100644 --- a/src/plugins/discover/public/embeddable/saved_search_grid.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_grid.tsx @@ -5,13 +5,14 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import React, { memo, useCallback, useState } from 'react'; +import React, { useCallback, useState } from 'react'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { AggregateQuery, Query } from '@kbn/es-query'; import type { SearchResponseInterceptedWarning } from '@kbn/search-response-warnings'; import { DataLoadingState as DiscoverGridLoadingState, UnifiedDataTable, + type DataTableColumnTypes, } from '@kbn/unified-data-table'; import type { UnifiedDataTableProps } from '@kbn/unified-data-table'; import './saved_search_grid.scss'; @@ -29,20 +30,26 @@ export interface DiscoverGridEmbeddableProps extends UnifiedDataTableProps { savedSearchId?: string; } -export const DataGridMemoized = memo(UnifiedDataTable); +export const DiscoverGridMemoized = React.memo(UnifiedDataTable); export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) { const { interceptedWarnings, ...gridProps } = props; const [expandedDoc, setExpandedDoc] = useState(undefined); const renderDocumentView = useCallback( - (hit: DataTableRecord, displayedRows: DataTableRecord[], displayedColumns: string[]) => ( + ( + hit: DataTableRecord, + displayedRows: DataTableRecord[], + displayedColumns: string[], + customColumnTypes?: DataTableColumnTypes + ) => ( - { const fieldMapping = mapping(field); const displayName = fieldMapping?.displayName ?? field; - const fieldType = isNestedFieldParent(field, dataView) + const fieldType = columnTypes + ? columnTypes[field] // for text-based results types come separately + : isNestedFieldParent(field, dataView) ? 'nested' : fieldMapping ? getFieldIconType(fieldMapping) @@ -208,6 +211,7 @@ export const DocViewerTable = ({ onToggleColumn, filter, columns, + columnTypes, flattened, pinnedFields, onTogglePinned, diff --git a/src/plugins/unified_doc_viewer/tsconfig.json b/src/plugins/unified_doc_viewer/tsconfig.json index 3e959ca047e40..b173510ce8823 100644 --- a/src/plugins/unified_doc_viewer/tsconfig.json +++ b/src/plugins/unified_doc_viewer/tsconfig.json @@ -13,7 +13,6 @@ "@kbn/i18n-react", "@kbn/i18n", "@kbn/unified-doc-viewer", - "@kbn/unified-field-list", "@kbn/kibana-utils-plugin", "@kbn/data-plugin", "@kbn/core-analytics-browser", @@ -23,7 +22,8 @@ "@kbn/core", "@kbn/shared-ux-utility", "@kbn/core-analytics-browser-mocks", - "@kbn/core-ui-settings-browser-mocks" + "@kbn/core-ui-settings-browser-mocks", + "@kbn/field-utils" ], "exclude": [ "target/**/*", diff --git a/test/functional/apps/discover/group2/_data_grid_field_tokens.ts b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts new file mode 100644 index 0000000000000..272d224746f20 --- /dev/null +++ b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts @@ -0,0 +1,184 @@ +/* + * Copyright 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 expect from '@kbn/expect'; +import { WebElementWrapper } from '../../../services/lib/web_element_wrapper'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const dataGrid = getService('dataGrid'); + const PageObjects = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'dashboard', + 'unifiedFieldList', + 'header', + ]); + const esArchiver = getService('esArchiver'); + const dashboardAddPanel = getService('dashboardAddPanel'); + const testSubjects = getService('testSubjects'); + const kibanaServer = getService('kibanaServer'); + const security = getService('security'); + const defaultSettings = { + defaultIndex: 'logstash-*', + hideAnnouncements: true, + }; + + async function findFirstColumnTokens() { + const header = await testSubjects.find('euiDataGridBody > dataGridHeader'); + return await findFirstFieldIcons(header); + } + + async function findFirstDocViewerTokens() { + await dataGrid.clickRowToggle({ rowIndex: 0 }); + const docViewer = await testSubjects.find('docTableDetailsFlyout'); + return await findFirstFieldIcons(docViewer); + } + + async function findFirstFieldIcons(element: WebElementWrapper) { + const fieldIcons = await element.findAllByCssSelector('.kbnFieldIcon svg'); + + return await Promise.all( + fieldIcons.map((fieldIcon) => fieldIcon.getAttribute('aria-label')).slice(0, 10) + ); + } + + describe('discover data grid field tokens', function () { + before(async () => { + await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + beforeEach(async function () { + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update(defaultSettings); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.discover.waitUntilSearchingHasFinished(); + }); + + it('should not render field tokens when Document column is visible', async function () { + expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + + expect(await findFirstColumnTokens()).to.eql([]); + + expect(await findFirstDocViewerTokens()).to.eql([ + 'Keyword', + 'Keyword', + 'Number', + 'Text', + 'Text', + 'Date', + 'Text', + 'Number', + 'IP address', + 'Text', + ]); + }); + + it('should render field tokens correctly when columns are selected', async function () { + await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('ip'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + + expect(await findFirstColumnTokens()).to.eql(['Number', 'Text', 'IP address', 'Geo point']); + + expect(await findFirstDocViewerTokens()).to.eql([ + 'Keyword', + 'Keyword', + 'Number', + 'Text', + 'Text', + 'Date', + 'Text', + 'Number', + 'IP address', + 'Text', + ]); + }); + + it('should render field tokens correctly for ES|QL', async function () { + await PageObjects.discover.selectTextBaseLang(); + expect(await PageObjects.discover.getHitCount()).to.be('10'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('ip'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + + expect(await findFirstColumnTokens()).to.eql(['Number', 'String', 'String']); + + expect(await findFirstDocViewerTokens()).to.eql([ + 'String', + 'String', + 'Date', + 'String', + 'Number', + 'String', + 'String', + 'Unknown field', + 'String', + 'String', + ]); + }); + + it('should render field tokens correctly on Dashboard', async function () { + await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd( + 'relatedContent.article:modified_time' + ); + await PageObjects.discover.saveSearch('With columns'); + + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.clickNewDashboard(); + await dashboardAddPanel.clickOpenAddPanel(); + await dashboardAddPanel.addSavedSearch('With columns'); + + expect(await findFirstColumnTokens()).to.eql(['Number', 'Text', 'Geo point', 'Date']); + + expect(await findFirstDocViewerTokens()).to.eql([ + 'Keyword', + 'Keyword', + 'Number', + 'Text', + 'Text', + 'Date', + 'Text', + 'Number', + 'IP address', + 'Text', + ]); + }); + + it('should render field tokens correctly on Surrounding Documents page', async function () { + await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + + // navigate to the context view + await dataGrid.clickRowToggle({ rowIndex: 0 }); + const [, surroundingActionEl] = await dataGrid.getRowActions({ + isAnchorRow: false, + rowIndex: 0, + }); + await surroundingActionEl.click(); + await PageObjects.header.waitUntilLoadingHasFinished(); + + expect(await findFirstColumnTokens()).to.eql(['Number', 'Text']); + }); + }); +} diff --git a/test/functional/apps/discover/group2/index.ts b/test/functional/apps/discover/group2/index.ts index 3d4103c6de85b..a01110b5dc6ac 100644 --- a/test/functional/apps/discover/group2/index.ts +++ b/test/functional/apps/discover/group2/index.ts @@ -32,6 +32,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_data_grid_row_height')); loadTestFile(require.resolve('./_data_grid_pagination')); loadTestFile(require.resolve('./_data_grid_footer')); + loadTestFile(require.resolve('./_data_grid_field_tokens')); loadTestFile(require.resolve('./_adhoc_data_views')); loadTestFile(require.resolve('./_esql_view')); loadTestFile(require.resolve('./_indexpattern_with_unmapped_fields')); diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index 4bda8d2e4881d..337fea7c3ff45 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -268,8 +268,8 @@ export class DataGridService extends FtrService { const textArr = []; for (const cell of result) { - const textContent = await cell.getAttribute('textContent'); - textArr.push(textContent.trim()); + const cellText = await cell.getVisibleText(); + textArr.push(cellText.trim()); } return Promise.resolve(textArr); } diff --git a/tsconfig.base.json b/tsconfig.base.json index 91bdf7ed09001..3d3f2fd964a06 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -786,6 +786,8 @@ "@kbn/field-formats-plugin/*": ["src/plugins/field_formats/*"], "@kbn/field-types": ["packages/kbn-field-types"], "@kbn/field-types/*": ["packages/kbn-field-types/*"], + "@kbn/field-utils": ["packages/kbn-field-utils"], + "@kbn/field-utils/*": ["packages/kbn-field-utils/*"], "@kbn/file-upload-plugin": ["x-pack/plugins/file_upload"], "@kbn/file-upload-plugin/*": ["x-pack/plugins/file_upload/*"], "@kbn/files-example-plugin": ["examples/files_example"], diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.tsx index 90a17f070e1f7..e0a41d32d2f1e 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.tsx @@ -9,7 +9,7 @@ import React, { FC } from 'react'; import { EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FieldIcon } from '@kbn/react-field'; -import { getFieldTypeName } from '@kbn/discover-utils'; +import { getFieldTypeName } from '@kbn/field-utils'; import './_index.scss'; interface FieldTypeIconProps { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_filter.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_filter.tsx index b4a09b3cb1c9d..42ad77015813a 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_filter.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_filter.tsx @@ -8,7 +8,7 @@ import React, { FC, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { getFieldTypeName } from '@kbn/discover-utils'; +import { getFieldTypeName } from '@kbn/field-utils'; import { FieldTypesHelpPopover } from './field_types_help_popover'; import { MultiSelectPicker, Option } from '../multi_select_picker'; import type { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_help_popover.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_help_popover.tsx index 9c21e29058fb1..6e25597f83074 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_help_popover.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_types_filter/field_types_help_popover.tsx @@ -22,7 +22,7 @@ import React, { FC, useMemo, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FieldIcon } from '@kbn/react-field'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getFieldTypeDescription } from '@kbn/unified-field-list/src/utils/field_types/get_field_type_description'; +import { getFieldTypeDescription } from '@kbn/field-utils/src/utils/get_field_type_description'; import { useDataVisualizerKibana } from '../../../kibana_context'; interface FieldTypeTableItem { diff --git a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts index fd9fd45aa9df8..76d964144327f 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts @@ -7,7 +7,7 @@ import { DataViewField } from '@kbn/data-views-plugin/public'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; -import { getFieldType } from '@kbn/unified-field-list/src/utils/field_types/get_field_type'; +import { getFieldType } from '@kbn/field-utils/src/utils/get_field_type'; import { SUPPORTED_FIELD_TYPES } from '../../../../common/constants'; // convert kibana types to ML Job types diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/field_type_filter.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/field_type_filter.tsx index 46adbecdfc814..ac92747803cd2 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/field_type_filter.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/field_type_filter.tsx @@ -9,7 +9,7 @@ import React, { FC, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; -import { getFieldTypeName } from '@kbn/discover-utils'; +import { getFieldTypeName } from '@kbn/field-utils'; import { useCurrentEuiTheme } from '../../../common/hooks/use_current_eui_theme'; import { FieldTypesHelpPopover } from '../../../common/components/field_types_filter/field_types_help_popover'; import { FieldTypeIcon } from '../../../common/components/field_type_icon'; diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index f6ea7ce1fc61f..671ad14b6138e 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -25,7 +25,6 @@ "@kbn/data-views-plugin", "@kbn/datemath", "@kbn/discover-plugin", - "@kbn/discover-utils", "@kbn/embeddable-plugin", "@kbn/embeddable-plugin", "@kbn/es-query", @@ -63,13 +62,13 @@ "@kbn/unified-search-plugin", "@kbn/usage-collection-plugin", "@kbn/utility-types", - "@kbn/unified-field-list", "@kbn/ml-string-hash", "@kbn/ml-random-sampler-utils", "@kbn/data-service", "@kbn/core-notifications-browser", "@kbn/ebt-tools", - "@kbn/ml-chi2test" + "@kbn/ml-chi2test", + "@kbn/field-utils" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx index b66fadd4fd1b0..72686f0faf69f 100644 --- a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx +++ b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx @@ -24,7 +24,8 @@ import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { loadFieldStats } from '@kbn/unified-field-list/src/services/field_stats'; import { DOCUMENT_FIELD_NAME } from '../../../common/constants'; -import { FieldIcon, FieldStats, FieldPopoverFooter } from '@kbn/unified-field-list'; +import { FieldIcon } from '@kbn/field-utils'; +import { FieldStats, FieldPopoverFooter } from '@kbn/unified-field-list'; jest.mock('@kbn/unified-field-list/src/services/field_stats', () => ({ loadFieldStats: jest.fn().mockResolvedValue({}), diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/field_select.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/field_select.tsx index 3c5eeaf801143..3f49dbfa96d15 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/field_select.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/field_select.tsx @@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n'; import { EuiComboBoxOptionOption, EuiComboBoxProps } from '@elastic/eui'; import { useExistingFieldsReader } from '@kbn/unified-field-list/src/hooks/use_existing_fields'; import { FieldOption, FieldOptionValue, FieldPicker } from '@kbn/visualization-ui-components'; -import { getFieldIconType } from '@kbn/unified-field-list'; +import { getFieldIconType } from '@kbn/field-utils'; import type { OperationType } from '../form_based'; import type { OperationSupportMatrix } from './operation_support'; import { fieldContainsData } from '../../../shared_components'; diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index 8655a6b15604b..d342ddf99fc77 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -90,6 +90,7 @@ "@kbn/search-response-warnings", "@kbn/logging", "@kbn/core-plugins-server", + "@kbn/field-utils" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index ef7278d8c1eb5..bd5ad0d1ce2c8 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2398,34 +2398,34 @@ "discover.viewAlert.searchSourceErrorTitle": "Erreur lors de la récupération de la source de recherche", "discover.viewModes.document.label": "Documents", "discover.viewModes.fieldStatistics.label": "Statistiques de champ", - "discover.fieldNameIcons.binaryAriaLabel": "Binaire", - "discover.fieldNameIcons.booleanAriaLabel": "Booléen", - "discover.fieldNameIcons.conflictFieldAriaLabel": "Conflit", - "discover.fieldNameIcons.counterFieldAriaLabel": "Indicateur de compteur", - "discover.fieldNameIcons.dateFieldAriaLabel": "Date", - "discover.fieldNameIcons.dateRangeFieldAriaLabel": "Plage de dates", - "discover.fieldNameIcons.denseVectorFieldAriaLabel": "Vecteur dense", - "discover.fieldNameIcons.flattenedFieldAriaLabel": "Lissé", - "discover.fieldNameIcons.gaugeFieldAriaLabel": "Indicateur de jauge", - "discover.fieldNameIcons.geoPointFieldAriaLabel": "Point géographique", - "discover.fieldNameIcons.geoShapeFieldAriaLabel": "Forme géométrique", - "discover.fieldNameIcons.histogramFieldAriaLabel": "Histogramme", - "discover.fieldNameIcons.ipAddressFieldAriaLabel": "Adresse IP", - "discover.fieldNameIcons.ipRangeFieldAriaLabel": "Plage d'IP", - "discover.fieldNameIcons.keywordFieldAriaLabel": "Mot-clé", - "discover.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", - "discover.fieldNameIcons.nestedFieldAriaLabel": "Imbriqué", - "discover.fieldNameIcons.numberFieldAriaLabel": "Nombre", - "discover.fieldNameIcons.pointFieldAriaLabel": "Point", - "discover.fieldNameIcons.rankFeatureFieldAriaLabel": "Fonctionnalité de rang", - "discover.fieldNameIcons.rankFeaturesFieldAriaLabel": "Fonctionnalités de rang", - "discover.fieldNameIcons.recordAriaLabel": "Enregistrements", - "discover.fieldNameIcons.shapeFieldAriaLabel": "Forme", - "discover.fieldNameIcons.sourceFieldAriaLabel": "Champ source", - "discover.fieldNameIcons.stringFieldAriaLabel": "Chaîne", - "discover.fieldNameIcons.textFieldAriaLabel": "Texte", - "discover.fieldNameIcons.unknownFieldAriaLabel": "Champ inconnu", - "discover.fieldNameIcons.versionFieldAriaLabel": "Version", + "fieldUtils.fieldNameIcons.binaryAriaLabel": "Binaire", + "fieldUtils.fieldNameIcons.booleanAriaLabel": "Booléen", + "fieldUtils.fieldNameIcons.conflictFieldAriaLabel": "Conflit", + "fieldUtils.fieldNameIcons.counterFieldAriaLabel": "Indicateur de compteur", + "fieldUtils.fieldNameIcons.dateFieldAriaLabel": "Date", + "fieldUtils.fieldNameIcons.dateRangeFieldAriaLabel": "Plage de dates", + "fieldUtils.fieldNameIcons.denseVectorFieldAriaLabel": "Vecteur dense", + "fieldUtils.fieldNameIcons.flattenedFieldAriaLabel": "Lissé", + "fieldUtils.fieldNameIcons.gaugeFieldAriaLabel": "Indicateur de jauge", + "fieldUtils.fieldNameIcons.geoPointFieldAriaLabel": "Point géographique", + "fieldUtils.fieldNameIcons.geoShapeFieldAriaLabel": "Forme géométrique", + "fieldUtils.fieldNameIcons.histogramFieldAriaLabel": "Histogramme", + "fieldUtils.fieldNameIcons.ipAddressFieldAriaLabel": "Adresse IP", + "fieldUtils.fieldNameIcons.ipRangeFieldAriaLabel": "Plage d'IP", + "fieldUtils.fieldNameIcons.keywordFieldAriaLabel": "Mot-clé", + "fieldUtils.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", + "fieldUtils.fieldNameIcons.nestedFieldAriaLabel": "Imbriqué", + "fieldUtils.fieldNameIcons.numberFieldAriaLabel": "Nombre", + "fieldUtils.fieldNameIcons.pointFieldAriaLabel": "Point", + "fieldUtils.fieldNameIcons.rankFeatureFieldAriaLabel": "Fonctionnalité de rang", + "fieldUtils.fieldNameIcons.rankFeaturesFieldAriaLabel": "Fonctionnalités de rang", + "fieldUtils.fieldNameIcons.recordAriaLabel": "Enregistrements", + "fieldUtils.fieldNameIcons.shapeFieldAriaLabel": "Forme", + "fieldUtils.fieldNameIcons.sourceFieldAriaLabel": "Champ source", + "fieldUtils.fieldNameIcons.stringFieldAriaLabel": "Chaîne", + "fieldUtils.fieldNameIcons.textFieldAriaLabel": "Texte", + "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "Champ inconnu", + "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "Version", "unifiedDocViewer.docView.table.actions.label": "Actions", "unifiedDocViewer.docView.table.actions.open": "Actions ouvertes", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "Une ou plusieurs valeurs dans ce champ sont trop longues et ne peuvent pas être recherchées ni filtrées.", @@ -5645,33 +5645,33 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "Essayer :", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "Aucun champ n'existe dans cette vue de données.", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "Aucun champ ne correspond aux filtres sélectionnés.", - "unifiedFieldList.fieldNameDescription.binaryField": "Valeur binaire encodée en tant que chaîne Base64.", - "unifiedFieldList.fieldNameDescription.booleanField": "Valeurs vraies ou fausses.", - "unifiedFieldList.fieldNameDescription.conflictField": "Le champ possède des valeurs de différents types. Corrigez le problème dans Gestion > Vues de données.", - "unifiedFieldList.fieldNameDescription.counterField": "Nombre qui ne peut qu'augmenter ou être réinitialisé sur 0 (zéro). Disponible uniquement pour les champs numériques et aggregate_metric_double.", - "unifiedFieldList.fieldNameDescription.dateField": "Chaîne de date ou nombre de secondes ou de millisecondes depuis 1/1/1970.", - "unifiedFieldList.fieldNameDescription.dateRangeField": "Plage de valeurs de date.", - "unifiedFieldList.fieldNameDescription.denseVectorField": "Enregistre les vecteurs denses des valeurs Éléments flottants.", - "unifiedFieldList.fieldNameDescription.flattenedField": "Objet JSON tout entier en tant que valeur de champ unique.", - "unifiedFieldList.fieldNameDescription.gaugeField": "Nombre qui peut augmenter ou diminuer. Disponible uniquement pour les champs numériques et aggregate_metric_double.", - "unifiedFieldList.fieldNameDescription.geoPointField": "Points de latitude et de longitude.", - "unifiedFieldList.fieldNameDescription.geoShapeField": "Formes complexes, telles que des polygones.", - "unifiedFieldList.fieldNameDescription.histogramField": "Valeurs numériques pré-agrégées sous forme d'histogramme.", - "unifiedFieldList.fieldNameDescription.ipAddressField": "Adresses IPv4 et IPv6.", - "unifiedFieldList.fieldNameDescription.ipAddressRangeField": "Plage de valeurs IP prenant en charge les adresses IPv4 ou IPv6 (ou les 2).", - "unifiedFieldList.fieldNameDescription.keywordField": "Contenu structuré tel qu'un ID, une adresse e-mail, un nom d'hôte, un code de statut, ou une balise.", - "unifiedFieldList.fieldNameDescription.murmur3Field": "Champ qui calcule et stocke les hachages de valeurs.", - "unifiedFieldList.fieldNameDescription.nestedField": "Objet JSON qui conserve la relation entre ses sous-champs.", - "unifiedFieldList.fieldNameDescription.numberField": "Valeurs Long, Entier, Court, Octet, Double et Élément flottant.", - "unifiedFieldList.fieldNameDescription.pointField": "Points cartésiens arbitraires.", - "unifiedFieldList.fieldNameDescription.rankFeatureField": "Enregistre une fonctionnalité numérique pour augmenter le nombre de résultats au moment de la requête.", - "unifiedFieldList.fieldNameDescription.rankFeaturesField": "Enregistre des fonctionnalités numériques pour augmenter le nombre de résultats au moment de la requête.", - "unifiedFieldList.fieldNameDescription.recordField": "Nombre d'enregistrements.", - "unifiedFieldList.fieldNameDescription.shapeField": "Géométries cartésiennes arbitraires.", - "unifiedFieldList.fieldNameDescription.stringField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", - "unifiedFieldList.fieldNameDescription.textField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", - "unifiedFieldList.fieldNameDescription.unknownField": "Champ inconnu", - "unifiedFieldList.fieldNameDescription.versionField": "Versions des logiciels. Prend en charge les règles de priorité de la Gestion sémantique des versions.", + "fieldUtils.fieldNameDescription.binaryField": "Valeur binaire encodée en tant que chaîne Base64.", + "fieldUtils.fieldNameDescription.booleanField": "Valeurs vraies ou fausses.", + "fieldUtils.fieldNameDescription.conflictField": "Le champ possède des valeurs de différents types. Corrigez le problème dans Gestion > Vues de données.", + "fieldUtils.fieldNameDescription.counterField": "Nombre qui ne peut qu'augmenter ou être réinitialisé sur 0 (zéro). Disponible uniquement pour les champs numériques et aggregate_metric_double.", + "fieldUtils.fieldNameDescription.dateField": "Chaîne de date ou nombre de secondes ou de millisecondes depuis 1/1/1970.", + "fieldUtils.fieldNameDescription.dateRangeField": "Plage de valeurs de date.", + "fieldUtils.fieldNameDescription.denseVectorField": "Enregistre les vecteurs denses des valeurs Éléments flottants.", + "fieldUtils.fieldNameDescription.flattenedField": "Objet JSON tout entier en tant que valeur de champ unique.", + "fieldUtils.fieldNameDescription.gaugeField": "Nombre qui peut augmenter ou diminuer. Disponible uniquement pour les champs numériques et aggregate_metric_double.", + "fieldUtils.fieldNameDescription.geoPointField": "Points de latitude et de longitude.", + "fieldUtils.fieldNameDescription.geoShapeField": "Formes complexes, telles que des polygones.", + "fieldUtils.fieldNameDescription.histogramField": "Valeurs numériques pré-agrégées sous forme d'histogramme.", + "fieldUtils.fieldNameDescription.ipAddressField": "Adresses IPv4 et IPv6.", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "Plage de valeurs IP prenant en charge les adresses IPv4 ou IPv6 (ou les 2).", + "fieldUtils.fieldNameDescription.keywordField": "Contenu structuré tel qu'un ID, une adresse e-mail, un nom d'hôte, un code de statut, ou une balise.", + "fieldUtils.fieldNameDescription.murmur3Field": "Champ qui calcule et stocke les hachages de valeurs.", + "fieldUtils.fieldNameDescription.nestedField": "Objet JSON qui conserve la relation entre ses sous-champs.", + "fieldUtils.fieldNameDescription.numberField": "Valeurs Long, Entier, Court, Octet, Double et Élément flottant.", + "fieldUtils.fieldNameDescription.pointField": "Points cartésiens arbitraires.", + "fieldUtils.fieldNameDescription.rankFeatureField": "Enregistre une fonctionnalité numérique pour augmenter le nombre de résultats au moment de la requête.", + "fieldUtils.fieldNameDescription.rankFeaturesField": "Enregistre des fonctionnalités numériques pour augmenter le nombre de résultats au moment de la requête.", + "fieldUtils.fieldNameDescription.recordField": "Nombre d'enregistrements.", + "fieldUtils.fieldNameDescription.shapeField": "Géométries cartésiennes arbitraires.", + "fieldUtils.fieldNameDescription.stringField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", + "fieldUtils.fieldNameDescription.textField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", + "fieldUtils.fieldNameDescription.unknownField": "Champ inconnu", + "fieldUtils.fieldNameDescription.versionField": "Versions des logiciels. Prend en charge les règles de priorité de la Gestion sémantique des versions.", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "Rechercher les noms de champs", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "Filtrer sur le champ", "unifiedFieldList.fieldPopover.deleteFieldLabel": "Supprimer le champ de la vue de données", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index f0756cb129d3b..eb870ef9bd038 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2413,34 +2413,34 @@ "discover.viewAlert.searchSourceErrorTitle": "検索ソースの取得エラー", "discover.viewModes.document.label": "ドキュメント", "discover.viewModes.fieldStatistics.label": "フィールド統計情報", - "discover.fieldNameIcons.binaryAriaLabel": "バイナリー", - "discover.fieldNameIcons.booleanAriaLabel": "ブール", - "discover.fieldNameIcons.conflictFieldAriaLabel": "競合", - "discover.fieldNameIcons.counterFieldAriaLabel": "カウンターメトリック", - "discover.fieldNameIcons.dateFieldAriaLabel": "日付", - "discover.fieldNameIcons.dateRangeFieldAriaLabel": "日付範囲", - "discover.fieldNameIcons.denseVectorFieldAriaLabel": "密集ベクトル", - "discover.fieldNameIcons.flattenedFieldAriaLabel": "平坦化済み", - "discover.fieldNameIcons.gaugeFieldAriaLabel": "ゲージメトリック", - "discover.fieldNameIcons.geoPointFieldAriaLabel": "地理ポイント", - "discover.fieldNameIcons.geoShapeFieldAriaLabel": "地理情報図形", - "discover.fieldNameIcons.histogramFieldAriaLabel": "ヒストグラム", - "discover.fieldNameIcons.ipAddressFieldAriaLabel": "IP アドレス", - "discover.fieldNameIcons.ipRangeFieldAriaLabel": "IP範囲", - "discover.fieldNameIcons.keywordFieldAriaLabel": "キーワード", - "discover.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", - "discover.fieldNameIcons.nestedFieldAriaLabel": "ネスト済み", - "discover.fieldNameIcons.numberFieldAriaLabel": "数字", - "discover.fieldNameIcons.pointFieldAriaLabel": "点", - "discover.fieldNameIcons.rankFeatureFieldAriaLabel": "ランク特性", - "discover.fieldNameIcons.rankFeaturesFieldAriaLabel": "ランク特性", - "discover.fieldNameIcons.recordAriaLabel": "記録", - "discover.fieldNameIcons.shapeFieldAriaLabel": "形状", - "discover.fieldNameIcons.sourceFieldAriaLabel": "ソースフィールド", - "discover.fieldNameIcons.stringFieldAriaLabel": "文字列", - "discover.fieldNameIcons.textFieldAriaLabel": "テキスト", - "discover.fieldNameIcons.unknownFieldAriaLabel": "不明なフィールド", - "discover.fieldNameIcons.versionFieldAriaLabel": "バージョン", + "fieldUtils.fieldNameIcons.binaryAriaLabel": "バイナリー", + "fieldUtils.fieldNameIcons.booleanAriaLabel": "ブール", + "fieldUtils.fieldNameIcons.conflictFieldAriaLabel": "競合", + "fieldUtils.fieldNameIcons.counterFieldAriaLabel": "カウンターメトリック", + "fieldUtils.fieldNameIcons.dateFieldAriaLabel": "日付", + "fieldUtils.fieldNameIcons.dateRangeFieldAriaLabel": "日付範囲", + "fieldUtils.fieldNameIcons.denseVectorFieldAriaLabel": "密集ベクトル", + "fieldUtils.fieldNameIcons.flattenedFieldAriaLabel": "平坦化済み", + "fieldUtils.fieldNameIcons.gaugeFieldAriaLabel": "ゲージメトリック", + "fieldUtils.fieldNameIcons.geoPointFieldAriaLabel": "地理ポイント", + "fieldUtils.fieldNameIcons.geoShapeFieldAriaLabel": "地理情報図形", + "fieldUtils.fieldNameIcons.histogramFieldAriaLabel": "ヒストグラム", + "fieldUtils.fieldNameIcons.ipAddressFieldAriaLabel": "IP アドレス", + "fieldUtils.fieldNameIcons.ipRangeFieldAriaLabel": "IP範囲", + "fieldUtils.fieldNameIcons.keywordFieldAriaLabel": "キーワード", + "fieldUtils.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", + "fieldUtils.fieldNameIcons.nestedFieldAriaLabel": "ネスト済み", + "fieldUtils.fieldNameIcons.numberFieldAriaLabel": "数字", + "fieldUtils.fieldNameIcons.pointFieldAriaLabel": "点", + "fieldUtils.fieldNameIcons.rankFeatureFieldAriaLabel": "ランク特性", + "fieldUtils.fieldNameIcons.rankFeaturesFieldAriaLabel": "ランク特性", + "fieldUtils.fieldNameIcons.recordAriaLabel": "記録", + "fieldUtils.fieldNameIcons.shapeFieldAriaLabel": "形状", + "fieldUtils.fieldNameIcons.sourceFieldAriaLabel": "ソースフィールド", + "fieldUtils.fieldNameIcons.stringFieldAriaLabel": "文字列", + "fieldUtils.fieldNameIcons.textFieldAriaLabel": "テキスト", + "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "不明なフィールド", + "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "バージョン", "unifiedDocViewer.docView.table.actions.label": "アクション", "unifiedDocViewer.docView.table.actions.open": "アクションを開く", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "このフィールドの1つ以上の値が長すぎるため、検索またはフィルタリングできません。", @@ -5661,33 +5661,33 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "試行対象:", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "このデータビューにはフィールドがありません。", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "選択したフィルターと一致するフィールドはありません。", - "unifiedFieldList.fieldNameDescription.binaryField": "Base64文字列としてエンコードされたバイナリ値", - "unifiedFieldList.fieldNameDescription.booleanField": "True および False 値。", - "unifiedFieldList.fieldNameDescription.conflictField": "フィールドには異なる型の値があります。[管理 > データビュー]で解決してください。", - "unifiedFieldList.fieldNameDescription.counterField": "0(ゼロ)に増加またはリセットのみされる数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", - "unifiedFieldList.fieldNameDescription.dateField": "日付文字列、または1/1/1970以降の秒またはミリ秒の数値。", - "unifiedFieldList.fieldNameDescription.dateRangeField": "日付値の範囲。", - "unifiedFieldList.fieldNameDescription.denseVectorField": "浮動小数点数値の密ベクトルを記録します。", - "unifiedFieldList.fieldNameDescription.flattenedField": "1つのフィールド値としてのJSONオブジェクト全体。", - "unifiedFieldList.fieldNameDescription.gaugeField": "増減可能な数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", - "unifiedFieldList.fieldNameDescription.geoPointField": "緯度および経度点。", - "unifiedFieldList.fieldNameDescription.geoShapeField": "多角形などの複雑な図形。", - "unifiedFieldList.fieldNameDescription.histogramField": "ヒストグラムの形式の集計された数値。", - "unifiedFieldList.fieldNameDescription.ipAddressField": "IPv4およびIPv6アドレス。", - "unifiedFieldList.fieldNameDescription.ipAddressRangeField": "IPv4またはIPv6(または混合)のアドレスをサポートするIP値の範囲。", - "unifiedFieldList.fieldNameDescription.keywordField": "ID、電子メールアドレス、ホスト名、ステータスコード、タグなどの構造化されたコンテンツ。", - "unifiedFieldList.fieldNameDescription.murmur3Field": "値のハッシュタグを計算して格納するフィールド。", - "unifiedFieldList.fieldNameDescription.nestedField": "サブフィールド間の関係を保持するJSONオブジェクト。", - "unifiedFieldList.fieldNameDescription.numberField": "長整数、整数、短整数、バイト、倍精度浮動小数点数、浮動小数点数の値。", - "unifiedFieldList.fieldNameDescription.pointField": "任意の直交点。", - "unifiedFieldList.fieldNameDescription.rankFeatureField": "クエリ時のヒット数を増やすために、数値機能を記録します。", - "unifiedFieldList.fieldNameDescription.rankFeaturesField": "クエリ時のヒット数を増やすために、数値機能を記録します。", - "unifiedFieldList.fieldNameDescription.recordField": "レコード数。", - "unifiedFieldList.fieldNameDescription.shapeField": "任意の解析幾何。", - "unifiedFieldList.fieldNameDescription.stringField": "電子メール本文や製品説明などの全文テキスト。", - "unifiedFieldList.fieldNameDescription.textField": "電子メール本文や製品説明などの全文テキスト。", - "unifiedFieldList.fieldNameDescription.unknownField": "不明なフィールド", - "unifiedFieldList.fieldNameDescription.versionField": "ソフトウェアバージョン。「セマンティックバージョニング」優先度ルールをサポートします。", + "fieldUtils.fieldNameDescription.binaryField": "Base64文字列としてエンコードされたバイナリ値", + "fieldUtils.fieldNameDescription.booleanField": "True および False 値。", + "fieldUtils.fieldNameDescription.conflictField": "フィールドには異なる型の値があります。[管理 > データビュー]で解決してください。", + "fieldUtils.fieldNameDescription.counterField": "0(ゼロ)に増加またはリセットのみされる数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", + "fieldUtils.fieldNameDescription.dateField": "日付文字列、または1/1/1970以降の秒またはミリ秒の数値。", + "fieldUtils.fieldNameDescription.dateRangeField": "日付値の範囲。", + "fieldUtils.fieldNameDescription.denseVectorField": "浮動小数点数値の密ベクトルを記録します。", + "fieldUtils.fieldNameDescription.flattenedField": "1つのフィールド値としてのJSONオブジェクト全体。", + "fieldUtils.fieldNameDescription.gaugeField": "増減可能な数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", + "fieldUtils.fieldNameDescription.geoPointField": "緯度および経度点。", + "fieldUtils.fieldNameDescription.geoShapeField": "多角形などの複雑な図形。", + "fieldUtils.fieldNameDescription.histogramField": "ヒストグラムの形式の集計された数値。", + "fieldUtils.fieldNameDescription.ipAddressField": "IPv4およびIPv6アドレス。", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "IPv4またはIPv6(または混合)のアドレスをサポートするIP値の範囲。", + "fieldUtils.fieldNameDescription.keywordField": "ID、電子メールアドレス、ホスト名、ステータスコード、タグなどの構造化されたコンテンツ。", + "fieldUtils.fieldNameDescription.murmur3Field": "値のハッシュタグを計算して格納するフィールド。", + "fieldUtils.fieldNameDescription.nestedField": "サブフィールド間の関係を保持するJSONオブジェクト。", + "fieldUtils.fieldNameDescription.numberField": "長整数、整数、短整数、バイト、倍精度浮動小数点数、浮動小数点数の値。", + "fieldUtils.fieldNameDescription.pointField": "任意の直交点。", + "fieldUtils.fieldNameDescription.rankFeatureField": "クエリ時のヒット数を増やすために、数値機能を記録します。", + "fieldUtils.fieldNameDescription.rankFeaturesField": "クエリ時のヒット数を増やすために、数値機能を記録します。", + "fieldUtils.fieldNameDescription.recordField": "レコード数。", + "fieldUtils.fieldNameDescription.shapeField": "任意の解析幾何。", + "fieldUtils.fieldNameDescription.stringField": "電子メール本文や製品説明などの全文テキスト。", + "fieldUtils.fieldNameDescription.textField": "電子メール本文や製品説明などの全文テキスト。", + "fieldUtils.fieldNameDescription.unknownField": "不明なフィールド", + "fieldUtils.fieldNameDescription.versionField": "ソフトウェアバージョン。「セマンティックバージョニング」優先度ルールをサポートします。", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "検索フィールド名", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "フィールド表示のフィルター", "unifiedFieldList.fieldPopover.deleteFieldLabel": "データビューフィールドを削除", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 6c8f2752a3122..9eceb1243308f 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2413,34 +2413,34 @@ "discover.viewAlert.searchSourceErrorTitle": "提取搜索源时出错", "discover.viewModes.document.label": "文档", "discover.viewModes.fieldStatistics.label": "字段统计信息", - "discover.fieldNameIcons.binaryAriaLabel": "二进制", - "discover.fieldNameIcons.booleanAriaLabel": "布尔型", - "discover.fieldNameIcons.conflictFieldAriaLabel": "冲突", - "discover.fieldNameIcons.counterFieldAriaLabel": "计数器指标", - "discover.fieldNameIcons.dateFieldAriaLabel": "日期", - "discover.fieldNameIcons.dateRangeFieldAriaLabel": "日期范围", - "discover.fieldNameIcons.denseVectorFieldAriaLabel": "密集向量", - "discover.fieldNameIcons.flattenedFieldAriaLabel": "扁平", - "discover.fieldNameIcons.gaugeFieldAriaLabel": "仪表盘指标", - "discover.fieldNameIcons.geoPointFieldAriaLabel": "地理点", - "discover.fieldNameIcons.geoShapeFieldAriaLabel": "几何形状", - "discover.fieldNameIcons.histogramFieldAriaLabel": "直方图", - "discover.fieldNameIcons.ipAddressFieldAriaLabel": "IP 地址", - "discover.fieldNameIcons.ipRangeFieldAriaLabel": "IP 范围", - "discover.fieldNameIcons.keywordFieldAriaLabel": "关键字", - "discover.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", - "discover.fieldNameIcons.nestedFieldAriaLabel": "嵌套", - "discover.fieldNameIcons.numberFieldAriaLabel": "数字", - "discover.fieldNameIcons.pointFieldAriaLabel": "点", - "discover.fieldNameIcons.rankFeatureFieldAriaLabel": "排名特征", - "discover.fieldNameIcons.rankFeaturesFieldAriaLabel": "排名特征", - "discover.fieldNameIcons.recordAriaLabel": "记录", - "discover.fieldNameIcons.shapeFieldAriaLabel": "形状", - "discover.fieldNameIcons.sourceFieldAriaLabel": "源字段", - "discover.fieldNameIcons.stringFieldAriaLabel": "字符串", - "discover.fieldNameIcons.textFieldAriaLabel": "文本", - "discover.fieldNameIcons.unknownFieldAriaLabel": "未知字段", - "discover.fieldNameIcons.versionFieldAriaLabel": "版本", + "fieldUtils.fieldNameIcons.binaryAriaLabel": "二进制", + "fieldUtils.fieldNameIcons.booleanAriaLabel": "布尔型", + "fieldUtils.fieldNameIcons.conflictFieldAriaLabel": "冲突", + "fieldUtils.fieldNameIcons.counterFieldAriaLabel": "计数器指标", + "fieldUtils.fieldNameIcons.dateFieldAriaLabel": "日期", + "fieldUtils.fieldNameIcons.dateRangeFieldAriaLabel": "日期范围", + "fieldUtils.fieldNameIcons.denseVectorFieldAriaLabel": "密集向量", + "fieldUtils.fieldNameIcons.flattenedFieldAriaLabel": "扁平", + "fieldUtils.fieldNameIcons.gaugeFieldAriaLabel": "仪表盘指标", + "fieldUtils.fieldNameIcons.geoPointFieldAriaLabel": "地理点", + "fieldUtils.fieldNameIcons.geoShapeFieldAriaLabel": "几何形状", + "fieldUtils.fieldNameIcons.histogramFieldAriaLabel": "直方图", + "fieldUtils.fieldNameIcons.ipAddressFieldAriaLabel": "IP 地址", + "fieldUtils.fieldNameIcons.ipRangeFieldAriaLabel": "IP 范围", + "fieldUtils.fieldNameIcons.keywordFieldAriaLabel": "关键字", + "fieldUtils.fieldNameIcons.murmur3FieldAriaLabel": "Murmur3", + "fieldUtils.fieldNameIcons.nestedFieldAriaLabel": "嵌套", + "fieldUtils.fieldNameIcons.numberFieldAriaLabel": "数字", + "fieldUtils.fieldNameIcons.pointFieldAriaLabel": "点", + "fieldUtils.fieldNameIcons.rankFeatureFieldAriaLabel": "排名特征", + "fieldUtils.fieldNameIcons.rankFeaturesFieldAriaLabel": "排名特征", + "fieldUtils.fieldNameIcons.recordAriaLabel": "记录", + "fieldUtils.fieldNameIcons.shapeFieldAriaLabel": "形状", + "fieldUtils.fieldNameIcons.sourceFieldAriaLabel": "源字段", + "fieldUtils.fieldNameIcons.stringFieldAriaLabel": "字符串", + "fieldUtils.fieldNameIcons.textFieldAriaLabel": "文本", + "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "未知字段", + "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "版本", "unifiedDocViewer.docView.table.actions.label": "操作", "unifiedDocViewer.docView.table.actions.open": "打开操作", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "此字段中的一个或多个值过长,无法搜索或筛选。", @@ -5660,33 +5660,33 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "尝试:", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "在此数据视图中不存在任何字段。", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "没有字段匹配选定筛选。", - "unifiedFieldList.fieldNameDescription.binaryField": "编码为 Base64 字符串的二进制值。", - "unifiedFieldList.fieldNameDescription.booleanField": "True 和 False 值。", - "unifiedFieldList.fieldNameDescription.conflictField": "字体具有不同类型的值。在“管理”>“数据视图”中解析。", - "unifiedFieldList.fieldNameDescription.counterField": "只会增大或重置为 0(零)的数字。仅适用于数字和 aggregate_metric_double 字段。", - "unifiedFieldList.fieldNameDescription.dateField": "日期字符串或 1/1/1970 以来的秒数或毫秒数。", - "unifiedFieldList.fieldNameDescription.dateRangeField": "日期值的范围。", - "unifiedFieldList.fieldNameDescription.denseVectorField": "记录浮点值的密集向量。", - "unifiedFieldList.fieldNameDescription.flattenedField": "整个 JSON 对象作为单一字段值。", - "unifiedFieldList.fieldNameDescription.gaugeField": "可以增大或减小的数字。仅适用于数字和 aggregate_metric_double 字段。", - "unifiedFieldList.fieldNameDescription.geoPointField": "纬度和经度点。", - "unifiedFieldList.fieldNameDescription.geoShapeField": "复杂形状,如多边形。", - "unifiedFieldList.fieldNameDescription.histogramField": "直方图形式的预聚合数字值。", - "unifiedFieldList.fieldNameDescription.ipAddressField": "IPv4 和 IPv6 地址。", - "unifiedFieldList.fieldNameDescription.ipAddressRangeField": "支持 IPv4 或 IPv6(或混合)地址的 IP 值的范围。", - "unifiedFieldList.fieldNameDescription.keywordField": "结构化内容,如 ID、电子邮件地址、主机名、状态代码或标签。", - "unifiedFieldList.fieldNameDescription.murmur3Field": "计算和存储值哈希的字段。", - "unifiedFieldList.fieldNameDescription.nestedField": "保留其子字段之间关系的 JSON 对象。", - "unifiedFieldList.fieldNameDescription.numberField": "长整型、整数、短整型、字节、双精度和浮点值。", - "unifiedFieldList.fieldNameDescription.pointField": "任意笛卡尔点。", - "unifiedFieldList.fieldNameDescription.rankFeatureField": "记录数字特征以提高查询时的命中数。", - "unifiedFieldList.fieldNameDescription.rankFeaturesField": "记录数字特征以提高查询时的命中数。", - "unifiedFieldList.fieldNameDescription.recordField": "记录计数。", - "unifiedFieldList.fieldNameDescription.shapeField": "任意笛卡尔几何形状。", - "unifiedFieldList.fieldNameDescription.stringField": "全文本,如电子邮件正文或产品描述。", - "unifiedFieldList.fieldNameDescription.textField": "全文本,如电子邮件正文或产品描述。", - "unifiedFieldList.fieldNameDescription.unknownField": "未知字段", - "unifiedFieldList.fieldNameDescription.versionField": "软件版本。支持“语义版本控制”优先规则。", + "fieldUtils.fieldNameDescription.binaryField": "编码为 Base64 字符串的二进制值。", + "fieldUtils.fieldNameDescription.booleanField": "True 和 False 值。", + "fieldUtils.fieldNameDescription.conflictField": "字体具有不同类型的值。在“管理”>“数据视图”中解析。", + "fieldUtils.fieldNameDescription.counterField": "只会增大或重置为 0(零)的数字。仅适用于数字和 aggregate_metric_double 字段。", + "fieldUtils.fieldNameDescription.dateField": "日期字符串或 1/1/1970 以来的秒数或毫秒数。", + "fieldUtils.fieldNameDescription.dateRangeField": "日期值的范围。", + "fieldUtils.fieldNameDescription.denseVectorField": "记录浮点值的密集向量。", + "fieldUtils.fieldNameDescription.flattenedField": "整个 JSON 对象作为单一字段值。", + "fieldUtils.fieldNameDescription.gaugeField": "可以增大或减小的数字。仅适用于数字和 aggregate_metric_double 字段。", + "fieldUtils.fieldNameDescription.geoPointField": "纬度和经度点。", + "fieldUtils.fieldNameDescription.geoShapeField": "复杂形状,如多边形。", + "fieldUtils.fieldNameDescription.histogramField": "直方图形式的预聚合数字值。", + "fieldUtils.fieldNameDescription.ipAddressField": "IPv4 和 IPv6 地址。", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "支持 IPv4 或 IPv6(或混合)地址的 IP 值的范围。", + "fieldUtils.fieldNameDescription.keywordField": "结构化内容,如 ID、电子邮件地址、主机名、状态代码或标签。", + "fieldUtils.fieldNameDescription.murmur3Field": "计算和存储值哈希的字段。", + "fieldUtils.fieldNameDescription.nestedField": "保留其子字段之间关系的 JSON 对象。", + "fieldUtils.fieldNameDescription.numberField": "长整型、整数、短整型、字节、双精度和浮点值。", + "fieldUtils.fieldNameDescription.pointField": "任意笛卡尔点。", + "fieldUtils.fieldNameDescription.rankFeatureField": "记录数字特征以提高查询时的命中数。", + "fieldUtils.fieldNameDescription.rankFeaturesField": "记录数字特征以提高查询时的命中数。", + "fieldUtils.fieldNameDescription.recordField": "记录计数。", + "fieldUtils.fieldNameDescription.shapeField": "任意笛卡尔几何形状。", + "fieldUtils.fieldNameDescription.stringField": "全文本,如电子邮件正文或产品描述。", + "fieldUtils.fieldNameDescription.textField": "全文本,如电子邮件正文或产品描述。", + "fieldUtils.fieldNameDescription.unknownField": "未知字段", + "fieldUtils.fieldNameDescription.versionField": "软件版本。支持“语义版本控制”优先规则。", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "搜索字段名称", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "筛留存在的字段", "unifiedFieldList.fieldPopover.deleteFieldLabel": "删除数据视图字段", diff --git a/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/search_source_alert.ts b/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/search_source_alert.ts index 27e68ad83e942..b558cc606b397 100644 --- a/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/search_source_alert.ts +++ b/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/search_source_alert.ts @@ -489,7 +489,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const documentCell = await dataGrid.getCellElement(0, 3); const firstRowContent = await documentCell.getVisibleText(); - expect(firstRowContent.includes('runtime-message-fieldmock-message_id')).to.be.equal(true); + expect(firstRowContent.includes('runtime-message-fieldmock-message')).to.be.equal(true); expect(await dataGrid.getDocCount()).to.be(5); }); @@ -503,7 +503,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const documentCell = await dataGrid.getCellElement(0, 3); const firstRowContent = await documentCell.getVisibleText(); - expect(firstRowContent.includes('runtime-message-fieldmock-message_id')).to.be.equal(true); + expect(firstRowContent.includes('runtime-message-fieldmock-message')).to.be.equal(true); }); it('should display results after data view removal on clicking prev generated link', async () => { diff --git a/yarn.lock b/yarn.lock index 7069092bc0cb1..a0b14df24f61f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4512,6 +4512,10 @@ version "0.0.0" uid "" +"@kbn/field-utils@link:packages/kbn-field-utils": + version "0.0.0" + uid "" + "@kbn/file-upload-plugin@link:x-pack/plugins/file_upload": version "0.0.0" uid "" From 547594666208502ddd1c2919b51e530d7c7150ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Thu, 5 Oct 2023 14:27:29 +0200 Subject: [PATCH 125/170] [Serverless] ES should ignore the version mismatch (#168076) --- config/serverless.yml | 3 ++ .../src/elasticsearch_config.ts | 32 ++++++++++--------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/config/serverless.yml b/config/serverless.yml index 8319d4c0ecee9..282956932f412 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -86,6 +86,9 @@ xpack.spaces.allowFeatureVisibility: false # Only display console autocomplete suggestions for ES endpoints that are available in serverless console.autocompleteDefinitions.endpointsAvailability: serverless +# Do not check the ES version when running on Serverless +elasticsearch.ignoreVersionMismatch: true + # Allow authentication via the Elasticsearch JWT realm with the `shared_secret` client authentication type. elasticsearch.requestHeadersWhitelist: ['authorization', 'es-client-authentication'] diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts index 9f4eb39f72cff..6619e7cb1488a 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema, TypeOf, offeringBasedSchema } from '@kbn/config-schema'; import { readPkcs12Keystore, readPkcs12Truststore } from '@kbn/crypto'; import { i18n } from '@kbn/i18n'; import { Duration } from 'moment'; @@ -145,20 +145,22 @@ export const configSchema = schema.object({ ), apiVersion: schema.string({ defaultValue: DEFAULT_API_VERSION }), healthCheck: schema.object({ delay: schema.duration({ defaultValue: 2500 }) }), - ignoreVersionMismatch: schema.conditional( - schema.contextRef('dev'), - false, - schema.boolean({ - validate: (rawValue) => { - if (rawValue === true) { - return '"ignoreVersionMismatch" can only be set to true in development mode'; - } - }, - // When running in serverless mode, default to `true` - defaultValue: schema.contextRef('serverless'), - }), - schema.boolean({ defaultValue: false }) - ), + ignoreVersionMismatch: offeringBasedSchema({ + serverless: schema.boolean({ defaultValue: true }), + traditional: schema.conditional( + schema.contextRef('dev'), + false, + schema.boolean({ + validate: (rawValue) => { + if (rawValue === true) { + return '"ignoreVersionMismatch" can only be set to true in development mode'; + } + }, + defaultValue: false, + }), + schema.boolean({ defaultValue: false }) + ), + }), skipStartupConnectionCheck: schema.conditional( // Using dist over dev because integration_tests run with dev: false, // and this config is solely introduced to allow some of the integration tests to run without an ES server. From a31fb0b9e4770ba61a7aa45a7755ee402a292b9f Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 5 Oct 2023 15:32:13 +0300 Subject: [PATCH 126/170] [ES|QL] Improve the histogram query (#168073) ## Summary Now that ES supports count(*) we can simplify the query which generates the histogram in ES|QL mode and remove our hacky solution! --- .../public/layout/hooks/use_lens_suggestions.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts b/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts index b6d02753d140a..514c32cefcb80 100644 --- a/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts +++ b/src/plugins/unified_histogram/public/layout/hooks/use_lens_suggestions.ts @@ -85,8 +85,8 @@ export const useLensSuggestions = ({ const interval = computeInterval(timeRange, data); const language = getAggregateQueryMode(query); - const histogramQuery = `${query[language]} | eval uniqueName = 1 - | EVAL timestamp=DATE_TRUNC(${interval}, ${dataView.timeFieldName}) | stats rows = count(uniqueName) by timestamp | rename timestamp as \`${dataView.timeFieldName} every ${interval}\``; + const histogramQuery = `${query[language]} + | EVAL timestamp=DATE_TRUNC(${interval}, ${dataView.timeFieldName}) | stats rows = count(*) by timestamp | rename timestamp as \`${dataView.timeFieldName} every ${interval}\``; const context = { dataViewSpec: dataView?.toSpec(), fieldName: '', From ca5311bca5d9e01c897489926553409f63912e9d Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Thu, 5 Oct 2023 16:01:51 +0300 Subject: [PATCH 127/170] [Cases] Fix configuration flaky tests in Serverless (#167895) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../test/functional/services/cases/common.ts | 28 +++++++++++++++---- .../observability/cases/configure.ts | 11 ++++---- .../security/ftr/cases/configure.ts | 5 +++- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/x-pack/test/functional/services/cases/common.ts b/x-pack/test/functional/services/cases/common.ts index 7a969b310f56f..4fe8523a6bb87 100644 --- a/x-pack/test/functional/services/cases/common.ts +++ b/x-pack/test/functional/services/cases/common.ts @@ -50,17 +50,35 @@ export function CasesCommonServiceProvider({ getService, getPageObject }: FtrPro }, async assertRadioGroupValue(testSubject: string, expectedValue: string) { + await retry.waitFor( + `assertRadioGroupValue: Expected the radio group ${testSubject} to exists`, + async () => { + return await testSubjects.exists(testSubject); + } + ); + const assertRadioGroupValue = await testSubjects.find(testSubject); - const input = await assertRadioGroupValue.findByCssSelector(':checked'); - const selectedOptionId = await input.getAttribute('id'); - expect(selectedOptionId).to.eql( - expectedValue, - `Expected the radio group value to equal "${expectedValue}" (got "${selectedOptionId}")` + + await retry.waitFor( + `assertRadioGroupValue: Expected the radio group value to equal "${expectedValue}"`, + async () => { + const input = await assertRadioGroupValue.findByCssSelector(':checked'); + const selectedOptionId = await input.getAttribute('id'); + return selectedOptionId === expectedValue; + } ); }, async selectRadioGroupValue(testSubject: string, value: string) { + await retry.waitFor( + `selectRadioGroupValue: Expected the radio group ${testSubject} to exists`, + async () => { + return await testSubjects.exists(testSubject); + } + ); + const radioGroup = await testSubjects.find(testSubject); + const label = await radioGroup.findByCssSelector(`label[for="${value}"]`); await label.click(); await header.waitUntilLoadingHasFinished(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index cc5b01292c846..58b163584a8a2 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -16,9 +16,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const cases = getService('cases'); const toasts = getService('toasts'); + const retry = getService('retry'); - // FLAKY: https://github.com/elastic/kibana/issues/166469 - describe.skip('Configure Case', function () { + describe('Configure Case', function () { before(async () => { await svlCommonPage.login(); @@ -49,10 +49,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/167869 - describe.skip('Connectors', function () { + describe('Connectors', function () { it('defaults the connector to none correctly', async () => { - expect(await testSubjects.exists('dropdown-connector-no-connector')).to.be(true); + await retry.waitFor('dropdown-connector-no-connector to exist', async () => { + return await testSubjects.exists('dropdown-connector-no-connector'); + }); }); it('opens and closes the connectors flyout correctly', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts index f155629558ff8..ca9e9ab6219e7 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts @@ -15,6 +15,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const cases = getService('cases'); const toasts = getService('toasts'); + const retry = getService('retry'); describe('Configure Case', function () { before(async () => { @@ -47,7 +48,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { describe('Connectors', function () { it('defaults the connector to none correctly', async () => { - expect(await testSubjects.exists('dropdown-connector-no-connector')).to.be(true); + await retry.waitFor('dropdown-connector-no-connector to exist', async () => { + return await testSubjects.exists('dropdown-connector-no-connector'); + }); }); it('opens and closes the connectors flyout correctly', async () => { From 4ff0af830c1cc117a7156d7adc53deaad447259e Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Thu, 5 Oct 2023 15:13:25 +0200 Subject: [PATCH 128/170] [Security Solution] Skipping just the problematic tests (#167969) --- .../e2e/investigations/alerts/detection_page_filters.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts index 6aa483cf7f785..768f350297774 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/detection_page_filters.cy.ts @@ -110,7 +110,7 @@ const assertFilterControlsWithFilterObject = ( // Failing: See https://github.com/elastic/kibana/issues/167914 // Failing: See https://github.com/elastic/kibana/issues/167915 -describe.skip(`Detections : Page Filters`, { tags: ['@ess', '@serverless'] }, () => { +describe(`Detections : Page Filters`, { tags: ['@ess', '@brokenInServerless'] }, () => { before(() => { cleanKibana(); createRule(getNewRule({ rule_id: 'custom_rule_filters' })); From 3c83fc5ee19b408482b215d319c6f2ac28a5899b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?= Date: Thu, 5 Oct 2023 15:15:30 +0200 Subject: [PATCH 129/170] [Enterprise Search] Remove view additional integration link (#168085) ## Summary Removes link to View additional integrations on Connector Creation page. --- .../components/new_index/new_index.tsx | 12 +----------- x-pack/plugins/translations/translations/fr-FR.json | 1 - x-pack/plugins/translations/translations/ja-JP.json | 1 - x-pack/plugins/translations/translations/zh-CN.json | 1 - 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx index 8e9197c8eb12a..4a213658439e4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx @@ -20,7 +20,6 @@ import { generateEncodedPath } from '../../../shared/encode_path_params'; import { HttpLogic } from '../../../shared/http'; import { KibanaLogic } from '../../../shared/kibana/kibana_logic'; -import { EuiLinkTo } from '../../../shared/react_router_helpers'; import { NEW_INDEX_METHOD_PATH, NEW_INDEX_SELECT_CONNECTOR_PATH } from '../../routes'; import { EnterpriseSearchContentPageTemplate } from '../layout/page_template'; import { CannotConnect } from '../search_index/components/cannot_connect'; @@ -37,7 +36,7 @@ const getAvailableMethodOptions = (productFeatures: ProductFeatures): INGESTION_ }; export const NewIndex: React.FC = () => { - const { capabilities, config, productFeatures } = useValues(KibanaLogic); + const { config, productFeatures } = useValues(KibanaLogic); const availableIngestionMethodOptions = getAvailableMethodOptions(productFeatures); const { errorConnectingMessage } = useValues(HttpLogic); @@ -91,15 +90,6 @@ export const NewIndex: React.FC = () => { ))}
    - {capabilities.navLinks.integrations && ( - - - {i18n.translate('xpack.enterpriseSearch.content.newIndex.viewIntegrationsLink', { - defaultMessage: 'View additional integrations', - })} - - - )}
    diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index bd5ad0d1ce2c8..c80516e7ddff8 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -13656,7 +13656,6 @@ "xpack.enterpriseSearch.content.newIndex.types.crawler": "Robot d'indexation", "xpack.enterpriseSearch.content.newIndex.types.elasticsearch": "Index Elasticsearch", "xpack.enterpriseSearch.content.newIndex.types.json": "JSON", - "xpack.enterpriseSearch.content.newIndex.viewIntegrationsLink": "Afficher des intégrations supplémentaires", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.createNew": "Créer une clé d’API", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.viewAll": "Afficher toutes les clés d’API", "xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.dotnet": ".NET", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index eb870ef9bd038..4749d310b7335 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -13670,7 +13670,6 @@ "xpack.enterpriseSearch.content.newIndex.types.crawler": "Webクローラー", "xpack.enterpriseSearch.content.newIndex.types.elasticsearch": "Elasticsearchインデックス", "xpack.enterpriseSearch.content.newIndex.types.json": "JSON", - "xpack.enterpriseSearch.content.newIndex.viewIntegrationsLink": "追加の統合を表示", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.createNew": "新しいAPIキーを作成", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.viewAll": "すべてのAPIキーを表示", "xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.dotnet": ".NET", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9eceb1243308f..b46199b6b8919 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -13670,7 +13670,6 @@ "xpack.enterpriseSearch.content.newIndex.types.crawler": "网络爬虫", "xpack.enterpriseSearch.content.newIndex.types.elasticsearch": "Elasticsearch 索引", "xpack.enterpriseSearch.content.newIndex.types.json": "JSON", - "xpack.enterpriseSearch.content.newIndex.viewIntegrationsLink": "查看其他集成", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.createNew": "创建新 API 密钥", "xpack.enterpriseSearch.content.overview.documementExample.generateApiKeyButton.viewAll": "查看所有 API 密钥", "xpack.enterpriseSearch.content.overview.documentExample.clientLibraries.dotnet": ".NET", From 335fc9b2409855f4aeebf360c0747141b2fcf03b Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 5 Oct 2023 09:17:32 -0400 Subject: [PATCH 130/170] fix(slo): handle permission error (#167933) --- .../public/hooks/slo/use_clone_slo.ts | 16 ++++++++++------ .../public/hooks/slo/use_create_slo.ts | 7 +++++-- .../public/hooks/slo/use_delete_slo.ts | 15 +++++++++------ .../public/hooks/slo/use_update_slo.ts | 7 +++++-- .../observability/server/errors/errors.ts | 2 ++ .../observability/server/errors/handler.ts | 5 +++++ .../server/services/slo/transform_manager.ts | 5 +++++ 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts b/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts index 08a3c0520ca18..ac7f1ce0659f5 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import type { CreateSLOInput, CreateSLOResponse, FindSLOResponse } from '@kbn/slo-schema'; import { QueryKey, useMutation, useQueryClient } from '@tanstack/react-query'; @@ -12,6 +13,8 @@ import { v1 as uuidv1 } from 'uuid'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; +type ServerError = IHttpFetchError; + export function useCloneSlo() { const { http, @@ -21,7 +24,7 @@ export function useCloneSlo() { return useMutation< CreateSLOResponse, - string, + ServerError, { slo: CreateSLOInput; originalSloId?: string }, { previousData?: FindSLOResponse; queryKey?: QueryKey } >( @@ -58,16 +61,17 @@ export function useCloneSlo() { return { queryKey, previousData }; }, // If the mutation fails, use the context returned from onMutate to roll back - onError: (_err, { slo }, context) => { + onError: (error, { slo }, context) => { if (context?.previousData && context?.queryKey) { queryClient.setQueryData(context.queryKey, context.previousData); } - toasts.addDanger( - i18n.translate('xpack.observability.slo.clone.errorNotification', { + + toasts.addError(new Error(error.body?.message ?? error.message), { + title: i18n.translate('xpack.observability.slo.clone.errorNotification', { defaultMessage: 'Failed to clone {name}', values: { name: slo.name }, - }) - ); + }), + }); }, onSuccess: (_data, { slo }) => { toasts.addSuccess( diff --git a/x-pack/plugins/observability/public/hooks/slo/use_create_slo.ts b/x-pack/plugins/observability/public/hooks/slo/use_create_slo.ts index ca2a0435b741f..a1a79d51f5af5 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_create_slo.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_create_slo.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { encode } from '@kbn/rison'; import type { CreateSLOInput, CreateSLOResponse, FindSLOResponse } from '@kbn/slo-schema'; @@ -14,6 +15,8 @@ import { paths } from '../../../common/locators/paths'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; +type ServerError = IHttpFetchError; + export function useCreateSlo() { const { application: { navigateToUrl }, @@ -24,7 +27,7 @@ export function useCreateSlo() { return useMutation< CreateSLOResponse, - string, + ServerError, { slo: CreateSLOInput }, { previousData?: FindSLOResponse; queryKey?: QueryKey } >( @@ -72,7 +75,7 @@ export function useCreateSlo() { queryClient.setQueryData(context.queryKey, context.previousData); } - toasts.addError(new Error(String(error)), { + toasts.addError(new Error(error.body?.message ?? error.message), { title: i18n.translate('xpack.observability.slo.create.errorNotification', { defaultMessage: 'Something went wrong while creating {name}', values: { name: slo.name }, diff --git a/x-pack/plugins/observability/public/hooks/slo/use_delete_slo.ts b/x-pack/plugins/observability/public/hooks/slo/use_delete_slo.ts index 6857609500f92..0ba0c93266bda 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_delete_slo.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_delete_slo.ts @@ -8,9 +8,12 @@ import { QueryKey, useMutation, useQueryClient } from '@tanstack/react-query'; import { i18n } from '@kbn/i18n'; import { FindSLOResponse } from '@kbn/slo-schema'; +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; +type ServerError = IHttpFetchError; + export function useDeleteSlo() { const { http, @@ -20,7 +23,7 @@ export function useDeleteSlo() { return useMutation< string, - string, + ServerError, { id: string; name: string }, { previousData?: FindSLOResponse; queryKey?: QueryKey } >( @@ -60,17 +63,17 @@ export function useDeleteSlo() { return { previousData, queryKey }; }, // If the mutation fails, use the context returned from onMutate to roll back - onError: (_err, { name }, context) => { + onError: (error, { name }, context) => { if (context?.previousData && context?.queryKey) { queryClient.setQueryData(context.queryKey, context.previousData); } - toasts.addDanger( - i18n.translate('xpack.observability.slo.slo.delete.errorNotification', { + toasts.addError(new Error(error.body?.message ?? error.message), { + title: i18n.translate('xpack.observability.slo.slo.delete.errorNotification', { defaultMessage: 'Failed to delete {name}', values: { name }, - }) - ); + }), + }); }, onSuccess: (_data, { name }) => { toasts.addSuccess( diff --git a/x-pack/plugins/observability/public/hooks/slo/use_update_slo.ts b/x-pack/plugins/observability/public/hooks/slo/use_update_slo.ts index c158fa3f31f5e..07f6991b9e82b 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_update_slo.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_update_slo.ts @@ -5,12 +5,15 @@ * 2.0. */ +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import type { FindSLOResponse, UpdateSLOInput, UpdateSLOResponse } from '@kbn/slo-schema'; import { QueryKey, useMutation, useQueryClient } from '@tanstack/react-query'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; +type ServerError = IHttpFetchError; + export function useUpdateSlo() { const { http, @@ -20,7 +23,7 @@ export function useUpdateSlo() { return useMutation< UpdateSLOResponse, - string, + ServerError, { sloId: string; slo: UpdateSLOInput }, { previousData?: FindSLOResponse; queryKey?: QueryKey } >( @@ -69,7 +72,7 @@ export function useUpdateSlo() { queryClient.setQueryData(context.queryKey, context.previousData); } - toasts.addError(new Error(String(error)), { + toasts.addError(new Error(error.body?.message ?? error.message), { title: i18n.translate('xpack.observability.slo.update.errorNotification', { defaultMessage: 'Something went wrong when updating {name}', values: { name }, diff --git a/x-pack/plugins/observability/server/errors/errors.ts b/x-pack/plugins/observability/server/errors/errors.ts index dbbb873925636..cbecb88d9ce05 100644 --- a/x-pack/plugins/observability/server/errors/errors.ts +++ b/x-pack/plugins/observability/server/errors/errors.ts @@ -25,3 +25,5 @@ export class InternalQueryError extends ObservabilityError {} export class NotSupportedError extends ObservabilityError {} export class IllegalArgumentError extends ObservabilityError {} export class InvalidTransformError extends ObservabilityError {} + +export class SecurityException extends ObservabilityError {} diff --git a/x-pack/plugins/observability/server/errors/handler.ts b/x-pack/plugins/observability/server/errors/handler.ts index 943983439ca60..2898e53624832 100644 --- a/x-pack/plugins/observability/server/errors/handler.ts +++ b/x-pack/plugins/observability/server/errors/handler.ts @@ -9,6 +9,7 @@ import { CompositeSLOIdConflict, CompositeSLONotFound, ObservabilityError, + SecurityException, SLOIdConflict, SLONotFound, } from './errors'; @@ -22,5 +23,9 @@ export function getHTTPResponseCode(error: ObservabilityError): number { return 409; } + if (error instanceof SecurityException) { + return 403; + } + return 400; } diff --git a/x-pack/plugins/observability/server/services/slo/transform_manager.ts b/x-pack/plugins/observability/server/services/slo/transform_manager.ts index e195b683e1892..ed35512c03b65 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_manager.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_manager.ts @@ -8,6 +8,7 @@ import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { SLO, IndicatorTypes } from '../../domain/models'; +import { SecurityException } from '../../errors'; import { retryTransientEsErrors } from '../../utils/retry'; import { TransformGenerator } from './transform_generators'; @@ -42,6 +43,10 @@ export class DefaultTransformManager implements TransformManager { }); } catch (err) { this.logger.error(`Cannot create SLO transform for indicator type [${slo.indicator.type}]`); + if (err.meta?.body?.error?.type === 'security_exception') { + throw new SecurityException(err.meta.body.error.reason); + } + throw err; } From 59257dbcc8fcf2f05b9ac62cb4a494213afa75cd Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 5 Oct 2023 09:20:09 -0400 Subject: [PATCH 131/170] fix(slo): preview data no response error (#167909) --- .../public/hooks/slo/use_get_preview_data.ts | 2 +- .../server/services/slo/get_preview_data.ts | 34 +++++++++++-------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/x-pack/plugins/observability/public/hooks/slo/use_get_preview_data.ts b/x-pack/plugins/observability/public/hooks/slo/use_get_preview_data.ts index f9ebff032b5da..0dfe9cbebc82d 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_get_preview_data.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_get_preview_data.ts @@ -42,7 +42,7 @@ export function useGetPreviewData(isValid: boolean, indicator: Indicator): UseGe } ); - return response; + return Array.isArray(response) ? response : []; }, retry: false, refetchOnWindowFocus: false, diff --git a/x-pack/plugins/observability/server/services/slo/get_preview_data.ts b/x-pack/plugins/observability/server/services/slo/get_preview_data.ts index e85085dcec115..98f07e1f8ed5e 100644 --- a/x-pack/plugins/observability/server/services/slo/get_preview_data.ts +++ b/x-pack/plugins/observability/server/services/slo/get_preview_data.ts @@ -16,12 +16,13 @@ import { KQLCustomIndicator, MetricCustomIndicator, } from '@kbn/slo-schema'; +import { assertNever } from '@kbn/std'; import { APMTransactionDurationIndicator } from '../../domain/models'; import { computeSLI } from '../../domain/services'; import { InvalidQueryError } from '../../errors'; import { - GetHistogramIndicatorAggregation, GetCustomMetricIndicatorAggregation, + GetHistogramIndicatorAggregation, } from './aggregations'; export class GetPreviewData { @@ -299,19 +300,24 @@ export class GetPreviewData { } public async execute(params: GetPreviewDataParams): Promise { - switch (params.indicator.type) { - case 'sli.apm.transactionDuration': - return this.getAPMTransactionDurationPreviewData(params.indicator); - case 'sli.apm.transactionErrorRate': - return this.getAPMTransactionErrorPreviewData(params.indicator); - case 'sli.kql.custom': - return this.getCustomKQLPreviewData(params.indicator); - case 'sli.histogram.custom': - return this.getHistogramPreviewData(params.indicator); - case 'sli.metric.custom': - return this.getCustomMetricPreviewData(params.indicator); - default: - return []; + try { + const type = params.indicator.type; + switch (type) { + case 'sli.apm.transactionDuration': + return this.getAPMTransactionDurationPreviewData(params.indicator); + case 'sli.apm.transactionErrorRate': + return this.getAPMTransactionErrorPreviewData(params.indicator); + case 'sli.kql.custom': + return this.getCustomKQLPreviewData(params.indicator); + case 'sli.histogram.custom': + return this.getHistogramPreviewData(params.indicator); + case 'sli.metric.custom': + return this.getCustomMetricPreviewData(params.indicator); + default: + assertNever(type); + } + } catch (err) { + return []; } } } From e6971abfda2644dc94ede43f70e52512f29ab807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?= Date: Thu, 5 Oct 2023 15:47:14 +0200 Subject: [PATCH 132/170] [Enterprise Search] Escape Lucene reserved characters when calling document search. (#168092) ## Summary Escape Lucene reserved characters when Document box is used. It was returning 502 before when certain characters like `&<>!` etc is entered to the search box. https://github.com/elastic/kibana/assets/1410658/a672f71a-e40f-4111-b942-2f3ba9434b7a ## Release note Filter box in Search Index documents tab is no more throwing errors when certain characters entered. --- .../server/lib/fetch_search_results.ts | 3 +- .../server/utils/escape_lucene_chars.ts | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/enterprise_search/server/utils/escape_lucene_chars.ts diff --git a/x-pack/plugins/enterprise_search/server/lib/fetch_search_results.ts b/x-pack/plugins/enterprise_search/server/lib/fetch_search_results.ts index a1b8da77f887d..6131dfca2c40b 100644 --- a/x-pack/plugins/enterprise_search/server/lib/fetch_search_results.ts +++ b/x-pack/plugins/enterprise_search/server/lib/fetch_search_results.ts @@ -9,6 +9,7 @@ import { SearchResponseBody } from '@elastic/elasticsearch/lib/api/types'; import { IScopedClusterClient } from '@kbn/core/server'; import { ENTERPRISE_SEARCH_DOCUMENTS_DEFAULT_DOC_COUNT } from '../../common/constants'; +import { escapeLuceneChars } from '../utils/escape_lucene_chars'; export const fetchSearchResults = async ( client: IScopedClusterClient, @@ -21,7 +22,7 @@ export const fetchSearchResults = async ( from, index: indexName, size, - ...(!!query ? { q: query.replace(/"/g, '\\"') } : {}), + ...(!!query ? { q: escapeLuceneChars(query) } : {}), }); return results; }; diff --git a/x-pack/plugins/enterprise_search/server/utils/escape_lucene_chars.ts b/x-pack/plugins/enterprise_search/server/utils/escape_lucene_chars.ts new file mode 100644 index 0000000000000..456c5d7fb34f1 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/utils/escape_lucene_chars.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const escapeLuceneChars = (query: string) => + query + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\?/g, '\\?') + .replace(/\+/g, '\\+') + .replace(/\*/g, '\\*') + .replace(/\|/g, '\\|') + .replace(/{/g, '\\{') + .replace(/}/g, '\\}') + .replace(/\[/g, '\\[') + .replace(/\]/g, '\\]') + .replace(/\(/g, '\\(') + .replace(/\)/g, '\\)') + .replace(/\./g, '\\.') + .replace(/\^/g, '\\^') + .replace(/\!/g, '\\!') + .replace(/\~/g, '\\~') + .replace(/\-/g, '\\-') + .replace(/\ Date: Thu, 5 Oct 2023 16:29:57 +0200 Subject: [PATCH 133/170] [Infra UI] Fix broken Hosts View UI in serverless (#167771) fixes https://github.com/elastic/kibana/issues/167230 ## Summary This PR fixes the sticky search bar and the position of the popover on the hosts view page in serverless mode **Serverless** https://github.com/elastic/kibana/assets/2767137/636af516-7f86-4bb2-b24a-c679d508ebfd image **Stateful** https://github.com/elastic/kibana/assets/2767137/385378b2-fbae-43ea-93c2-84ad6d7e6afc image For the sticky header, the `useKibanaHeader` hooks was changed to account only for the sticky action menu height, that's present in serverless. We can rely on the css var `--euiFixedHeadersOffset` for the main offset between main header and page content. ### How to test - Start a local es instance: `yarn es serverless --kill --clean --license trial --ssl` - Enable `infra` in the `serverless.oblt.dev.yml` file: - `xpack.infra.enabled: true` - Start a local kibana instance: `yarn serverless-oblt --ssl` and see if the side nav contains the Infrastructure item - Navigate to `https://0.0.0.0:5601/ftw/app/hosts` and check the table popovers and sticky search bar. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../asset_details/template/page.tsx | 15 +++-- .../infra/public/hooks/use_kibana_header.tsx | 17 ++---- .../hosts/components/hosts_content.tsx | 39 +++++------- .../search_bar/unified_search_bar.tsx | 4 +- .../hosts/components/table/popover.tsx | 59 ++----------------- .../metrics/hosts/hooks/use_hosts_table.tsx | 2 - 6 files changed, 37 insertions(+), 99 deletions(-) diff --git a/x-pack/plugins/infra/public/components/asset_details/template/page.tsx b/x-pack/plugins/infra/public/components/asset_details/template/page.tsx index f0a141d393f3f..eb0b65f6cc792 100644 --- a/x-pack/plugins/infra/public/components/asset_details/template/page.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/template/page.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiPageTemplate } from '@elastic/eui'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; -import React, { useEffect } from 'react'; +import React, { useEffect, useMemo } from 'react'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { useKibanaHeader } from '../../../hooks/use_kibana_header'; import { InfraLoadingPanel } from '../../loading'; @@ -26,7 +26,7 @@ export const Page = ({ header: { tabs = [], links = [] } }: ContentTemplateProps const { metadata, loading: metadataLoading } = useMetadataStateProviderContext(); const { rightSideItems, tabEntries, breadcrumbs } = usePageHeader(tabs, links); const { asset, assetType } = useAssetDetailsRenderPropsContext(); - const { headerHeight } = useKibanaHeader(); + const { actionMenuHeight } = useKibanaHeader(); const trackOnlyOnce = React.useRef(false); const { activeTabId } = useTabSwitcherContext(); @@ -58,11 +58,16 @@ export const Page = ({ header: { tabs = [], links = [] } }: ContentTemplateProps } }, [activeTabId, assetType, metadata, metadataLoading, telemetry]); + const heightWithOffset = useMemo( + () => `calc(100vh - var(--euiFixedHeadersOffset, 0) - ${actionMenuHeight}px)`, + [actionMenuHeight] + ); + return loading ? ( diff --git a/x-pack/plugins/infra/public/hooks/use_kibana_header.tsx b/x-pack/plugins/infra/public/hooks/use_kibana_header.tsx index 8d7ccbf009575..0ac308005319c 100644 --- a/x-pack/plugins/infra/public/hooks/use_kibana_header.tsx +++ b/x-pack/plugins/infra/public/hooks/use_kibana_header.tsx @@ -5,20 +5,15 @@ * 2.0. */ -import { useEuiTheme } from '@elastic/eui'; import { useMemo } from 'react'; export const useKibanaHeader = () => { - const { euiTheme } = useEuiTheme(); - const headerHeight = useMemo(() => { - const wrapper = document.querySelector(`[data-test-subj="kibanaChrome"]`); + const actionMenuHeight = useMemo(() => { + // only in serverless + const actionMenu = document.querySelector(`[data-test-subj="kibanaProjectHeaderActionMenu"]`); - if (!wrapper) { - return parseInt(euiTheme.size.xxxl, 10) * 2; - } + return actionMenu?.getBoundingClientRect().height ?? 0; + }, []); - return wrapper.getBoundingClientRect().top; - }, [euiTheme]); - - return { headerHeight }; + return { actionMenuHeight }; }; diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/hosts_content.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/hosts_content.tsx index f0d9356ba6ac6..7dea5303aad28 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/hosts_content.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/hosts_content.tsx @@ -12,19 +12,10 @@ import { KPIGrid } from './kpis/kpi_grid'; import { Tabs } from './tabs/tabs'; import { AlertsQueryProvider } from '../hooks/use_alerts_query'; import { HostsViewProvider } from '../hooks/use_hosts_view'; -import { HostsTableProvider, useHostsTableContext } from '../hooks/use_hosts_table'; +import { HostsTableProvider } from '../hooks/use_hosts_table'; import { ErrorCallout } from './error_callout'; import { useUnifiedSearchContext } from '../hooks/use_unified_search'; -const Container = ({ children }: { children: React.ReactNode }) => { - const { refs } = useHostsTableContext(); - return ( - <> - {children} -
    - - ); -}; export const HostsContent = () => { const { error } = useUnifiedSearchContext(); @@ -35,21 +26,19 @@ export const HostsContent = () => { ) : ( - - - - - - - - - - - - - - - + + + + + + + + + + + + + )} diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/search_bar/unified_search_bar.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/search_bar/unified_search_bar.tsx index 83a30e1d84412..96ee8542ea727 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/search_bar/unified_search_bar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/search_bar/unified_search_bar.tsx @@ -102,13 +102,13 @@ export const UnifiedSearchBar = () => { const StickyContainer = ({ children }: { children: React.ReactNode }) => { const { euiTheme } = useEuiTheme(); - const { headerHeight } = useKibanaHeader(); + const { actionMenuHeight } = useKibanaHeader(); return (
    { - let currentElement = element; - - while (currentElement && currentElement.className !== APP_WRAPPER_CLASS) { - currentElement = currentElement.parentElement; - } - return currentElement; -}; export const Popover = ({ children }: { children: React.ReactNode }) => { const buttonRef = useRef(null); - const containerRef = useRef(null); - const [offset, setOffset] = useState(0); const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false); - const { - refs: { popoverContainerRef }, - } = useHostsTableContext(); - - const { euiTheme } = useEuiTheme(); - - useLayoutEffect(() => { - containerRef.current = findTableParentElement(buttonRef.current); - }, []); - - const calculateHeaderOffset = () => { - const { top: containerTop = 0 } = containerRef.current?.getBoundingClientRect() ?? {}; - const headerOffset = containerTop + window.scrollY; - - return headerOffset; - }; const onButtonClick = useCallback( (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); - const { top: buttonTop = 0 } = buttonRef.current?.getBoundingClientRect() ?? {}; - - // gets the actual page position, discounting anything above the page content (e.g: header, dismissible banner) - const headerOffset = calculateHeaderOffset(); - // determines if the scroll position is close to overlapping with the button - const scrollPosition = buttonTop - headerOffset - SEARCH_BAR_OFFSET; - const isAboveElement = scrollPosition <= 0; - - // offset to be taken into account when positioning the popover - setOffset(headerOffset * (isAboveElement ? -1 : 1) + ANCHOR_SPACING); togglePopover(); }, [togglePopover] @@ -82,17 +40,8 @@ export const Popover = ({ children }: { children: React.ReactNode }) => { } isOpen={isPopoverOpen} closePopover={closePopover} - offset={offset} - anchorPosition={offset <= 0 ? 'downCenter' : 'upCenter'} - insert={ - popoverContainerRef && popoverContainerRef?.current - ? { - sibling: popoverContainerRef.current, - position: 'after', - } - : undefined - } - zIndex={Number(euiTheme.levels.header) - 1} + offset={10} + anchorPosition="upCenter" panelStyle={{ maxWidth: 350 }} > {children} diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index b74c2321859ec..290062a2f1d48 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -138,7 +138,6 @@ export const useHostsTable = () => { } = useKibanaContextForPlugin(); const { dataView } = useMetricsDataViewContext(); - const popoverContainerRef = useRef(null); const tableRef = useRef(null); const closeFlyout = useCallback(() => setProperties({ detailsItemId: null }), [setProperties]); @@ -360,7 +359,6 @@ export const useHostsTable = () => { selectedItemsCount: selectedItems.length, filterSelectedHosts, refs: { - popoverContainerRef, tableRef, }, }; From 146eecca8524c3e844b1fb422455dcfdaf525107 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 5 Oct 2023 09:30:10 -0500 Subject: [PATCH 134/170] [bazel] Use kibana-ci-proxy-cache for node downloads (#166875) We're seeing less than ideal reliability for our node downloads from the official site on CI. This uses our cache for downloading node distributions for development. The checksums on our linux distributions have been updated due to using our glibc 2.17 node build. Used similarly to our distributions: https://github.com/elastic/kibana/blob/82024c240a89ab8f63c27d3f42ac2a80b6c2cd2c/src/dev/build/tasks/nodejs/node_download_info.ts#L21 --- WORKSPACE.bazel | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index dd4c41818949c..3415256bedbfd 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -24,13 +24,13 @@ node_repositories( node_repositories = { "18.17.1-darwin_amd64": ("node-v18.17.1-darwin-x64.tar.gz", "node-v18.17.1-darwin-x64", "b3e083d2715f07ec3f00438401fb58faa1e0bdf3c7bde9f38b75ed17809d92fa"), "18.17.1-darwin_arm64": ("node-v18.17.1-darwin-arm64.tar.gz", "node-v18.17.1-darwin-arm64", "18ca716ea57522b90473777cb9f878467f77fdf826d37beb15a0889fdd74533e"), - "18.17.1-linux_arm64": ("node-v18.17.1-linux-arm64.tar.xz", "node-v18.17.1-linux-arm64", "3f933716a468524acb68c2514d819b532131eb50399ee946954d4a511303e1bb"), - "18.17.1-linux_amd64": ("node-v18.17.1-linux-x64.tar.xz", "node-v18.17.1-linux-x64", "07e76408ddb0300a6f46fcc9abc61f841acde49b45020ec4e86bb9b25df4dced"), + "18.17.1-linux_arm64": ("node-v18.17.1-linux-arm64.tar.xz", "node-v18.17.1-linux-arm64", "2743722f164df953b11663a6c25f9cf35769bf500e712e21a6c20e896177da30"), + "18.17.1-linux_amd64": ("node-v18.17.1-linux-x64.tar.xz", "node-v18.17.1-linux-x64", "4612954fef461bb05ba952112636bd11e51c0a59db94e6c4b26328fee4d4d9ab"), "18.17.1-windows_amd64": ("node-v18.17.1-win-x64.zip", "node-v18.17.1-win-x64", "afc83f5cf6e8b45a4d3fb842904f604dcd271fefada31ad6654f8302f8da28c9"), }, node_version = "18.17.1", node_urls = [ - "https://nodejs.org/dist/v{version}/{filename}", + "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v{version}/{filename}", ], yarn_repositories = { "1.22.19": ("yarn-v1.22.19.tar.gz", "yarn-v1.22.19", "732620bac8b1690d507274f025f3c6cfdc3627a84d9642e38a07452cc00e0f2e"), From f1faebf633fd20bab67dec87170b601bed3ce238 Mon Sep 17 00:00:00 2001 From: Ryland Herrick Date: Thu, 5 Oct 2023 09:44:41 -0500 Subject: [PATCH 135/170] [Security Solution][Entity Analytics] Risk scoring cancellation telemetry (#167932) ## Summary Adds a new cancellation telemetry event, for cases where the risk scoring task was cancelled. In order to provide more context about the task execution (and potential cancellation) in general, we now ship the task `interval` instead of the boolean `isExecutionDurationExceededInterval`, which we can derive from `interval` and `duration` (although I do not expect `duration` to ever exceed `interval` based on the way the cancellation works). ### For data-analytics folks The following changes are made here: * New "cancelled execution" telemetry event * Removing field from existing telemetry event schema * Adding field to existing telemetry event schema ### 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) --- .../lib/risk_engine/tasks/helpers.test.ts | 16 +------ .../server/lib/risk_engine/tasks/helpers.ts | 13 ------ .../tasks/risk_scoring_task.mock.ts | 3 +- .../tasks/risk_scoring_task.test.ts | 24 ++++++++++- .../risk_engine/tasks/risk_scoring_task.ts | 16 +++---- .../lib/telemetry/event_based/events.ts | 42 ++++++++++++++++--- 6 files changed, 67 insertions(+), 47 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.test.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.test.ts index 12ae81093cae9..20eec9fa968d9 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.test.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.test.ts @@ -6,7 +6,7 @@ */ import moment from 'moment'; -import { convertDateToISOString, isExecutionDurationExceededInterval } from './helpers'; +import { convertDateToISOString } from './helpers'; moment.suppressDeprecationWarnings = true; @@ -49,17 +49,3 @@ describe('convertDateToISOString', () => { }).toThrowErrorMatchingInlineSnapshot(`"Could not convert string \\"hi mom\\" to ISO string"`); }); }); - -describe('isExecutionDurationExceededInterval', () => { - it('return false if the execution duration interval not defiend', () => { - expect(isExecutionDurationExceededInterval(undefined, 1000)).toEqual(false); - }); - - it('return false if the execution duration is less than the interval', () => { - expect(isExecutionDurationExceededInterval('1m', 59)).toEqual(false); - }); - - it('return true if the execution duration is greater than the interval', () => { - expect(isExecutionDurationExceededInterval('1m', 61)).toEqual(true); - }); -}); diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.ts index b0f77fb6a51ca..dfacb8b78f30a 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/helpers.ts @@ -13,7 +13,6 @@ import { type CoreStart, } from '@kbn/core/server'; import { addSpaceIdToPath } from '@kbn/spaces-plugin/server'; -import { parseIntervalAsSecond } from '@kbn/task-manager-plugin/server/lib/intervals'; import type { Range } from '../../../../common/risk_engine'; @@ -73,15 +72,3 @@ export const buildScopedInternalSavedObjectsClientUnsafe = ({ excludedExtensions: [SECURITY_EXTENSION_ID], }); }; - -export const isExecutionDurationExceededInterval = ( - interval: string | undefined, - taskDurationInSeconds: number -): boolean => { - let executionDurationExceededInterval = false; - if (interval) { - executionDurationExceededInterval = taskDurationInSeconds > parseIntervalAsSecond(interval); - } - - return executionDurationExceededInterval; -}; diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.mock.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.mock.ts index 9a74dd60dce61..cc607351f6d90 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.mock.ts @@ -7,7 +7,7 @@ import { type ConcreteTaskInstance, TaskStatus } from '@kbn/task-manager-plugin/server'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; -import { TYPE, VERSION } from './constants'; +import { INTERVAL, TYPE, VERSION } from './constants'; import { defaultState } from './state'; const createRiskScoringTaskInstanceMock = ( @@ -21,6 +21,7 @@ const createRiskScoringTaskInstanceMock = ( status: TaskStatus.Running, startedAt: new Date(), scheduledAt: new Date(), + schedule: { interval: INTERVAL }, retryAt: new Date(), params: {}, state: defaultState, diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.test.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.test.ts index b6ac21169409e..6399ba47cbffa 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.test.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.test.ts @@ -461,9 +461,8 @@ describe('Risk Scoring Task', () => { telemetry: mockTelemetry, }); - expect(mockTelemetry.reportEvent).toHaveBeenCalledTimes(1); expect(mockTelemetry.reportEvent).toHaveBeenCalledWith('risk_score_execution_success', { - executionDurationExceededInterval: false, + interval: '1h', scoresWritten: 10, taskDurationInSeconds: 0, }); @@ -491,6 +490,27 @@ describe('Risk Scoring Task', () => { ); } }); + + it('sends a cancellation telemetry event if the task was cancelled', async () => { + mockIsCancelled.mockReturnValue(true); + + await runTask({ + getRiskScoreService, + isCancelled: mockIsCancelled, + logger: mockLogger, + taskInstance: riskScoringTaskInstanceMock, + telemetry: mockTelemetry, + }); + + expect(mockTelemetry.reportEvent).toHaveBeenCalledWith( + 'risk_score_execution_cancellation', + { + interval: '1h', + scoresWritten: 0, + taskDurationInSeconds: 0, + } + ); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts index ad195ae9feb4a..8b474635eaba4 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts @@ -30,15 +30,12 @@ import { type LatestTaskStateSchema as RiskScoringTaskState, } from './state'; import { INTERVAL, SCOPE, TIMEOUT, TYPE, VERSION } from './constants'; -import { - buildScopedInternalSavedObjectsClientUnsafe, - convertRangeToISO, - isExecutionDurationExceededInterval, -} from './helpers'; +import { buildScopedInternalSavedObjectsClientUnsafe, convertRangeToISO } from './helpers'; import { RiskScoreEntity } from '../../../../common/risk_engine/types'; import { RISK_SCORE_EXECUTION_SUCCESS_EVENT, RISK_SCORE_EXECUTION_ERROR_EVENT, + RISK_SCORE_EXECUTION_CANCELLATION_EVENT, } from '../../telemetry/event_based/events'; const logFactory = @@ -253,23 +250,20 @@ export const runTask = async ({ updatedState.scoresWritten = scoresWritten; const taskCompletionTime = moment().utc().toISOString(); - const taskDurationInSeconds = moment(taskCompletionTime).diff(moment(taskStartTime), 'seconds'); - const telemetryEvent = { scoresWritten, taskDurationInSeconds, - executionDurationExceededInterval: isExecutionDurationExceededInterval( - taskInstance?.schedule?.interval, - taskDurationInSeconds - ), + interval: taskInstance?.schedule?.interval, }; telemetry.reportEvent(RISK_SCORE_EXECUTION_SUCCESS_EVENT.eventType, telemetryEvent); if (isCancelled()) { log('task was cancelled'); + telemetry.reportEvent(RISK_SCORE_EXECUTION_CANCELLATION_EVENT.eventType, telemetryEvent); } + log('task run completed'); log(JSON.stringify(telemetryEvent)); return { diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts b/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts index 12d30eeda2079..2b2784cca56fc 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts @@ -9,7 +9,7 @@ import type { EventTypeOpts } from '@kbn/analytics-client'; export const RISK_SCORE_EXECUTION_SUCCESS_EVENT: EventTypeOpts<{ scoresWritten: number; taskDurationInSeconds: number; - executionDurationExceededInterval: boolean; + interval: string; }> = { eventType: 'risk_score_execution_success', schema: { @@ -25,10 +25,10 @@ export const RISK_SCORE_EXECUTION_SUCCESS_EVENT: EventTypeOpts<{ description: 'Duration (in seconds) of the current risk scoring task execution', }, }, - executionDurationExceededInterval: { - type: 'boolean', + interval: { + type: 'keyword', _meta: { - description: `Whether the risk scoring task's duration exceeded its allocated interval`, + description: `Configured interval for the current risk scoring task`, }, }, }, @@ -39,4 +39,36 @@ export const RISK_SCORE_EXECUTION_ERROR_EVENT: EventTypeOpts<{}> = { schema: {}, }; -export const events = [RISK_SCORE_EXECUTION_SUCCESS_EVENT, RISK_SCORE_EXECUTION_ERROR_EVENT]; +export const RISK_SCORE_EXECUTION_CANCELLATION_EVENT: EventTypeOpts<{ + scoresWritten: number; + taskDurationInSeconds: number; + interval: string; +}> = { + eventType: 'risk_score_execution_cancellation', + schema: { + scoresWritten: { + type: 'long', + _meta: { + description: 'Number of risk scores written during this scoring task execution', + }, + }, + taskDurationInSeconds: { + type: 'long', + _meta: { + description: 'Duration (in seconds) of the current risk scoring task execution', + }, + }, + interval: { + type: 'keyword', + _meta: { + description: `Configured interval for the current risk scoring task`, + }, + }, + }, +}; + +export const events = [ + RISK_SCORE_EXECUTION_SUCCESS_EVENT, + RISK_SCORE_EXECUTION_ERROR_EVENT, + RISK_SCORE_EXECUTION_CANCELLATION_EVENT, +]; From 34a73cc909ed9c69532049f49b158ebf978ba801 Mon Sep 17 00:00:00 2001 From: Julian Gernun <17549662+jcger@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:50:22 +0200 Subject: [PATCH 136/170] [Cases] Delete Comment - Fix Flaky Test (#167971) Just unskipping because flaky test runner passed this test 99/100 times, it failed once because of something else https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3355#018aff58-5c88-4dd7-962f-1b0c8fb252ac --- .../tests/common/comments/delete_comment.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/delete_comment.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/delete_comment.ts index d4032bf7ea909..2cc6d249ef130 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/delete_comment.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/delete_comment.ts @@ -54,8 +54,7 @@ export default ({ getService }: FtrProviderContext): void => { const log = getService('log'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - // Failing: See https://github.com/elastic/kibana/issues/157589 - describe.skip('delete_comment', () => { + describe('delete_comment', () => { afterEach(async () => { await deleteCasesByESQuery(es); await deleteComments(es); From 93b67fe732ec09fcb049b269d0750044161c97d1 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Thu, 5 Oct 2023 09:02:22 -0600 Subject: [PATCH 137/170] [ML] Data Frame analytics outlier detection results: ensure scatterplot matrix adheres to bounding box (#167941) ## Summary Fixes https://github.com/elastic/kibana/issues/144709 Ensures scatterplot matrix does not over flow bounding box. The css already had an overflow property for 'mlScatterplotMatrix' but the class was never added to the parent div. This PR adds the class to the appropriate div so scatterplot matrix does not overlfow. image image ### Checklist - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/scatterplot_matrix/scatterplot_matrix.scss | 2 +- .../components/scatterplot_matrix/scatterplot_matrix.tsx | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss index 6a4fbd97b3bdd..322cdb4971f05 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.scss @@ -5,4 +5,4 @@ font-size: $euiFontSizeXS; padding: 0 $euiSizeXS; } -} +} \ No newline at end of file diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx index daf094c8c35a1..e617d05f94d31 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix.tsx @@ -412,7 +412,10 @@ export const ScatterplotMatrix: FC = ({ {splom === undefined || vegaSpec === undefined ? ( ) : ( -
    +
    Date: Thu, 5 Oct 2023 17:10:30 +0200 Subject: [PATCH 138/170] [Security Solutions] Support for custom columns in the flyout table (#167940) ## Summary https://github.com/elastic/security-team/issues/6233 ![image](https://github.com/elastic/kibana/assets/11671118/41eb7a93-1a38-4889-b4a4-c9b1e7377e2d) ### 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) - [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 --- .../components/event_details/columns.tsx | 29 +++---- .../event_details/event_fields_browser.tsx | 36 +++++++- .../public/flyout/right/tabs/table_tab.tsx | 86 ++++++++++++++++++- .../alert_details_right_panel_table_tab.ts | 2 + .../alert_details_right_panel_table_tab.ts | 33 +++---- 5 files changed, 148 insertions(+), 38 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx index 662f39e72b5ab..26d98016c169c 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx @@ -18,6 +18,7 @@ import type { BrowserField } from '../../../../common/search_strategy'; import { FieldValueCell } from './table/field_value_cell'; import { FieldNameCell } from './table/field_name_cell'; import { getSourcererScopeId } from '../../../helpers'; +import type { ColumnsProvider } from './event_fields_browser'; const HoverActionsContainer = styled(EuiPanel)` align-items: center; @@ -39,7 +40,7 @@ export const getFieldFromBrowserField = memoizeOne( (newArgs, lastArgs) => newArgs[0].join() === lastArgs[0].join() ); -export const getColumns = ({ +export const getColumns: ColumnsProvider = ({ browserFields, eventId, contextId, @@ -47,17 +48,9 @@ export const getColumns = ({ getLinkValue, isDraggable, isReadOnly, -}: { - browserFields: BrowserFields; - eventId: string; - contextId: string; - scopeId: string; - getLinkValue: (field: string) => string | null; - isDraggable?: boolean; - isReadOnly?: boolean; }) => [ ...(!isReadOnly - ? [ + ? ([ { field: 'values', name: ( @@ -68,7 +61,7 @@ export const getColumns = ({ sortable: false, truncateText: false, width: '132px', - render: (values: string[] | null | undefined, data: EventFieldsData) => { + render: (values, data) => { return ( ) : []), { field: 'field', @@ -96,8 +89,10 @@ export const getColumns = ({ ), sortable: true, truncateText: false, - render: (field: string, data: EventFieldsData) => { - return ; + render: (field, data) => { + return ( + + ); }, }, { @@ -110,15 +105,15 @@ export const getColumns = ({ ), sortable: true, truncateText: false, - render: (values: string[] | null | undefined, data: EventFieldsData) => { + render: (values, data) => { const fieldFromBrowserField = getFieldFromBrowserField( - [data.category, 'fields', data.field], + [data.category as string, 'fields', data.field], browserFields ); return ( string | null; + isDraggable?: boolean; + isReadOnly?: boolean; +}) => Array>; + interface Props { browserFields: BrowserFields; data: TimelineEventsDetailsItem[]; @@ -40,6 +51,7 @@ interface Props { scopeId: string; timelineTabType: TimelineTabs | 'flyout'; isReadOnly?: boolean; + columnsProvider?: ColumnsProvider; } const TableWrapper = styled.div` @@ -159,7 +171,16 @@ const useFieldBrowserPagination = () => { /** Renders a table view or JSON view of the `ECS` `data` */ export const EventFieldsBrowser = React.memo( - ({ browserFields, data, eventId, isDraggable, timelineTabType, scopeId, isReadOnly }) => { + ({ + browserFields, + data, + eventId, + isDraggable, + timelineTabType, + scopeId, + isReadOnly, + columnsProvider = getColumns, + }) => { const containerElement = useRef(null); const getScope = useMemo(() => { if (isTimelineScope(scopeId)) { @@ -210,7 +231,7 @@ export const EventFieldsBrowser = React.memo( const columns = useMemo( () => - getColumns({ + columnsProvider({ browserFields, eventId, contextId: `event-fields-browser-for-${scopeId}-${timelineTabType}`, @@ -219,7 +240,16 @@ export const EventFieldsBrowser = React.memo( isDraggable, isReadOnly, }), - [browserFields, eventId, scopeId, timelineTabType, getLinkValue, isDraggable, isReadOnly] + [ + browserFields, + eventId, + scopeId, + columnsProvider, + timelineTabType, + getLinkValue, + isDraggable, + isReadOnly, + ] ); const focusSearchInput = useCallback(() => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx index 4f0fac3097679..47a9a5e95fa6f 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx @@ -7,9 +7,90 @@ import type { FC } from 'react'; import React, { memo } from 'react'; -import { TimelineTabs } from '../../../../common/types'; -import { EventFieldsBrowser } from '../../../common/components/event_details/event_fields_browser'; +import { EuiText } from '@elastic/eui'; +import { get } from 'lodash'; +import memoizeOne from 'memoize-one'; +import type { EventFieldsData } from '../../../common/components/event_details/types'; +import { FieldValueCell } from '../../../common/components/event_details/table/field_value_cell'; +import type { BrowserField, BrowserFields } from '../../../../common/search_strategy'; +import { FieldNameCell } from '../../../common/components/event_details/table/field_name_cell'; +import { + CellActionsMode, + SecurityCellActions, + SecurityCellActionsTrigger, +} from '../../../common/components/cell_actions'; +import { getSourcererScopeId } from '../../../helpers'; +import * as i18n from '../../../common/components/event_details/translations'; import { useRightPanelContext } from '../context'; +import type { ColumnsProvider } from '../../../common/components/event_details/event_fields_browser'; +import { EventFieldsBrowser } from '../../../common/components/event_details/event_fields_browser'; +import { TimelineTabs } from '../../../../common/types'; + +export const getFieldFromBrowserField = memoizeOne( + (keys: string[], browserFields: BrowserFields): BrowserField | undefined => + get(browserFields, keys), + (newArgs, lastArgs) => newArgs[0].join() === lastArgs[0].join() +); + +export const getColumns: ColumnsProvider = ({ + browserFields, + eventId, + contextId, + scopeId, + getLinkValue, + isDraggable, +}) => [ + { + field: 'field', + name: ( + + {i18n.FIELD} + + ), + render: (field, data) => { + return ( + + ); + }, + }, + { + field: 'values', + name: ( + + {i18n.VALUE} + + ), + render: (values, data) => { + const fieldFromBrowserField = getFieldFromBrowserField( + [data.category as string, 'fields', data.field], + browserFields + ); + return ( + + + + ); + }, + }, +]; /** * Table view displayed in the document details expandable flyout right section @@ -26,6 +107,7 @@ export const TableTab: FC = memo(() => { timelineTabType={TimelineTabs.query} scopeId={'alert-details-flyout'} isReadOnly={false} + columnsProvider={getColumns} /> ); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts index b8cd86f639e2a..035611d5f06f9 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts @@ -17,6 +17,8 @@ export const DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_CLEAR_FILTER = export const DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_ROW = getDataTestSubjectSelector( 'event-fields-table-row-@timestamp' ); +export const DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL = + getDataTestSubjectSelector('event-field-@timestamp'); export const DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ID_ROW = getDataTestSubjectSelector( 'event-fields-table-row-_id' ); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_table_tab.ts b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_table_tab.ts index 4e534ab770f26..4cb0518270717 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_table_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_table_tab.ts @@ -13,6 +13,7 @@ import { DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_IN, DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_OUT, DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_MORE_ACTIONS, + DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL, } from '../../screens/expandable_flyout/alert_details_right_panel_table_tab'; /** @@ -34,26 +35,26 @@ export const clearFilterTableTabTable = () => /** * Filter In action in the first table row under the Table tab in the alert details expandable flyout right section */ -export const filterInTableTabTable = () => - cy.get(DOCUMENT_DETAILS_FLYOUT_BODY).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_IN).first().click(); - }); - +export const filterInTableTabTable = () => { + cy.get('body').realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL).first().realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_IN).first().click(); +}; /** * Filter Out action in the first table row under the Table tab in the alert details expandable flyout right section */ -export const filterOutTableTabTable = () => - cy.get(DOCUMENT_DETAILS_FLYOUT_BODY).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_OUT).first().click(); - }); - +export const filterOutTableTabTable = () => { + cy.get('body').realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL).first().realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_FILTER_OUT).first().click(); +}; /** * Add to timeline action in the first table row under the Table tab in the alert details expandable flyout right section */ export const addToTimelineTableTabTable = () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_BODY).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_MORE_ACTIONS).first().click(); - }); + cy.get('body').realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL).first().realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_MORE_ACTIONS).first().click(); cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_ADD_TO_TIMELINE).click(); }; @@ -61,9 +62,9 @@ export const addToTimelineTableTabTable = () => { * Show Copy to clipboard button in the first table row under the Table tab in the alert details expandable flyout right section */ export const copyToClipboardTableTabTable = () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_BODY).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_MORE_ACTIONS).first().click(); - }); + cy.get('body').realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_TIMESTAMP_CELL).first().realHover(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_ROW_CELL_MORE_ACTIONS).first().click(); }; /** From 0121ac33a3be63fc8d167f33b2e7fe3a205f5330 Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Thu, 5 Oct 2023 11:14:00 -0400 Subject: [PATCH 139/170] [Fleet] Add docs link + polish UI for assets not available notice (#168097) ## Summary Add a link to https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html from the "Assets not available in this space" notice, and rework the UI to be a little bit more polished. ![image](https://github.com/elastic/kibana/assets/6766512/9d80cfc6-2dc1-45c2-81a4-1b93e604d48a) Closes https://github.com/elastic/ingest-docs/issues/324 --- packages/kbn-doc-links/src/get_doc_links.ts | 1 + packages/kbn-doc-links/src/types.ts | 1 + .../epm/screens/detail/assets/assets.tsx | 34 +++++++++--- .../translations/translations/fr-FR.json | 55 +++++++++---------- .../translations/translations/ja-JP.json | 55 +++++++++---------- .../translations/translations/zh-CN.json | 55 +++++++++---------- 6 files changed, 109 insertions(+), 92 deletions(-) diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index eb0863811ae8c..2065dd3d30735 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -763,6 +763,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { agentPolicy: `${FLEET_DOCS}agent-policy.html`, api: `${FLEET_DOCS}fleet-api-docs.html`, uninstallAgent: `${SECURITY_SOLUTION_DOCS}uninstall-agent.html`, + installAndUninstallIntegrationAssets: `${FLEET_DOCS}install-uninstall-integration-assets.html`, }, ecs: { guide: `${ELASTIC_WEBSITE_URL}guide/en/ecs/current/index.html`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 8b1a8866b47d4..ebb4fb07fe21f 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -521,6 +521,7 @@ export interface DocLinks { agentPolicy: string; api: string; uninstallAgent: string; + installAndUninstallIntegrationAssets: string; }>; readonly ecs: { readonly guide: string; diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/assets/assets.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/assets/assets.tsx index 2f6e20f097601..0b135de831c65 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/assets/assets.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/assets/assets.tsx @@ -8,7 +8,7 @@ import React, { Fragment, useEffect, useState } from 'react'; import { Redirect } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle, EuiCallOut } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiSpacer, EuiTitle, EuiCallOut } from '@elastic/eui'; import type { EsAssetReference, @@ -43,7 +43,7 @@ interface AssetsPanelProps { export const AssetsPage = ({ packageInfo }: AssetsPanelProps) => { const { name, version } = packageInfo; const pkgkey = `${name}-${version}`; - const { spaces } = useStartServices(); + const { spaces, docLinks } = useStartServices(); const customAssetsExtension = useUIExtension(packageInfo.name, 'package-detail-assets'); const canReadPackageSettings = useAuthz().integrations.readPackageInfo; @@ -164,14 +164,32 @@ export const AssetsPage = ({ packageInfo }: AssetsPanelProps) => { ); } else if (!assetsInstalledInCurrentSpace) { content = ( - -

    + -

    -
    + } + > +

    + + + + ), + }} + /> +

    + ); } else if (assetSavedObjects === undefined || assetSavedObjects.length === 0) { if (customAssetsExtension) { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c80516e7ddff8..f3514ba7fbb65 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2426,6 +2426,33 @@ "fieldUtils.fieldNameIcons.textFieldAriaLabel": "Texte", "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "Champ inconnu", "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "Version", + "fieldUtils.fieldNameDescription.binaryField": "Valeur binaire encodée en tant que chaîne Base64.", + "fieldUtils.fieldNameDescription.booleanField": "Valeurs vraies ou fausses.", + "fieldUtils.fieldNameDescription.conflictField": "Le champ possède des valeurs de différents types. Corrigez le problème dans Gestion > Vues de données.", + "fieldUtils.fieldNameDescription.counterField": "Nombre qui ne peut qu'augmenter ou être réinitialisé sur 0 (zéro). Disponible uniquement pour les champs numériques et aggregate_metric_double.", + "fieldUtils.fieldNameDescription.dateField": "Chaîne de date ou nombre de secondes ou de millisecondes depuis 1/1/1970.", + "fieldUtils.fieldNameDescription.dateRangeField": "Plage de valeurs de date.", + "fieldUtils.fieldNameDescription.denseVectorField": "Enregistre les vecteurs denses des valeurs Éléments flottants.", + "fieldUtils.fieldNameDescription.flattenedField": "Objet JSON tout entier en tant que valeur de champ unique.", + "fieldUtils.fieldNameDescription.gaugeField": "Nombre qui peut augmenter ou diminuer. Disponible uniquement pour les champs numériques et aggregate_metric_double.", + "fieldUtils.fieldNameDescription.geoPointField": "Points de latitude et de longitude.", + "fieldUtils.fieldNameDescription.geoShapeField": "Formes complexes, telles que des polygones.", + "fieldUtils.fieldNameDescription.histogramField": "Valeurs numériques pré-agrégées sous forme d'histogramme.", + "fieldUtils.fieldNameDescription.ipAddressField": "Adresses IPv4 et IPv6.", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "Plage de valeurs IP prenant en charge les adresses IPv4 ou IPv6 (ou les 2).", + "fieldUtils.fieldNameDescription.keywordField": "Contenu structuré tel qu'un ID, une adresse e-mail, un nom d'hôte, un code de statut, ou une balise.", + "fieldUtils.fieldNameDescription.murmur3Field": "Champ qui calcule et stocke les hachages de valeurs.", + "fieldUtils.fieldNameDescription.nestedField": "Objet JSON qui conserve la relation entre ses sous-champs.", + "fieldUtils.fieldNameDescription.numberField": "Valeurs Long, Entier, Court, Octet, Double et Élément flottant.", + "fieldUtils.fieldNameDescription.pointField": "Points cartésiens arbitraires.", + "fieldUtils.fieldNameDescription.rankFeatureField": "Enregistre une fonctionnalité numérique pour augmenter le nombre de résultats au moment de la requête.", + "fieldUtils.fieldNameDescription.rankFeaturesField": "Enregistre des fonctionnalités numériques pour augmenter le nombre de résultats au moment de la requête.", + "fieldUtils.fieldNameDescription.recordField": "Nombre d'enregistrements.", + "fieldUtils.fieldNameDescription.shapeField": "Géométries cartésiennes arbitraires.", + "fieldUtils.fieldNameDescription.stringField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", + "fieldUtils.fieldNameDescription.textField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", + "fieldUtils.fieldNameDescription.unknownField": "Champ inconnu", + "fieldUtils.fieldNameDescription.versionField": "Versions des logiciels. Prend en charge les règles de priorité de la Gestion sémantique des versions.", "unifiedDocViewer.docView.table.actions.label": "Actions", "unifiedDocViewer.docView.table.actions.open": "Actions ouvertes", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "Une ou plusieurs valeurs dans ce champ sont trop longues et ne peuvent pas être recherchées ni filtrées.", @@ -5645,33 +5672,6 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "Essayer :", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "Aucun champ n'existe dans cette vue de données.", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "Aucun champ ne correspond aux filtres sélectionnés.", - "fieldUtils.fieldNameDescription.binaryField": "Valeur binaire encodée en tant que chaîne Base64.", - "fieldUtils.fieldNameDescription.booleanField": "Valeurs vraies ou fausses.", - "fieldUtils.fieldNameDescription.conflictField": "Le champ possède des valeurs de différents types. Corrigez le problème dans Gestion > Vues de données.", - "fieldUtils.fieldNameDescription.counterField": "Nombre qui ne peut qu'augmenter ou être réinitialisé sur 0 (zéro). Disponible uniquement pour les champs numériques et aggregate_metric_double.", - "fieldUtils.fieldNameDescription.dateField": "Chaîne de date ou nombre de secondes ou de millisecondes depuis 1/1/1970.", - "fieldUtils.fieldNameDescription.dateRangeField": "Plage de valeurs de date.", - "fieldUtils.fieldNameDescription.denseVectorField": "Enregistre les vecteurs denses des valeurs Éléments flottants.", - "fieldUtils.fieldNameDescription.flattenedField": "Objet JSON tout entier en tant que valeur de champ unique.", - "fieldUtils.fieldNameDescription.gaugeField": "Nombre qui peut augmenter ou diminuer. Disponible uniquement pour les champs numériques et aggregate_metric_double.", - "fieldUtils.fieldNameDescription.geoPointField": "Points de latitude et de longitude.", - "fieldUtils.fieldNameDescription.geoShapeField": "Formes complexes, telles que des polygones.", - "fieldUtils.fieldNameDescription.histogramField": "Valeurs numériques pré-agrégées sous forme d'histogramme.", - "fieldUtils.fieldNameDescription.ipAddressField": "Adresses IPv4 et IPv6.", - "fieldUtils.fieldNameDescription.ipAddressRangeField": "Plage de valeurs IP prenant en charge les adresses IPv4 ou IPv6 (ou les 2).", - "fieldUtils.fieldNameDescription.keywordField": "Contenu structuré tel qu'un ID, une adresse e-mail, un nom d'hôte, un code de statut, ou une balise.", - "fieldUtils.fieldNameDescription.murmur3Field": "Champ qui calcule et stocke les hachages de valeurs.", - "fieldUtils.fieldNameDescription.nestedField": "Objet JSON qui conserve la relation entre ses sous-champs.", - "fieldUtils.fieldNameDescription.numberField": "Valeurs Long, Entier, Court, Octet, Double et Élément flottant.", - "fieldUtils.fieldNameDescription.pointField": "Points cartésiens arbitraires.", - "fieldUtils.fieldNameDescription.rankFeatureField": "Enregistre une fonctionnalité numérique pour augmenter le nombre de résultats au moment de la requête.", - "fieldUtils.fieldNameDescription.rankFeaturesField": "Enregistre des fonctionnalités numériques pour augmenter le nombre de résultats au moment de la requête.", - "fieldUtils.fieldNameDescription.recordField": "Nombre d'enregistrements.", - "fieldUtils.fieldNameDescription.shapeField": "Géométries cartésiennes arbitraires.", - "fieldUtils.fieldNameDescription.stringField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", - "fieldUtils.fieldNameDescription.textField": "Texte intégral tel que le corps d'un e-mail ou la description d'un produit.", - "fieldUtils.fieldNameDescription.unknownField": "Champ inconnu", - "fieldUtils.fieldNameDescription.versionField": "Versions des logiciels. Prend en charge les règles de priorité de la Gestion sémantique des versions.", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "Rechercher les noms de champs", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "Filtrer sur le champ", "unifiedFieldList.fieldPopover.deleteFieldLabel": "Supprimer le champ de la vue de données", @@ -16269,7 +16269,6 @@ "xpack.fleet.epm.packageDetails.apiReference.learnMoreLink": "En savoir plus", "xpack.fleet.epm.packageDetails.apiReference.streamsTitle": "Flux", "xpack.fleet.epm.packageDetails.apiReference.variableTableTitle": "Variables", - "xpack.fleet.epm.packageDetails.assets.assetsNotAvailableInCurrentSpace": "Cette intégration est installée, mais aucune ressource n’est disponible dans cet espace.", "xpack.fleet.epm.packageDetails.assets.assetsPermissionError": "Vous ne disposez pas d'autorisation pour récupérer l'objet enregistré Kibana pour cette intégration. Contactez votre administrateur.", "xpack.fleet.epm.packageDetails.assets.assetsPermissionErrorTitle": "Erreur d'autorisation", "xpack.fleet.epm.packageDetails.assets.deferredInstallationsDescription": "La ressource nécessite des autorisations supplémentaires.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 4749d310b7335..d078f535b6c99 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2441,6 +2441,33 @@ "fieldUtils.fieldNameIcons.textFieldAriaLabel": "テキスト", "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "不明なフィールド", "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "バージョン", + "fieldUtils.fieldNameDescription.binaryField": "Base64文字列としてエンコードされたバイナリ値", + "fieldUtils.fieldNameDescription.booleanField": "True および False 値。", + "fieldUtils.fieldNameDescription.conflictField": "フィールドには異なる型の値があります。[管理 > データビュー]で解決してください。", + "fieldUtils.fieldNameDescription.counterField": "0(ゼロ)に増加またはリセットのみされる数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", + "fieldUtils.fieldNameDescription.dateField": "日付文字列、または1/1/1970以降の秒またはミリ秒の数値。", + "fieldUtils.fieldNameDescription.dateRangeField": "日付値の範囲。", + "fieldUtils.fieldNameDescription.denseVectorField": "浮動小数点数値の密ベクトルを記録します。", + "fieldUtils.fieldNameDescription.flattenedField": "1つのフィールド値としてのJSONオブジェクト全体。", + "fieldUtils.fieldNameDescription.gaugeField": "増減可能な数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", + "fieldUtils.fieldNameDescription.geoPointField": "緯度および経度点。", + "fieldUtils.fieldNameDescription.geoShapeField": "多角形などの複雑な図形。", + "fieldUtils.fieldNameDescription.histogramField": "ヒストグラムの形式の集計された数値。", + "fieldUtils.fieldNameDescription.ipAddressField": "IPv4およびIPv6アドレス。", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "IPv4またはIPv6(または混合)のアドレスをサポートするIP値の範囲。", + "fieldUtils.fieldNameDescription.keywordField": "ID、電子メールアドレス、ホスト名、ステータスコード、タグなどの構造化されたコンテンツ。", + "fieldUtils.fieldNameDescription.murmur3Field": "値のハッシュタグを計算して格納するフィールド。", + "fieldUtils.fieldNameDescription.nestedField": "サブフィールド間の関係を保持するJSONオブジェクト。", + "fieldUtils.fieldNameDescription.numberField": "長整数、整数、短整数、バイト、倍精度浮動小数点数、浮動小数点数の値。", + "fieldUtils.fieldNameDescription.pointField": "任意の直交点。", + "fieldUtils.fieldNameDescription.rankFeatureField": "クエリ時のヒット数を増やすために、数値機能を記録します。", + "fieldUtils.fieldNameDescription.rankFeaturesField": "クエリ時のヒット数を増やすために、数値機能を記録します。", + "fieldUtils.fieldNameDescription.recordField": "レコード数。", + "fieldUtils.fieldNameDescription.shapeField": "任意の解析幾何。", + "fieldUtils.fieldNameDescription.stringField": "電子メール本文や製品説明などの全文テキスト。", + "fieldUtils.fieldNameDescription.textField": "電子メール本文や製品説明などの全文テキスト。", + "fieldUtils.fieldNameDescription.unknownField": "不明なフィールド", + "fieldUtils.fieldNameDescription.versionField": "ソフトウェアバージョン。「セマンティックバージョニング」優先度ルールをサポートします。", "unifiedDocViewer.docView.table.actions.label": "アクション", "unifiedDocViewer.docView.table.actions.open": "アクションを開く", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "このフィールドの1つ以上の値が長すぎるため、検索またはフィルタリングできません。", @@ -5661,33 +5688,6 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "試行対象:", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "このデータビューにはフィールドがありません。", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "選択したフィルターと一致するフィールドはありません。", - "fieldUtils.fieldNameDescription.binaryField": "Base64文字列としてエンコードされたバイナリ値", - "fieldUtils.fieldNameDescription.booleanField": "True および False 値。", - "fieldUtils.fieldNameDescription.conflictField": "フィールドには異なる型の値があります。[管理 > データビュー]で解決してください。", - "fieldUtils.fieldNameDescription.counterField": "0(ゼロ)に増加またはリセットのみされる数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", - "fieldUtils.fieldNameDescription.dateField": "日付文字列、または1/1/1970以降の秒またはミリ秒の数値。", - "fieldUtils.fieldNameDescription.dateRangeField": "日付値の範囲。", - "fieldUtils.fieldNameDescription.denseVectorField": "浮動小数点数値の密ベクトルを記録します。", - "fieldUtils.fieldNameDescription.flattenedField": "1つのフィールド値としてのJSONオブジェクト全体。", - "fieldUtils.fieldNameDescription.gaugeField": "増減可能な数値。数値およびaggregate_metric_doubleフィールドでのみ使用可能です。", - "fieldUtils.fieldNameDescription.geoPointField": "緯度および経度点。", - "fieldUtils.fieldNameDescription.geoShapeField": "多角形などの複雑な図形。", - "fieldUtils.fieldNameDescription.histogramField": "ヒストグラムの形式の集計された数値。", - "fieldUtils.fieldNameDescription.ipAddressField": "IPv4およびIPv6アドレス。", - "fieldUtils.fieldNameDescription.ipAddressRangeField": "IPv4またはIPv6(または混合)のアドレスをサポートするIP値の範囲。", - "fieldUtils.fieldNameDescription.keywordField": "ID、電子メールアドレス、ホスト名、ステータスコード、タグなどの構造化されたコンテンツ。", - "fieldUtils.fieldNameDescription.murmur3Field": "値のハッシュタグを計算して格納するフィールド。", - "fieldUtils.fieldNameDescription.nestedField": "サブフィールド間の関係を保持するJSONオブジェクト。", - "fieldUtils.fieldNameDescription.numberField": "長整数、整数、短整数、バイト、倍精度浮動小数点数、浮動小数点数の値。", - "fieldUtils.fieldNameDescription.pointField": "任意の直交点。", - "fieldUtils.fieldNameDescription.rankFeatureField": "クエリ時のヒット数を増やすために、数値機能を記録します。", - "fieldUtils.fieldNameDescription.rankFeaturesField": "クエリ時のヒット数を増やすために、数値機能を記録します。", - "fieldUtils.fieldNameDescription.recordField": "レコード数。", - "fieldUtils.fieldNameDescription.shapeField": "任意の解析幾何。", - "fieldUtils.fieldNameDescription.stringField": "電子メール本文や製品説明などの全文テキスト。", - "fieldUtils.fieldNameDescription.textField": "電子メール本文や製品説明などの全文テキスト。", - "fieldUtils.fieldNameDescription.unknownField": "不明なフィールド", - "fieldUtils.fieldNameDescription.versionField": "ソフトウェアバージョン。「セマンティックバージョニング」優先度ルールをサポートします。", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "検索フィールド名", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "フィールド表示のフィルター", "unifiedFieldList.fieldPopover.deleteFieldLabel": "データビューフィールドを削除", @@ -16283,7 +16283,6 @@ "xpack.fleet.epm.packageDetails.apiReference.learnMoreLink": "詳細", "xpack.fleet.epm.packageDetails.apiReference.streamsTitle": "ストリーム", "xpack.fleet.epm.packageDetails.apiReference.variableTableTitle": "変数", - "xpack.fleet.epm.packageDetails.assets.assetsNotAvailableInCurrentSpace": "この統合はインストールされますが、アセットはこのスペースで使用できません", "xpack.fleet.epm.packageDetails.assets.assetsPermissionError": "その統合では、Kibanaで保存されたオブジェクトを取得する権限がありません。管理者にお問い合わせください。", "xpack.fleet.epm.packageDetails.assets.assetsPermissionErrorTitle": "パーミッションエラー", "xpack.fleet.epm.packageDetails.assets.deferredInstallationsDescription": "アセットには追加の権限が必要です。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b46199b6b8919..3b8006085b1da 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2441,6 +2441,33 @@ "fieldUtils.fieldNameIcons.textFieldAriaLabel": "文本", "fieldUtils.fieldNameIcons.unknownFieldAriaLabel": "未知字段", "fieldUtils.fieldNameIcons.versionFieldAriaLabel": "版本", + "fieldUtils.fieldNameDescription.binaryField": "编码为 Base64 字符串的二进制值。", + "fieldUtils.fieldNameDescription.booleanField": "True 和 False 值。", + "fieldUtils.fieldNameDescription.conflictField": "字体具有不同类型的值。在“管理”>“数据视图”中解析。", + "fieldUtils.fieldNameDescription.counterField": "只会增大或重置为 0(零)的数字。仅适用于数字和 aggregate_metric_double 字段。", + "fieldUtils.fieldNameDescription.dateField": "日期字符串或 1/1/1970 以来的秒数或毫秒数。", + "fieldUtils.fieldNameDescription.dateRangeField": "日期值的范围。", + "fieldUtils.fieldNameDescription.denseVectorField": "记录浮点值的密集向量。", + "fieldUtils.fieldNameDescription.flattenedField": "整个 JSON 对象作为单一字段值。", + "fieldUtils.fieldNameDescription.gaugeField": "可以增大或减小的数字。仅适用于数字和 aggregate_metric_double 字段。", + "fieldUtils.fieldNameDescription.geoPointField": "纬度和经度点。", + "fieldUtils.fieldNameDescription.geoShapeField": "复杂形状,如多边形。", + "fieldUtils.fieldNameDescription.histogramField": "直方图形式的预聚合数字值。", + "fieldUtils.fieldNameDescription.ipAddressField": "IPv4 和 IPv6 地址。", + "fieldUtils.fieldNameDescription.ipAddressRangeField": "支持 IPv4 或 IPv6(或混合)地址的 IP 值的范围。", + "fieldUtils.fieldNameDescription.keywordField": "结构化内容,如 ID、电子邮件地址、主机名、状态代码或标签。", + "fieldUtils.fieldNameDescription.murmur3Field": "计算和存储值哈希的字段。", + "fieldUtils.fieldNameDescription.nestedField": "保留其子字段之间关系的 JSON 对象。", + "fieldUtils.fieldNameDescription.numberField": "长整型、整数、短整型、字节、双精度和浮点值。", + "fieldUtils.fieldNameDescription.pointField": "任意笛卡尔点。", + "fieldUtils.fieldNameDescription.rankFeatureField": "记录数字特征以提高查询时的命中数。", + "fieldUtils.fieldNameDescription.rankFeaturesField": "记录数字特征以提高查询时的命中数。", + "fieldUtils.fieldNameDescription.recordField": "记录计数。", + "fieldUtils.fieldNameDescription.shapeField": "任意笛卡尔几何形状。", + "fieldUtils.fieldNameDescription.stringField": "全文本,如电子邮件正文或产品描述。", + "fieldUtils.fieldNameDescription.textField": "全文本,如电子邮件正文或产品描述。", + "fieldUtils.fieldNameDescription.unknownField": "未知字段", + "fieldUtils.fieldNameDescription.versionField": "软件版本。支持“语义版本控制”优先规则。", "unifiedDocViewer.docView.table.actions.label": "操作", "unifiedDocViewer.docView.table.actions.open": "打开操作", "unifiedDocViewer.docView.table.ignored.multiAboveTooltip": "此字段中的一个或多个值过长,无法搜索或筛选。", @@ -5660,33 +5687,6 @@ "unifiedFieldList.fieldList.noFieldsCallout.noFields.tryText": "尝试:", "unifiedFieldList.fieldList.noFieldsCallout.noFieldsLabel": "在此数据视图中不存在任何字段。", "unifiedFieldList.fieldList.noFieldsCallout.noFilteredFieldsLabel": "没有字段匹配选定筛选。", - "fieldUtils.fieldNameDescription.binaryField": "编码为 Base64 字符串的二进制值。", - "fieldUtils.fieldNameDescription.booleanField": "True 和 False 值。", - "fieldUtils.fieldNameDescription.conflictField": "字体具有不同类型的值。在“管理”>“数据视图”中解析。", - "fieldUtils.fieldNameDescription.counterField": "只会增大或重置为 0(零)的数字。仅适用于数字和 aggregate_metric_double 字段。", - "fieldUtils.fieldNameDescription.dateField": "日期字符串或 1/1/1970 以来的秒数或毫秒数。", - "fieldUtils.fieldNameDescription.dateRangeField": "日期值的范围。", - "fieldUtils.fieldNameDescription.denseVectorField": "记录浮点值的密集向量。", - "fieldUtils.fieldNameDescription.flattenedField": "整个 JSON 对象作为单一字段值。", - "fieldUtils.fieldNameDescription.gaugeField": "可以增大或减小的数字。仅适用于数字和 aggregate_metric_double 字段。", - "fieldUtils.fieldNameDescription.geoPointField": "纬度和经度点。", - "fieldUtils.fieldNameDescription.geoShapeField": "复杂形状,如多边形。", - "fieldUtils.fieldNameDescription.histogramField": "直方图形式的预聚合数字值。", - "fieldUtils.fieldNameDescription.ipAddressField": "IPv4 和 IPv6 地址。", - "fieldUtils.fieldNameDescription.ipAddressRangeField": "支持 IPv4 或 IPv6(或混合)地址的 IP 值的范围。", - "fieldUtils.fieldNameDescription.keywordField": "结构化内容,如 ID、电子邮件地址、主机名、状态代码或标签。", - "fieldUtils.fieldNameDescription.murmur3Field": "计算和存储值哈希的字段。", - "fieldUtils.fieldNameDescription.nestedField": "保留其子字段之间关系的 JSON 对象。", - "fieldUtils.fieldNameDescription.numberField": "长整型、整数、短整型、字节、双精度和浮点值。", - "fieldUtils.fieldNameDescription.pointField": "任意笛卡尔点。", - "fieldUtils.fieldNameDescription.rankFeatureField": "记录数字特征以提高查询时的命中数。", - "fieldUtils.fieldNameDescription.rankFeaturesField": "记录数字特征以提高查询时的命中数。", - "fieldUtils.fieldNameDescription.recordField": "记录计数。", - "fieldUtils.fieldNameDescription.shapeField": "任意笛卡尔几何形状。", - "fieldUtils.fieldNameDescription.stringField": "全文本,如电子邮件正文或产品描述。", - "fieldUtils.fieldNameDescription.textField": "全文本,如电子邮件正文或产品描述。", - "fieldUtils.fieldNameDescription.unknownField": "未知字段", - "fieldUtils.fieldNameDescription.versionField": "软件版本。支持“语义版本控制”优先规则。", "unifiedFieldList.fieldNameSearch.filterByNameLabel": "搜索字段名称", "unifiedFieldList.fieldPopover.addExistsFilterLabel": "筛留存在的字段", "unifiedFieldList.fieldPopover.deleteFieldLabel": "删除数据视图字段", @@ -16283,7 +16283,6 @@ "xpack.fleet.epm.packageDetails.apiReference.learnMoreLink": "了解详情", "xpack.fleet.epm.packageDetails.apiReference.streamsTitle": "流计数", "xpack.fleet.epm.packageDetails.apiReference.variableTableTitle": "变量", - "xpack.fleet.epm.packageDetails.assets.assetsNotAvailableInCurrentSpace": "已安装此集成,但该工作区中没有资产可用", "xpack.fleet.epm.packageDetails.assets.assetsPermissionError": "您无权检索该集成的 Kibana 已保存对象。请联系您的管理员。", "xpack.fleet.epm.packageDetails.assets.assetsPermissionErrorTitle": "权限错误", "xpack.fleet.epm.packageDetails.assets.deferredInstallationsDescription": "资产需要其他权限。", From 10b054c728d5c374ab504fe6dae5fd64d7577ed9 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 5 Oct 2023 10:29:58 -0500 Subject: [PATCH 140/170] skip failing test suite (#168115) --- .../functional/apps/discover/group2/_data_grid_field_tokens.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/discover/group2/_data_grid_field_tokens.ts b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts index 272d224746f20..44e573d0dafa5 100644 --- a/test/functional/apps/discover/group2/_data_grid_field_tokens.ts +++ b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts @@ -49,7 +49,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); } - describe('discover data grid field tokens', function () { + // Failing: See https://github.com/elastic/kibana/issues/168115 + describe.skip('discover data grid field tokens', function () { before(async () => { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); From fe144d6dacf86118b7ecf0f9f0390a8147d56b84 Mon Sep 17 00:00:00 2001 From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com> Date: Thu, 5 Oct 2023 17:35:26 +0200 Subject: [PATCH 141/170] [Cases] unskip case view serverless tests (#168091) ## Summary fixes https://github.com/elastic/kibana/issues/166447 ## Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3357 ### 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 ### For maintainers - [x] 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) --- .../functional/test_suites/security/ftr/cases/view_case.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts index 4429c74040eaf..5ad615a4f97a9 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts @@ -29,8 +29,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCommonNavigation = getPageObject('svlCommonNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); - // FLAKY: https://github.com/elastic/kibana/issues/166447 - describe.skip('Case View', () => { + describe('Case View', () => { before(async () => { await svlCommonPage.login(); }); From 3dafb1e4dbbc7974ff7c8065170fac9b50c66e55 Mon Sep 17 00:00:00 2001 From: James Rodewig Date: Thu, 5 Oct 2023 11:41:34 -0400 Subject: [PATCH 142/170] [Serverless Search] Updating doc links (#168106) --- packages/kbn-doc-links/src/get_doc_links.ts | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 2065dd3d30735..9784908948f43 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -824,28 +824,28 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { elasticsearch: `${SEARCH_UI_DOCS}tutorials/elasticsearch`, }, serverlessClients: { - goApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}go-apis-references`, - goGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}go-apis`, + goApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}go-client-getting-started`, + goGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}go-client-getting-started`, httpApis: `${SERVERLESS_ELASTICSEARCH_DOCS}http-apis`, - httpApiReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}http-apis-references`, - jsApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-apis-references`, + httpApiReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}http-apis`, + jsApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-apis-getting-started`, jsGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-apis-getting-started`, - phpApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}php-apis-references`, + phpApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}php-apis-getting-started`, phpGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}php-apis-getting-started`, - pythonApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-references`, + pythonApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, pythonGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, - pythonReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-references`, - rubyApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-apis-references`, + pythonReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, + rubyApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-apis-getting-started`, rubyGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-apis-getting-started`, }, serverlessSearch: { - integrations: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations`, + integrations: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-your-data`, integrationsLogstash: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-logstash`, integrationsBeats: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-beats`, integrationsConnectorClient: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-connector-client`, - gettingStartedExplore: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started-explore`, - gettingStartedIngest: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started-ingest`, - gettingStartedSearch: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started-search`, + gettingStartedExplore: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#explore`, + gettingStartedIngest: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#ingest`, + gettingStartedSearch: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#search`, }, synthetics: { featureRoles: `${ELASTIC_WEBSITE_URL}guide/en/observability/${DOC_LINK_VERSION}/synthetics-feature-roles.html`, From 6301dc83843d2fad546a02edcef68ad9a6715937 Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 5 Oct 2023 18:28:46 +0200 Subject: [PATCH 143/170] [ftr] fix url check by excluding port (#168112) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Addressing MKI `commonPage.navigateToUrl()` failures when `actualUrl` contains port value. ``` ✖ fail: Serverless Common UI - Management Data View Management disables scripted fields Scripted fields tab is missing --   | │ Error: retry.try timeout: Error: expected https://bk-serverless-ftr-185-elasticsearch-e79c7a.kb.eu-west-1.aws.qa.elastic.cloud/app/management/kibana/dataViews.includes(https://bk-serverless-ftr-185-elasticsearch-e79c7a.kb.eu-west-1.aws.qa.elastic.cloud:443/app/management/kibana/dataViews) ``` Works both on MKI and local serverless run. --- test/functional/page_objects/common_page.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/functional/page_objects/common_page.ts b/test/functional/page_objects/common_page.ts index 61297aea12e4e..9e48ac1ea7e36 100644 --- a/test/functional/page_objects/common_page.ts +++ b/test/functional/page_objects/common_page.ts @@ -33,6 +33,12 @@ export class CommonPageObject extends FtrService { private readonly defaultTryTimeout = this.config.get('timeouts.try'); private readonly defaultFindTimeout = this.config.get('timeouts.find'); + private getUrlWithoutPort(urlStr: string) { + const url = new URL(urlStr); + url.port = ''; + return url.toString(); + } + /** * Logins to Kibana as default user and navigates to provided app * @param appUrl Kibana URL @@ -121,8 +127,13 @@ export class CommonPageObject extends FtrService { throw new Error(msg); } - if (ensureCurrentUrl && !currentUrl.includes(appUrl)) { - throw new Error(`expected ${currentUrl}.includes(${appUrl})`); + if (ensureCurrentUrl) { + const actualUrl = this.getUrlWithoutPort(currentUrl); + const expectedUrl = this.getUrlWithoutPort(appUrl); + + if (!actualUrl.includes(expectedUrl)) { + throw new Error(`expected ${actualUrl}.includes(${expectedUrl})`); + } } }); } From cee55e3b50fffa9e1237c389d030a5c25bdb3f6a Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 5 Oct 2023 13:01:26 -0400 Subject: [PATCH 144/170] fix(slo): use insert_zeros gap policy for historical summary calculation (#168044) --- .../server/services/slo/historical_summary_client.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugins/observability/server/services/slo/historical_summary_client.ts b/x-pack/plugins/observability/server/services/slo/historical_summary_client.ts index 2e582fd3eac84..41ff658c89de5 100644 --- a/x-pack/plugins/observability/server/services/slo/historical_summary_client.ts +++ b/x-pack/plugins/observability/server/services/slo/historical_summary_client.ts @@ -279,6 +279,7 @@ function generateSearchQuery( window: timeWindowDurationInDays * bucketsPerDay, shift: 1, script: 'MovingFunctions.sum(values)', + gap_policy: 'insert_zeros', }, }, cumulative_total: { @@ -287,6 +288,7 @@ function generateSearchQuery( window: timeWindowDurationInDays * bucketsPerDay, shift: 1, script: 'MovingFunctions.sum(values)', + gap_policy: 'insert_zeros', }, }, }, From e430a7f9fbf0e0aba15188d9470d0dee6727bf2a Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 5 Oct 2023 20:21:22 +0300 Subject: [PATCH 145/170] [ES|QL] Improves application messages (#168078) --- packages/kbn-es-query/src/es_query/es_aggregate_query.ts | 5 +++-- .../src/text_based_languages_editor.tsx | 2 +- .../public/dataview_picker/change_dataview.tsx | 6 ++++-- .../dataview_picker/text_languages_transition_modal.tsx | 4 ++-- .../public/query_string_input/query_bar_top_row.tsx | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/kbn-es-query/src/es_query/es_aggregate_query.ts b/packages/kbn-es-query/src/es_query/es_aggregate_query.ts index 76f7113f2a589..e6f8af0de02c3 100644 --- a/packages/kbn-es-query/src/es_query/es_aggregate_query.ts +++ b/packages/kbn-es-query/src/es_query/es_aggregate_query.ts @@ -28,8 +28,9 @@ export function getAggregateQueryMode(query: AggregateQuery): Language { return Object.keys(query)[0] as Language; } -export function getLanguageDisplayName(language: string): string { - return language === 'esql' ? 'es|ql' : language; +export function getLanguageDisplayName(language?: string): string { + const displayName = language && language === 'esql' ? 'es|ql' : language ?? 'es|ql'; + return displayName.toUpperCase(); } // retrieves the index pattern from the aggregate query for SQL diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index b84e459fd222d..f8dd803265523 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -580,7 +580,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ {documentationSections && ( { if (textBasedLanguage) { - setTriggerLabel(getLanguageDisplayName(textBasedLanguage).toUpperCase()); + setTriggerLabel(getLanguageDisplayName(textBasedLanguage)); } else { setTriggerLabel(trigger.label); } @@ -244,7 +244,9 @@ export function ChangeDataView({ { defaultMessage: "Switching data views removes the current {textBasedLanguage} query. Save this search to ensure you don't lose work.", - values: { textBasedLanguage }, + values: { + textBasedLanguage: getLanguageDisplayName(textBasedLanguage), + }, } )} > diff --git a/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx b/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx index c59599907456b..0ff475d6a344c 100644 --- a/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx +++ b/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx @@ -8,7 +8,7 @@ import React, { useState, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; - +import { getLanguageDisplayName } from '@kbn/es-query'; import { EuiModal, EuiModalBody, @@ -39,7 +39,7 @@ export default function TextBasedLanguagesTransitionModal({ setDismissModalChecked(e.target.checked); }, []); - const language = textBasedLanguage?.toUpperCase(); + const language = getLanguageDisplayName(textBasedLanguage); return ( setIsTextLangTransitionModalVisible(false)} style={{ width: 700 }}> diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index 0a20154b0d0b6..35a5770dfff41 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -90,7 +90,7 @@ const getWrapperWithTooltip = ( position="top" content={i18n.translate('unifiedSearch.query.queryBar.textBasedNonTimestampWarning', { defaultMessage: - 'Date range selection for {language} queries requires the presence of an @timestamp field in the dataset.', + 'Date range selection for {language} queries requires an @timestamp field in the dataset.', values: { language: displayName }, })} > From 335a751c00b2743d4e4adf53425f1fb45a54e883 Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Thu, 5 Oct 2023 13:59:19 -0400 Subject: [PATCH 146/170] Fixes rendering service config keys test (#167937) Closes #167142 Closes #157126 ## Summary Fortifies the rendering service tests by introducing a retry loop to get injected metadata after navigation. The `kbn-injected-metadata` tag that we're relying on in this test gets removed some time after navigation (e.g. to `.../render/core`). It appears that occasionally this test fails to read the tag before it is removed. Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3363 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../test_suites/core_plugins/rendering.ts | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 9c6d933f2bd25..09220cfeeacbd 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -31,6 +31,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { const deployment = getService('deployment'); const find = getService('find'); const testSubjects = getService('testSubjects'); + const retry = getService('retry'); const navigateTo = async (path: string) => await browser.navigateTo(`${deployment.getHostPort()}${path}`); @@ -47,7 +48,16 @@ export default function ({ getService }: PluginFunctionalProviderContext) { const getInjectedMetadata = () => browser.execute(() => { - return JSON.parse(document.querySelector('kbn-injected-metadata')!.getAttribute('data')!); + const injectedMetadata = document.querySelector('kbn-injected-metadata'); + // null/hasAttribute check and explicit error for better future troublehsooting + // (see https://github.com/elastic/kibana/issues/167142) + // The 'kbn-injected-metadata' tag that we're relying on here gets removed + // some time after navigation (e.g. to /render/core). It appears that + // occasionally this test fails to read the tag before it is removed. + if (!injectedMetadata?.hasAttribute('data')) { + throw new Error(`'kbn-injected-metadata.data' not found.`); + } + return JSON.parse(injectedMetadata.getAttribute('data')!); }); const getUserSettings = () => browser.execute(() => { @@ -61,11 +71,17 @@ export default function ({ getService }: PluginFunctionalProviderContext) { return window.__RENDERING_SESSION__; }); - // Failing: See https://github.com/elastic/kibana/issues/167142 - describe.skip('rendering service', () => { + describe('rendering service', () => { it('exposes plugin config settings to authenticated users', async () => { - await navigateTo('/render/core'); - const injectedMetadata = await getInjectedMetadata(); + // This retry loop to get the injectedMetadata is to overcome flakiness + // (see comment in getInjectedMetadata) + let injectedMetadata: Partial<{ uiPlugins: any }> = { uiPlugins: undefined }; + await retry.waitFor('injectedMetadata', async () => { + await navigateTo('/render/core'); + injectedMetadata = await getInjectedMetadata(); + return !!injectedMetadata; + }); + expect(injectedMetadata).to.not.be.empty(); expect(injectedMetadata.uiPlugins).to.not.be.empty(); @@ -317,12 +333,19 @@ export default function ({ getService }: PluginFunctionalProviderContext) { // abundantly clear when the test fails that (A) Kibana is exposing a new key, or (B) Kibana is no longer exposing a key. const extra = _.difference(actualExposedConfigKeys, expectedExposedConfigKeys).sort(); const missing = _.difference(expectedExposedConfigKeys, actualExposedConfigKeys).sort(); + expect({ extra, missing }).to.eql({ extra: [], missing: [] }, EXPOSED_CONFIG_SETTINGS_ERROR); }); it('exposes plugin config settings to unauthenticated users', async () => { - await navigateTo('/render/core?isAnonymousPage=true'); - const injectedMetadata = await getInjectedMetadata(); + // This retry loop to get the injectedMetadata is to overcome flakiness + // (see comment in getInjectedMetadata) + let injectedMetadata: Partial<{ uiPlugins: any }> = { uiPlugins: undefined }; + await retry.waitFor('injectedMetadata', async () => { + await navigateTo('/render/core?isAnonymousPage=true'); + injectedMetadata = await getInjectedMetadata(); + return !!injectedMetadata; + }); expect(injectedMetadata).to.not.be.empty(); expect(injectedMetadata.uiPlugins).to.not.be.empty(); From c57afb012b7dbb7cba525c14120ec238cb8c78c9 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Oct 2023 19:45:26 +0100 Subject: [PATCH 147/170] skip flaky suite (#163817) --- .../test/saved_object_tagging/functional/tests/bulk_actions.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/saved_object_tagging/functional/tests/bulk_actions.ts b/x-pack/test/saved_object_tagging/functional/tests/bulk_actions.ts index d4aef2d44856f..f75e51851528c 100644 --- a/x-pack/test/saved_object_tagging/functional/tests/bulk_actions.ts +++ b/x-pack/test/saved_object_tagging/functional/tests/bulk_actions.ts @@ -27,7 +27,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); }); - describe('bulk delete', () => { + // FLAKY: https://github.com/elastic/kibana/issues/163817 + describe.skip('bulk delete', () => { it('deletes multiple tags', async () => { const initialDisplayedTags = await tagManagementPage.getDisplayedTagNames(); await tagManagementPage.selectTagByName('tag-1'); From 9f1951de30becf0f1ca1307311f1886305ec6af0 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Thu, 5 Oct 2023 15:37:15 -0400 Subject: [PATCH 148/170] [Security solution] Avoid useless package policy update for set serverless flag (#168117) --- .../services/set_package_policy_flag.test.ts | 29 ++++++++++ .../services/set_package_policy_flag.ts | 58 ++++++++++++------- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts b/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts index 54a95ae68a1b7..fad1317af898b 100644 --- a/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts +++ b/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts @@ -82,6 +82,35 @@ describe('setEndpointPackagePolicyServerlessFlag', () => { ); }); + it('updates serverless flag for endpoint policies with the flag already set', async () => { + const packagePolicy1 = generatePackagePolicy( + policyFactory(undefined, undefined, undefined, undefined, undefined, true) + ); + const packagePolicy2 = generatePackagePolicy( + policyFactory(undefined, undefined, undefined, undefined, undefined, true) + ); + packagePolicyServiceMock.list.mockResolvedValue({ + items: [packagePolicy1, packagePolicy2], + page: 1, + perPage: SO_SEARCH_LIMIT, + total: 2, + }); + packagePolicyServiceMock.bulkCreate.mockImplementation(); + + await setEndpointPackagePolicyServerlessFlag( + soClientMock, + esClientMock, + packagePolicyServiceMock + ); + + expect(packagePolicyServiceMock.list).toBeCalledWith(soClientMock, { + page: 1, + perPage: SO_SEARCH_LIMIT, + kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${FLEET_ENDPOINT_PACKAGE}`, + }); + expect(packagePolicyServiceMock.bulkUpdate).not.toBeCalled(); + }); + it('batches properly when over perPage', async () => { packagePolicyServiceMock.list .mockResolvedValueOnce({ diff --git a/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.ts b/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.ts index 0c6191e8df706..8e41dba3502d1 100644 --- a/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.ts +++ b/x-pack/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.ts @@ -60,30 +60,44 @@ async function processBatch( return; } - const updatedEndpointPackages = endpointPackagesResult.items.map((endpointPackage) => ({ - ...endpointPackage, - inputs: endpointPackage.inputs.map((input) => { - const config = input?.config || {}; - const policy = config.policy || {}; - const policyValue = policy?.value || {}; - const meta = policyValue?.meta || {}; - return { - ...input, - config: { - ...config, - policy: { - ...policy, - value: { - ...policyValue, - meta: { - ...meta, - serverless: true, + const updatedEndpointPackages = endpointPackagesResult.items + .filter( + (endpointPackage) => + !( + endpointPackage?.inputs.every( + (input) => input.config?.policy?.value?.meta?.serverless ?? false + ) ?? false + ) + ) + .map((endpointPackage) => ({ + ...endpointPackage, + inputs: endpointPackage.inputs.map((input) => { + const config = input?.config || {}; + const policy = config.policy || {}; + const policyValue = policy?.value || {}; + const meta = policyValue?.meta || {}; + return { + ...input, + config: { + ...config, + policy: { + ...policy, + value: { + ...policyValue, + meta: { + ...meta, + serverless: true, + }, }, }, }, - }, - }; - }), - })); + }; + }), + })); + + if (updatedEndpointPackages.length === 0) { + return; + } + await packagePolicyService.bulkUpdate(soClient, esClient, updatedEndpointPackages); } From aab7f6e368b521ba17ccbaff20eb34930d1dc55f Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 5 Oct 2023 12:46:16 -0700 Subject: [PATCH 149/170] [DOCS] Remove a-data-source shared attribute (#167943) --- docs/api/saved-objects/bulk_create.asciidoc | 2 +- docs/api/saved-objects/delete.asciidoc | 2 +- docs/api/saved-objects/import.asciidoc | 6 +++--- docs/api/saved-objects/resolve_import_errors.asciidoc | 2 +- docs/api/spaces-management/copy_saved_objects.asciidoc | 6 +++--- .../resolve_copy_saved_objects_conflicts.asciidoc | 2 +- docs/user/dashboard/timelion.asciidoc | 2 +- docs/user/dashboard/vega.asciidoc | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/api/saved-objects/bulk_create.asciidoc b/docs/api/saved-objects/bulk_create.asciidoc index bde9b7861183f..73feb14acf483 100644 --- a/docs/api/saved-objects/bulk_create.asciidoc +++ b/docs/api/saved-objects/bulk_create.asciidoc @@ -80,7 +80,7 @@ Saved objects that are unable to persist are replaced with an error object. [[saved-objects-api-bulk-create-example]] ==== Example -Create {a-data-source} with the `my-pattern` ID, and a dashboard with the `my-dashboard` ID: +Create a {data-source} with the `my-pattern` ID, and a dashboard with the `my-dashboard` ID: [source,sh] -------------------------------------------------- diff --git a/docs/api/saved-objects/delete.asciidoc b/docs/api/saved-objects/delete.asciidoc index 565d684757495..6a335ae3323d0 100644 --- a/docs/api/saved-objects/delete.asciidoc +++ b/docs/api/saved-objects/delete.asciidoc @@ -51,7 +51,7 @@ TIP: Use this if you attempted to delete an object and received an HTTP 400 erro ==== Example -Delete {a-data-source} object with the `my-pattern` ID: +Delete a {data-source} object with the `my-pattern` ID: [source,sh] -------------------------------------------------- diff --git a/docs/api/saved-objects/import.asciidoc b/docs/api/saved-objects/import.asciidoc index 62ff1d040c5c0..85a03c8b1a3a3 100644 --- a/docs/api/saved-objects/import.asciidoc +++ b/docs/api/saved-objects/import.asciidoc @@ -107,7 +107,7 @@ to resolve errors, refer to the <>. [[saved-objects-api-import-example-1]] ===== Successful import with `createNewCopies` enabled -Import {a-data-source} and dashboard: +Import a {data-source} and dashboard: [source,sh] -------------------------------------------------- @@ -159,7 +159,7 @@ The result indicates a successful import, and both objects are created. Since th [[saved-objects-api-import-example-2]] ===== Successful import with `createNewCopies` disabled -Import {a-data-source} and dashboard: +Import a {data-source} and dashboard: [source,sh] -------------------------------------------------- @@ -208,7 +208,7 @@ The result indicates a successful import, and both objects are created. [[saved-objects-api-import-example-3]] ===== Failed import with conflict errors -Import {a-data-source}, visualization, *Canvas* workpad, and dashboard that include saved objects: +Import a {data-source}, visualization, *Canvas* workpad, and dashboard that include saved objects: [source,sh] -------------------------------------------------- diff --git a/docs/api/saved-objects/resolve_import_errors.asciidoc b/docs/api/saved-objects/resolve_import_errors.asciidoc index 7092ce20e01d3..f537eaa1d4de5 100644 --- a/docs/api/saved-objects/resolve_import_errors.asciidoc +++ b/docs/api/saved-objects/resolve_import_errors.asciidoc @@ -111,7 +111,7 @@ to the <>. This example builds upon the <>. -Resolve conflict errors for {a-data-source}, visualization, and *Canvas* workpad by overwriting the existing saved objects: +Resolve conflict errors for a {data-source}, visualization, and *Canvas* workpad by overwriting the existing saved objects: [source,sh] -------------------------------------------------- diff --git a/docs/api/spaces-management/copy_saved_objects.asciidoc b/docs/api/spaces-management/copy_saved_objects.asciidoc index 20c1cdd567e94..32f7480a39b87 100644 --- a/docs/api/spaces-management/copy_saved_objects.asciidoc +++ b/docs/api/spaces-management/copy_saved_objects.asciidoc @@ -140,7 +140,7 @@ refer to the <>. ===== Successful copy (with `createNewCopies` enabled) Copy a dashboard with the `my-dashboard` ID, including all references from the `default` space to the `marketing` space. In this example, -the dashboard has a reference to a visualization, and that has a reference to {a-data-source}: +the dashboard has a reference to a visualization, and that has a reference to a {data-source}: [source,sh] ---- @@ -204,7 +204,7 @@ The result indicates a successful copy, and all three objects are created. Since ===== Successful copy (with `createNewCopies` disabled) Copy a dashboard with the `my-dashboard` ID, including all references from the `default` space to the `marketing` space. In this example, -the dashboard has a reference to a visualization, and that has a reference to {a-data-source}: +the dashboard has a reference to a visualization, and that has a reference to a {data-source}: [source,sh] ---- @@ -418,7 +418,7 @@ API>>. ===== Failed copy (with missing reference errors) Copy a dashboard with the `my-dashboard` ID, including all references from the `default` space to the `marketing` space. In this example, -the dashboard has a reference to a visualization and a *Canvas* workpad, and the visualization has a reference to {a-data-source}: +the dashboard has a reference to a visualization and a *Canvas* workpad, and the visualization has a reference to a {data-source}: [source,sh] ---- diff --git a/docs/api/spaces-management/resolve_copy_saved_objects_conflicts.asciidoc b/docs/api/spaces-management/resolve_copy_saved_objects_conflicts.asciidoc index 9d26f9656d3f6..0ca5c72070a86 100644 --- a/docs/api/spaces-management/resolve_copy_saved_objects_conflicts.asciidoc +++ b/docs/api/spaces-management/resolve_copy_saved_objects_conflicts.asciidoc @@ -141,7 +141,7 @@ refer to the < This example builds upon the <>. -Resolve conflict errors for {a-data-source}, visualization, and *Canvas* workpad by overwriting the existing saved objects: +Resolve conflict errors for a {data-source}, visualization, and *Canvas* workpad by overwriting the existing saved objects: [source,sh] ---- diff --git a/docs/user/dashboard/timelion.asciidoc b/docs/user/dashboard/timelion.asciidoc index f491167acda0b..27222e6a40e84 100644 --- a/docs/user/dashboard/timelion.asciidoc +++ b/docs/user/dashboard/timelion.asciidoc @@ -32,7 +32,7 @@ The fist parameter of the .es function is the parameter q (for query), which is .es(*) .es(q=*) -Multiple parameters are separated by a comma. The .es function has another parameter called index, that can be used to specify {a-data-source} for this series, so the query won't be executed against all indexes (or whatever you changed the setting to). +Multiple parameters are separated by a comma. The .es function has another parameter called index, that can be used to specify a {data-source} for this series, so the query won't be executed against all indexes (or whatever you changed the setting to). .es(q=*, index=logstash-*) diff --git a/docs/user/dashboard/vega.asciidoc b/docs/user/dashboard/vega.asciidoc index 371b8b949c72a..2b2e624317a20 100644 --- a/docs/user/dashboard/vega.asciidoc +++ b/docs/user/dashboard/vega.asciidoc @@ -10,7 +10,7 @@ URL, or static data, and support < Date: Thu, 5 Oct 2023 16:28:14 -0400 Subject: [PATCH 150/170] =?UTF-8?q?Fixing=20Failing=20test:=20Serverless?= =?UTF-8?q?=20Security=20API=20Integration=20Tests=20-=20Common=20Group=20?= =?UTF-8?q?1.x-pack/test=5Fserverless/api=5Fintegration/test=5Fsuites/comm?= =?UTF-8?q?on/alerting/rules=C2=B7ts=20-=20Alerting=20APIs=20Alerting=20ru?= =?UTF-8?q?les=20"after=20each"=20hook=20for=20"should=20retry=20when=20ap?= =?UTF-8?q?propriate"=20(#168109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api_integration/test_suites/common/alerting/rules.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts index cfb133c17caf4..441dc06cab829 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts @@ -35,8 +35,7 @@ export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); const esDeleteAllIndices = getService('esDeleteAllIndices'); - // Failing: See https://github.com/elastic/kibana/issues/167665 - describe.skip('Alerting rules', () => { + describe('Alerting rules', () => { const RULE_TYPE_ID = '.es-query'; const ALERT_ACTION_INDEX = 'alert-action-es-query'; let actionId: string; @@ -53,6 +52,7 @@ export default function ({ getService }: FtrProviderContext) { .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ index: '.kibana-event-log-*', + conflicts: 'proceed', query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, }); await esDeleteAllIndices([ALERT_ACTION_INDEX]); From 914390e8981494eb2d54bb543f84b6f0feee62dd Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 5 Oct 2023 14:10:00 -0700 Subject: [PATCH 151/170] [DOCS] Automate case and server log connector screenshots in serverless Observability project (#167709) --- .buildkite/ftr_configs.yml | 1 + .../functional/services/index.ts | 2 + .../observability/config.screenshots.ts | 21 +++++++ .../screenshot_creation/index.ts | 14 +++++ .../response_ops_docs/cases/index.ts | 20 ++++++ .../response_ops_docs/cases/list_view.ts | 63 +++++++++++++++++++ .../response_ops_docs/connectors/index.ts | 20 ++++++ .../connectors/server_log_connector.ts | 39 ++++++++++++ .../response_ops_docs/index.ts | 31 +++++++++ .../test_suites/search/config.screenshots.ts | 2 +- .../stack_connectors/index.ts | 9 --- 11 files changed, 212 insertions(+), 10 deletions(-) create mode 100644 x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/list_view.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/server_log_connector.ts create mode 100644 x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/index.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 409d3f7927544..b9825675143a8 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -412,6 +412,7 @@ enabled: - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group1.ts - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group2.ts + - x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts - x-pack/test_serverless/functional/test_suites/search/config.ts - x-pack/test_serverless/functional/test_suites/search/config.examples.ts - x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts diff --git a/x-pack/test_serverless/functional/services/index.ts b/x-pack/test_serverless/functional/services/index.ts index da2688b22b645..125c93de2fcff 100644 --- a/x-pack/test_serverless/functional/services/index.ts +++ b/x-pack/test_serverless/functional/services/index.ts @@ -13,6 +13,7 @@ import { SvlObltNavigationServiceProvider } from './svl_oblt_navigation'; import { SvlSearchNavigationServiceProvider } from './svl_search_navigation'; import { SvlSecNavigationServiceProvider } from './svl_sec_navigation'; import { SvlCommonScreenshotsProvider } from './svl_common_screenshots'; +import { SvlCasesServiceProvider } from '../../api_integration/services/svl_cases'; import { MachineLearningProvider } from './ml'; export const services = { @@ -26,5 +27,6 @@ export const services = { svlSearchNavigation: SvlSearchNavigationServiceProvider, svlSecNavigation: SvlSecNavigationServiceProvider, svlCommonScreenshots: SvlCommonScreenshotsProvider, + svlCases: SvlCasesServiceProvider, svlMl: MachineLearningProvider, }; diff --git a/x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts b/x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts new file mode 100644 index 0000000000000..f9a06826cb755 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestConfig } from '../../config.base'; + +const enabledActionTypes = ['.index', '.server-log']; + +export default createTestConfig({ + serverlessProject: 'oblt', + testFiles: [require.resolve('./screenshot_creation')], + kbnServerArgs: [`--xpack.actions.enabledActionTypes=${JSON.stringify(enabledActionTypes)}`], + junit: { + reportName: 'Serverless Observability Screenshot Creation', + }, + + esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], +}); diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/index.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/index.ts new file mode 100644 index 0000000000000..8710906ab6408 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Screenshots - serverless observability UI', function () { + loadTestFile(require.resolve('./response_ops_docs')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/index.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/index.ts new file mode 100644 index 0000000000000..171215dfbf4d3 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: FtrProviderContext) { + const browser = getService('browser'); + + describe('observability cases', function () { + before(async () => { + await browser.setWindowSize(1920, 1080); + }); + + loadTestFile(require.resolve('./list_view')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/list_view.ts new file mode 100644 index 0000000000000..cc1d8b5f78995 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/cases/list_view.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { OBSERVABILITY_OWNER } from '@kbn/cases-plugin/common'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; +import { navigateToCasesApp } from '../../../../../../shared/lib/cases'; + +export default function ({ getPageObject, getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects(['common', 'header', 'svlCommonPage']); + const svlCases = getService('svlCases'); + const svlCommonScreenshots = getService('svlCommonScreenshots'); + const screenshotDirectories = ['response_ops_docs', 'observability_cases']; + const owner = OBSERVABILITY_OWNER; + + describe('list view', function () { + before(async () => { + await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Metrics inventory', + tags: ['IBM resilient'], + description: 'Test.', + owner, + }) + ); + + await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Logs threshold', + tags: ['jira'], + description: 'Test.', + owner, + }) + ); + + await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Monitor uptime', + tags: ['swimlane'], + description: 'Test.', + owner, + }) + ); + }); + + after(async () => { + await svlCases.api.deleteAllCaseItems(); + await pageObjects.svlCommonPage.forceLogout(); + }); + + beforeEach(async () => { + await pageObjects.svlCommonPage.login(); + }); + + it('cases list screenshot', async () => { + await navigateToCasesApp(getPageObject, getService, owner); + await svlCommonScreenshots.takeScreenshot('cases', screenshotDirectories, 1700, 1024); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/index.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/index.ts new file mode 100644 index 0000000000000..4e2f00e35e94d --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: FtrProviderContext) { + const browser = getService('browser'); + + describe('observability connectors', function () { + before(async () => { + await browser.setWindowSize(1920, 1080); + }); + + loadTestFile(require.resolve('./server_log_connector')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/server_log_connector.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/server_log_connector.ts new file mode 100644 index 0000000000000..7eed7d5cbbd26 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/connectors/server_log_connector.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const svlCommonScreenshots = getService('svlCommonScreenshots'); + const screenshotDirectories = ['response_ops_docs', 'observability_connectors']; + const pageObjects = getPageObjects(['common', 'header', 'svlCommonPage']); + const testSubjects = getService('testSubjects'); + + describe('server log connector', function () { + beforeEach(async () => { + await pageObjects.svlCommonPage.login(); + }); + + after(async () => { + await pageObjects.svlCommonPage.forceLogout(); + }); + + it('server log connector screenshots', async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.click('createFirstActionButton'); + await testSubjects.click(`.server-log-card`); + await testSubjects.setValue('nameInput', 'Server log test connector'); + await svlCommonScreenshots.takeScreenshot('serverlog-connector', screenshotDirectories); + const saveTestButton = await testSubjects.find('create-connector-flyout-save-test-btn'); + await saveTestButton.click(); + await svlCommonScreenshots.takeScreenshot('serverlog-params-test', screenshotDirectories); + const flyOutCancelButton = await testSubjects.find('euiFlyoutCloseButton'); + await flyOutCancelButton.click(); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/index.ts b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/index.ts new file mode 100644 index 0000000000000..10b33b5fc944d --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/screenshot_creation/response_ops_docs/index.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + const ml = getService('ml'); + + describe('response ops docs', function () { + this.tags(['responseOps']); + + before(async () => { + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.testResources.disableKibanaAnnouncements(); + await browser.setWindowSize(1920, 1080); + }); + + after(async () => { + await ml.testResources.resetKibanaTimeZone(); + await ml.testResources.resetKibanaAnnouncements(); + }); + + loadTestFile(require.resolve('./cases')); + loadTestFile(require.resolve('./connectors')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts index b0c951ef3295c..3a8966904b5c9 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts @@ -7,7 +7,7 @@ import { createTestConfig } from '../../config.base'; -const enabledActionTypes = ['.index', '.server-log']; +const enabledActionTypes = ['.index']; export default createTestConfig({ serverlessProject: 'es', diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts index f5f06e36d3ca7..e5d251e691183 100644 --- a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts @@ -18,14 +18,6 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { describe('stack connectors', function () { before(async () => { await browser.setWindowSize(1920, 1080); - await actions.api.createConnector({ - name: 'server-log-connector', - config: {}, - secrets: {}, - connectorTypeId: '.server-log', - additionalRequestHeaders: svlCommonApi.getInternalRequestHeader(), - }); - await es.indices.create({ index: testIndex, body: { @@ -58,6 +50,5 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { }); loadTestFile(require.resolve('./connectors')); - // loadTestFile(require.resolve('./connector_types')); }); } From 6f62f7b5a65be6d99e9b3a0092304966b7a7bbf4 Mon Sep 17 00:00:00 2001 From: Marco Vettorello Date: Thu, 5 Oct 2023 23:11:21 +0200 Subject: [PATCH 152/170] [lens] color mapping general ux fixes (#167997) ## Summary Fixes the following issues with the Color mapping MVP (see [here](https://github.com/elastic/kibana/issues/167506)): - refactored the color contrast check and the RGB text input to avoid popover flickering - replaced categorical/sequential icons for color scales - add dot to complete the tooltip sentence. - fix https://github.com/elastic/kibana/issues/167880 by adding a tooltip to the warning sign --- .../components/assignment/match.tsx | 17 ++- .../color_picker/palette_colors.tsx | 2 +- .../components/color_picker/rgb_picker.tsx | 137 +++++++++++++----- .../palette_selector/palette_selector.tsx | 6 +- .../palette_selector/scale_categorical.tsx | 17 --- .../palette_selector/scale_sequential.tsx | 20 --- 6 files changed, 115 insertions(+), 84 deletions(-) delete mode 100644 packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_categorical.tsx delete mode 100644 packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_sequential.tsx diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx index 43c5583191cf3..1f57e731e84c0 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { EuiComboBox, EuiFlexItem, EuiIcon } from '@elastic/eui'; +import { EuiComboBox, EuiFlexItem, EuiIcon, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { MULTI_FIELD_KEY_SEPARATOR } from '@kbn/data-plugin/common'; import { euiThemeVars } from '@kbn/ui-theme'; @@ -26,6 +26,13 @@ export const Match: React.FC<{ specialTokens: Map; assignmentValuesCounter: Map; }> = ({ index, rule, updateValue, editable, options, specialTokens, assignmentValuesCounter }) => { + const duplicateWarning = i18n.translate( + 'coloring.colorMapping.assignments.duplicateCategoryWarning', + { + defaultMessage: + 'This category has already been assigned a different color. Only the first matching assignment will be used.', + } + ); const selectedOptions = rule.type === 'auto' ? [] @@ -36,7 +43,9 @@ export const Match: React.FC<{ value: rule.values, append: (assignmentValuesCounter.get(rule.values) ?? 0) > 1 ? ( - + + + ) : undefined, }, ] @@ -47,7 +56,9 @@ export const Match: React.FC<{ value, append: (assignmentValuesCounter.get(value) ?? 0) > 1 ? ( - + + + ) : undefined, }; }); diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx index 3cabd99469a35..21aa18a49f9dc 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx @@ -94,7 +94,7 @@ export function PaletteColors({ position="bottom" content={i18n.translate('coloring.colorMapping.colorPicker.themeAwareColorsTooltip', { defaultMessage: - 'The provided neutral colors are theme-aware and will change appropriately when switching between light and dark themes', + 'The provided neutral colors are theme-aware and will change appropriately when switching between light and dark themes.', })} > diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/rgb_picker.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/rgb_picker.tsx index 63db994bb0d21..84f6786922f44 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/rgb_picker.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/rgb_picker.tsx @@ -6,12 +6,21 @@ * Side Public License, v 1. */ -import { EuiColorPicker, EuiFieldText, EuiFlexGroup, EuiFlexItem, EuiFormRow } from '@elastic/eui'; +import { + EuiColorPicker, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiIcon, + EuiToolTip, +} from '@elastic/eui'; import React, { useState } from 'react'; import useDebounce from 'react-use/lib/useDebounce'; import chromajs from 'chroma-js'; import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; import { ColorMapping } from '../../config'; import { hasEnoughContrast } from '../../color/color_math'; @@ -54,8 +63,8 @@ export function RGBPicker({ darkContrast === false ? 'dark' : undefined, ].filter(Boolean); - const isColorTextValid = chromajs.valid(colorTextInput); - const colorHasContrast = lightContrast && darkContrast; + const isColorTextInvalid = !chromajs.valid(colorTextInput); + const colorHasLowContrast = !lightContrast || !darkContrast; // debounce setting the color from the rgb picker by 500ms useDebounce( @@ -67,6 +76,16 @@ export function RGBPicker({ 500, [color, customColorMappingColor] ); + const invalidColor = isColorTextInvalid + ? euiThemeVars.euiColorDanger + : colorHasLowContrast + ? euiThemeVars.euiColorWarning + : ''; + const invalidColorText = isColorTextInvalid + ? euiThemeVars.euiColorDangerText + : colorHasLowContrast + ? euiThemeVars.euiColorWarningText + : ''; return ( @@ -86,56 +105,96 @@ export function RGBPicker({
    - 1 ? 's' : '' - }` - : undefined - } - > - { - const textColor = e.currentTarget.value; - setColorTextInput(textColor); - if (chromajs.valid(textColor)) { - setCustomColorMappingColor({ - type: 'colorCode', - colorCode: chromajs(textColor).hex(), - }); - } - }} - aria-label="hex color input" - /> + + + + { + const textColor = e.currentTarget.value; + setColorTextInput(textColor); + if (chromajs.valid(textColor)) { + setCustomColorMappingColor({ + type: 'colorCode', + colorCode: chromajs(textColor).hex(), + }); + } + }} + aria-label={i18n.translate( + 'coloring.colorMapping.colorPicker.hexColorinputAriaLabel', + { + defaultMessage: 'hex color input', + } + )} + /> + + {(isColorTextInvalid || colorHasLowContrast) && ( +
    + + + +
    + )} +
    diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/palette_selector.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/palette_selector.tsx index a15bdca26ee1c..c9fab3526a786 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/palette_selector.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/palette_selector.tsx @@ -17,8 +17,6 @@ import { EuiFormRow, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ScaleCategoricalIcon } from './scale_categorical'; -import { ScaleSequentialIcon } from './scale_sequential'; import { RootState, updatePalette } from '../../state/color_mapping'; import { ColorMapping } from '../../config'; @@ -228,14 +226,14 @@ export function PaletteSelector({ label: i18n.translate('coloring.colorMapping.paletteSelector.categoricalLabel', { defaultMessage: `Categorical`, }), - iconType: ScaleCategoricalIcon, + iconType: 'palette', }, { id: `gradient`, label: i18n.translate('coloring.colorMapping.paletteSelector.sequentialLabel', { defaultMessage: `Sequential`, }), - iconType: ScaleSequentialIcon, + iconType: 'gradient', }, ]} isFullWidth diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_categorical.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_categorical.tsx deleted file mode 100644 index f71ed74485365..0000000000000 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_categorical.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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'; - -export function ScaleCategoricalIcon() { - return ( - - - - - ); -} diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_sequential.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_sequential.tsx deleted file mode 100644 index ec245f471f307..0000000000000 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/palette_selector/scale_sequential.tsx +++ /dev/null @@ -1,20 +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'; - -export function ScaleSequentialIcon() { - return ( - - - - ); -} From 0c71076f92de0951fc66c62be69c68735ada7949 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Thu, 5 Oct 2023 14:40:59 -0700 Subject: [PATCH 153/170] [Cloud Security] Add Fields selector to the CloudSecurityDataTable (#167844) Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: @Omolola-Akinleye --- .../additional_controls.tsx | 74 ++++++ .../cloud_security_data_table.tsx | 89 +++---- .../fields_selector.test.tsx | 69 ++++++ .../fields_selector.tsx | 219 ++++++++++++++++++ .../cloud_security_data_table/use_styles.ts | 3 + .../latest_findings_container.tsx | 6 +- .../configurations/layout/findings_layout.tsx | 2 +- .../pages/vulnerabilities/hooks/use_styles.ts | 3 + .../pages/vulnerabilities/vulnerabilities.tsx | 119 +++++----- 9 files changed, 483 insertions(+), 101 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx new file mode 100644 index 0000000000000..61a85e9993ecf --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; +import { type DataView } from '@kbn/data-views-plugin/common'; +import numeral from '@elastic/numeral'; +import { FieldsSelectorModal } from './fields_selector'; +import { FindingsGroupBySelector } from '../../pages/configurations/layout/findings_group_by_selector'; +import { useStyles } from './use_styles'; + +const formatNumber = (value: number) => { + return value < 1000 ? value : numeral(value).format('0.0a'); +}; + +export const AdditionalControls = ({ + total, + title, + dataView, + columns, + onAddColumn, + onRemoveColumn, +}: { + total: number; + title: string; + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; +}) => { + const styles = useStyles(); + + const [isFieldSelectorModalVisible, setIsFieldSelectorModalVisible] = useState(false); + + const closeModal = () => setIsFieldSelectorModalVisible(false); + const showModal = () => setIsFieldSelectorModalVisible(true); + + return ( + <> + {isFieldSelectorModalVisible && ( + + )} + + {`${formatNumber(total)} ${title}`} + + + + {i18n.translate('xpack.csp.dataTable.fields', { + defaultMessage: 'Fields', + })} + + + + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx index 2318a16f2efbb..12afa013aed18 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx @@ -15,32 +15,23 @@ import { SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; import { DataTableRecord } from '@kbn/discover-utils/types'; -import { - EuiDataGridCellValueElementProps, - EuiDataGridStyle, - EuiFlexItem, - EuiProgress, -} from '@elastic/eui'; +import { EuiDataGridCellValueElementProps, EuiDataGridStyle, EuiProgress } from '@elastic/eui'; import { AddFieldFilterHandler } from '@kbn/unified-field-list'; import { generateFilters } from '@kbn/data-plugin/public'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import useLocalStorage from 'react-use/lib/useLocalStorage'; -import numeral from '@elastic/numeral'; import { useKibana } from '../../common/hooks/use_kibana'; import { CloudPostureTableResult } from '../../common/hooks/use_cloud_posture_table'; -import { FindingsGroupBySelector } from '../../pages/configurations/layout/findings_group_by_selector'; import { EmptyState } from '../empty_state'; import { MAX_FINDINGS_TO_LOAD } from '../../common/constants'; import { useStyles } from './use_styles'; +import { AdditionalControls } from './additional_controls'; export interface CloudSecurityDefaultColumn { id: string; + width?: number; } -const formatNumber = (value: number) => { - return value < 1000 ? value : numeral(value).format('0.0a'); -}; - const gridStyle: EuiDataGridStyle = { border: 'horizontal', cellPadding: 'l', @@ -50,6 +41,9 @@ const gridStyle: EuiDataGridStyle = { const useNewFieldsApi = true; +// Hide Checkbox, enable open details Flyout +const controlColumnIds = ['openDetails']; + interface CloudSecurityDataGridProps { dataView: DataView; isLoading: boolean; @@ -113,7 +107,8 @@ export const CloudSecurityDataTable = ({ `${columnsLocalStorageKey}:settings`, { columns: defaultColumns.reduce((prev, curr) => { - const newColumn = { [curr.id]: {} }; + const columnDefaultSettings = curr.width ? { width: curr.width } : {}; + const newColumn = { [curr.id]: columnDefaultSettings }; return { ...prev, ...newColumn }; }, {} as UnifiedDataTableSettings['columns']), } @@ -153,7 +148,12 @@ export const CloudSecurityDataTable = ({ dataViewFieldEditor, }; - const { columns: currentColumns, onSetColumns } = useColumns({ + const { + columns: currentColumns, + onSetColumns, + onAddColumn, + onRemoveColumn, + } = useColumns({ capabilities, defaultOrder: uiSettings.get(SORT_DEFAULT_ORDER_SETTING), dataView, @@ -205,25 +205,39 @@ export const CloudSecurityDataTable = ({ return ; } + const externalAdditionalControls = ( + + ); + + const dataTableStyle = { + // Change the height of the grid to fit the page + // If there are filters, leave space for the filter bar + // Todo: Replace this component with EuiAutoSizer + height: `calc(100vh - ${filters.length > 0 ? 443 : 403}px)`, + }; + + const rowHeightState = + uiSettings.get(ROW_HEIGHT_OPTION) === -1 ? 0 : uiSettings.get(ROW_HEIGHT_OPTION); + + const loadingStyle = { + opacity: isLoading ? 1 : 0, + }; + return (
    0 ? 454 : 414}px)`, - }} + style={dataTableStyle} > - + } + externalAdditionalControls={externalAdditionalControls} gridStyleOverride={gridStyle} + rowLineHeightOverride="24px" + controlColumnIds={controlColumnIds} />
    ); }; - -const AdditionalControls = ({ total, title }: { total: number; title: string }) => { - const styles = useStyles(); - return ( - <> - - {`${formatNumber(total)} ${title}`} - - - - - - ); -}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx new file mode 100644 index 0000000000000..85d00612651eb --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import { FieldsSelectorTable, FieldsSelectorCommonProps } from './fields_selector'; +import { TestProvider } from '../../test/test_provider'; + +const mockDataView = { + fields: { + getAll: () => [ + { id: 'field1', name: 'field1', customLabel: 'Label 1', visualizable: true }, + { id: 'field2', name: 'field2', customLabel: 'Label 2', visualizable: true }, + ], + }, +} as any; + +const renderFieldsTable = (props: Partial = {}) => { + const defaultProps: FieldsSelectorCommonProps = { + dataView: mockDataView, + columns: [], + onAddColumn: jest.fn(), + onRemoveColumn: jest.fn(), + }; + + return render( + + + + ); +}; + +describe('FieldsSelectorTable', () => { + it('renders the table with data correctly', () => { + const { getByText } = renderFieldsTable(); + + expect(getByText('Label 1')).toBeInTheDocument(); + expect(getByText('Label 2')).toBeInTheDocument(); + }); + + it('calls onAddColumn when a checkbox is checked', () => { + const onAddColumn = jest.fn(); + const { getAllByRole } = renderFieldsTable({ + onAddColumn, + }); + + const checkbox = getAllByRole('checkbox')[0]; + fireEvent.click(checkbox); + + expect(onAddColumn).toHaveBeenCalledWith('field1'); + }); + + it('calls onRemoveColumn when a checkbox is unchecked', () => { + const onRemoveColumn = jest.fn(); + const { getAllByRole } = renderFieldsTable({ + columns: ['field1', 'field2'], + onRemoveColumn, + }); + + const checkbox = getAllByRole('checkbox')[1]; + fireEvent.click(checkbox); + + expect(onRemoveColumn).toHaveBeenCalledWith('field2'); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx new file mode 100644 index 0000000000000..750e2eb8d8448 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx @@ -0,0 +1,219 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useState, useMemo } from 'react'; +import { + EuiBasicTableColumn, + EuiButton, + EuiCheckbox, + EuiFlexGroup, + EuiFlexItem, + EuiInMemoryTable, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, + EuiSearchBarProps, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { type DataView } from '@kbn/data-views-plugin/common'; + +interface Field { + id: string; + name: string; + displayName: string; +} + +export interface FieldsSelectorCommonProps { + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; +} + +const ACTION_COLUMN_WIDTH = '24px'; +const defaultSorting = { + sort: { + field: 'name', + direction: 'asc', + }, +} as const; + +export const FieldsSelectorTable = ({ + title, + dataView, + columns, + onAddColumn, + onRemoveColumn, +}: FieldsSelectorCommonProps & { + title: string; +}) => { + const dataViewFields = useMemo(() => { + return dataView.fields + .getAll() + .filter((field) => { + return field.name !== '@timestamp' && field.name !== '_index' && field.visualizable; + }) + .map((field) => ({ + id: field.name, + name: field.name, + displayName: field.customLabel || '', + })); + }, [dataView.fields]); + + const [fields, setFields] = useState(dataViewFields); + + let debounceTimeoutId: ReturnType; + + const onQueryChange: EuiSearchBarProps['onChange'] = ({ query }) => { + clearTimeout(debounceTimeoutId); + + debounceTimeoutId = setTimeout(() => { + const filteredItems = dataViewFields.filter((field) => { + const normalizedName = `${field.name} ${field.displayName}`.toLowerCase(); + const normalizedQuery = query?.text.toLowerCase() || ''; + return normalizedName.indexOf(normalizedQuery) !== -1; + }); + + setFields(filteredItems); + }, 300); + }; + + const [fieldsSelected, setFieldsSelected] = useState(columns); + + const tableColumns: Array> = [ + { + field: 'action', + name: '', + width: ACTION_COLUMN_WIDTH, + sortable: false, + render: (_, { id }: Field) => { + return ( + { + const isChecked = e.target.checked; + setFieldsSelected( + isChecked ? [...fieldsSelected, id] : fieldsSelected.filter((f) => f !== id) + ); + return isChecked ? onAddColumn(id) : onRemoveColumn(id); + }} + /> + ); + }, + }, + { + field: 'name', + name: i18n.translate('xpack.csp.dataTable.fieldsModalName', { + defaultMessage: 'Name', + }), + sortable: true, + }, + { + field: 'displayName', + name: i18n.translate('xpack.csp.dataTable.fieldsModalCustomLabel', { + defaultMessage: 'Custom Label', + }), + sortable: (field: Field) => field.displayName.toLowerCase(), + }, + ]; + + const error = useMemo(() => { + if (!dataView || dataView.fields.length === 0) { + return i18n.translate('xpack.csp.dataTable.fieldsModalError', { + defaultMessage: 'No fields found in the data view', + }); + } + return ''; + }, [dataView]); + + const search: EuiSearchBarProps = { + onChange: onQueryChange, + box: { + incremental: true, + placeholder: i18n.translate('xpack.csp.dataTable.fieldsModalSearch', { + defaultMessage: 'Search field name', + }), + }, + }; + + const tableHeader = useMemo(() => { + const totalFields = fields.length; + return ( + + + + {' '} + {totalFields}{' '} + + + + + ); + }, [fields.length]); + + return ( + + ); +}; + +export const FieldsSelectorModal = ({ + closeModal, + dataView, + columns, + onAddColumn, + onRemoveColumn, +}: FieldsSelectorCommonProps & { + closeModal: () => void; +}) => { + const title = i18n.translate('xpack.csp.dataTable.fieldsModalTitle', { + defaultMessage: 'Fields', + }); + + return ( + + + {title} + + + + + + + Close + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts index 200ea5dbe7330..b3b0fa1b172b1 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts @@ -57,6 +57,9 @@ export const useStyles = () => { & .cspDataTableTotal { font-size: ${euiTheme.size.m}; font-weight: ${euiTheme.font.weight.bold}; + border-right: ${euiTheme.border.thin}; + margin-right: ${euiTheme.size.s}; + padding-right: ${euiTheme.size.m}; } & .euiDataGrid__rightControls { display: none; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx index 049010126837c..9abae7af4a211 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx @@ -43,7 +43,7 @@ const getDefaultQuery = ({ }); const defaultColumns: CloudSecurityDefaultColumn[] = [ - { id: 'result.evaluation' }, + { id: 'result.evaluation', width: 80 }, { id: 'resource.id' }, { id: 'resource.name' }, { id: 'resource.sub_type' }, @@ -88,7 +88,7 @@ const flyoutComponent = (row: DataTableRecord, onCloseFlyout: () => void): JSX.E ); }; -const columnsLocalStorageKey = 'cloudSecurityPostureLatestFindingsColumns'; +const columnsLocalStorageKey = 'cloudPosture:latestFindings:columns'; const title = i18n.translate('xpack.csp.findings.latestFindings.tableRowTypeLabel', { defaultMessage: 'Findings', @@ -162,7 +162,7 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { failed={failed} /> )} - + ( <> - + { `; const gridStyle = css` + & .euiDataGrid__content { + background: transparent; + } & .euiDataGridHeaderCell__icon { display: none; } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx index 6c1aa59cfab4c..1e261204279cc 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities.tsx @@ -290,6 +290,14 @@ const VulnerabilitiesDataGrid = ({ return ; } + const dataTableStyle = { + // Change the height of the grid to fit the page + // If there are filters, leave space for the filter bar + // Todo: Replace this component with EuiAutoSizer + height: `calc(100vh - ${urlQuery.filters.length > 0 ? 403 : 363}px)`, + minHeight: 400, + }; + return ( <> - - - {i18n.translate('xpack.csp.vulnerabilities.totalVulnerabilities', { - defaultMessage: - '{total, plural, one {# Vulnerability} other {# Vulnerabilities}}', - values: { total: data?.total }, - })} - - +
    + + + {i18n.translate('xpack.csp.vulnerabilities.totalVulnerabilities', { + defaultMessage: + '{total, plural, one {# Vulnerability} other {# Vulnerabilities}}', + values: { total: data?.total }, + })} + + + ), + }, + right: ( + + + ), }, - right: ( - - - - ), - }, - }} - gridStyle={{ - border: 'horizontal', - cellPadding: 'l', - stripes: false, - rowHover: 'none', - header: 'underline', - }} - renderCellValue={renderCellValue} - inMemory={{ level: 'enhancements' }} - sorting={{ columns: sort, onSort: onSortHandler }} - pagination={{ - pageIndex, - pageSize, - pageSizeOptions: [10, 25, 100], - onChangeItemsPerPage, - onChangePage, - }} - /> - {isLastLimitedPage && } + }} + gridStyle={{ + border: 'horizontal', + cellPadding: 'l', + stripes: false, + rowHover: 'none', + header: 'underline', + }} + renderCellValue={renderCellValue} + inMemory={{ level: 'enhancements' }} + sorting={{ columns: sort, onSort: onSortHandler }} + pagination={{ + pageIndex, + pageSize, + pageSizeOptions: [10, 25, 100], + onChangeItemsPerPage, + onChangePage, + }} + virtualizationOptions={{ + overscanRowCount: 20, + }} + /> + {isLastLimitedPage && } +
    {showVulnerabilityFlyout && selectedVulnerability && ( Date: Thu, 5 Oct 2023 15:25:33 -0700 Subject: [PATCH 154/170] [Security Solution] Add Standalone Discover to Security Navigation (#168144) Resolves https://github.com/elastic/security-team/issues/7724 Included changes: - added discover link to security navigation - removed discover tab from Timeline --- .../components/timeline/tabs_content/index.tsx | 11 ----------- .../public/navigation/links/constants.ts | 2 ++ .../public/navigation/links/nav.links.test.ts | 9 +++++++++ .../public/navigation/links/nav_links.ts | 4 ++++ .../navigation/links/sections/discover_links.ts | 15 +++++++++++++++ .../links/sections/discover_translations.ts | 15 +++++++++++++++ .../navigation/side_navigation/categories.ts | 2 +- .../timelines/discover/discover_state.cy.ts | 3 ++- .../discover_timeline_state_integration.cy.ts | 3 ++- .../timelines/discover/search_filter.cy.ts | 3 ++- 10 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_links.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_translations.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx index 0f6a3fad1eb66..71c41b5dd5c9f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx @@ -88,8 +88,6 @@ const GraphTab = tabWithSuspense(lazy(() => import('../graph_tab_content'))); const NotesTab = tabWithSuspense(lazy(() => import('../notes_tab_content'))); const PinnedTab = tabWithSuspense(lazy(() => import('../pinned_tab_content'))); const SessionTab = tabWithSuspense(lazy(() => import('../session_tab_content'))); -const DiscoverTab = tabWithSuspense(lazy(() => import('../discover_tab_content'))); - interface BasicTimelineTab { renderCellValue: (props: CellValueElementProps) => React.ReactNode; rowRenderers: RowRenderer[]; @@ -134,7 +132,6 @@ const ActiveTimelineTab = memo( setConversationId, showTimeline, }) => { - const isDiscoverInTimelineEnabled = useIsExperimentalFeatureEnabled('discoverInTimeline'); const { hasAssistantPrivilege } = useAssistantAvailability(); const getTab = useCallback( (tab: TimelineTabs) => { @@ -231,14 +228,6 @@ const ActiveTimelineTab = memo( )} )} - {isDiscoverInTimelineEnabled && ( - - - - )} ); } diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts index 565b2d2c97c80..dca89a4a00111 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts @@ -30,6 +30,8 @@ export const SecurityPagePath = { * The path should not be used for links displayed in the main left navigation, since highlighting won't work. **/ export enum ExternalPageName { + // Discover + discover = 'discover:', // Osquery osquery = 'osquery:', // Analytics diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts index 0a20899462c20..d06b28df01955 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav.links.test.ts @@ -57,6 +57,11 @@ const projectLinkDevTools: ProjectNavigationLink = { title: 'Dev tools', }; +const projectLinkDiscover: ProjectNavigationLink = { + id: ExternalPageName.discover, + title: 'Discover', +}; + const chromeNavLink1: ChromeNavLink = { id: `${APP_UI_ID}:${link1.id}`, title: link1.title, @@ -145,6 +150,7 @@ describe('getProjectNavLinks', () => { link1, link2, { ...linkMlLanding, categories: mlNavCategories, links: mlNavLinks }, + projectLinkDiscover, projectLinkDevTools, ]); }); @@ -169,6 +175,7 @@ describe('getProjectNavLinks', () => { expect(value).toEqual([ link1, { ...linkAssets, links: [...assetsNavLinks, link2] }, + projectLinkDiscover, projectLinkDevTools, ]); }); @@ -193,6 +200,7 @@ describe('getProjectNavLinks', () => { expect(value).toEqual([ link1, { ...linkInvestigations, links: [link2, ...investigationsNavLinks] }, + projectLinkDiscover, projectLinkDevTools, ]); }); @@ -226,6 +234,7 @@ describe('getProjectNavLinks', () => { categories: projectSettingsNavCategories, links: [...expectedProjectSettingsNavLinks, link2], }, + projectLinkDiscover, projectLinkDevTools, ]); }); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts index 2da3279562191..76f4e752af6c5 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/nav_links.ts @@ -18,6 +18,7 @@ import { projectSettingsNavLinks, } from './sections/project_settings_links'; import { devToolsNavLink } from './sections/dev_tools_links'; +import { discoverNavLink } from './sections/discover_links'; import type { ProjectNavigationLink } from './types'; import { getCloudLinkKey, getCloudUrl, getNavLinkIdFromProjectPageName, isCloudLink } from './util'; import { investigationsNavLinks } from './sections/investigations_links'; @@ -55,6 +56,9 @@ const processNavLinks = ( ): ProjectNavigationLink[] => { const projectNavLinks: ProjectNavigationLink[] = [...securityNavLinks]; + // Discover. just pushing it + projectNavLinks.push(discoverNavLink); + // Investigations. injecting external sub-links and categories definition to the landing const investigationsLinkIndex = projectNavLinks.findIndex( ({ id }) => id === SecurityPageName.investigations diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_links.ts new file mode 100644 index 0000000000000..8c0bf26ec2d12 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_links.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ExternalPageName } from '../constants'; +import type { ProjectNavigationLink } from '../types'; +import { DISCOVER_TITLE } from './discover_translations'; + +export const discoverNavLink: ProjectNavigationLink = { + id: ExternalPageName.discover, + title: DISCOVER_TITLE, +}; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_translations.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_translations.ts new file mode 100644 index 0000000000000..0c1212c187aa2 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/discover_translations.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const DISCOVER_TITLE = i18n.translate( + 'xpack.securitySolutionServerless.navLinks.discover.title', + { + defaultMessage: 'Discover', + } +); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/side_navigation/categories.ts b/x-pack/plugins/security_solution_serverless/public/navigation/side_navigation/categories.ts index ebefe9b77a70b..e7c9057d950ff 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/side_navigation/categories.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/side_navigation/categories.ts @@ -15,7 +15,7 @@ import { ExternalPageName } from '../links/constants'; export const CATEGORIES: SeparatorLinkCategory[] = [ { type: LinkCategoryType.separator, - linkIds: [SecurityPageName.dashboards], + linkIds: [ExternalPageName.discover, SecurityPageName.dashboards], }, { type: LinkCategoryType.separator, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts index 7d438791c3f1b..06c934083cd88 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts @@ -33,7 +33,8 @@ const INITIAL_END_DATE = 'Jan 19, 2024 @ 20:33:29.186'; const DEFAULT_ESQL_QUERY = 'from .alerts-security.alerts-default,apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-* | limit 10'; -describe( +// TODO: reuse or remove this tests when ESQL tab will be added +describe.skip( 'Discover State', { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts index 6e1289f9f8450..71b268e090b56 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts @@ -60,7 +60,8 @@ const TIMELINE_RESPONSE_SAVED_OBJECT_ID_PATH = 'response.body.data.persistTimeline.timeline.savedObjectId'; const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; -describe( +// TODO: reuse or remove this tests when ESQL tab will be added +describe.skip( 'Discover Timeline State Integration', { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts index 42375aeee5e2e..cfe3ca421de36 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts @@ -34,7 +34,8 @@ const NEW_START_DATE = 'Jan 18, 2023 @ 20:33:29.186'; const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; // Failing: See https://github.com/elastic/kibana/issues/167186 -describe( +// TODO: reuse or remove this tests when ESQL tab will be added +describe.skip( 'Basic discover search and filter operations', { env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, From d96d08d59c148979e262ce434319d4909a9febef Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 6 Oct 2023 01:26:24 -0400 Subject: [PATCH 155/170] [api-docs] 2023-10-06 Daily api_docs build (#168175) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/482 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- 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.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.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- 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.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 6 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- 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.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.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- 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_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_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.devdocs.json | 4 + api_docs/kbn_analytics_client.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_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_code_editor_mocks.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 +- ...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 +- ...elasticsearch_server_internal.devdocs.json | 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 +- 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_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 | 65 ++- 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.devdocs.json | 112 +--- api_docs/kbn_discover_utils.mdx | 4 +- api_docs/kbn_doc_links.devdocs.json | 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_assistant.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 | 6 +- api_docs/kbn_es_query.mdx | 2 +- 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.devdocs.json | 504 ++++++++++++++++++ api_docs/kbn_field_utils.mdx | 39 ++ 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_generate_csv_types.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.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_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 +- 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 +- ..._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_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.mdx | 2 +- api_docs/kbn_search_response_warnings.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 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.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_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_subscription_tracking.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_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.devdocs.json | 146 ++++- api_docs/kbn_unified_data_table.mdx | 4 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.devdocs.json | 396 +------------- api_docs/kbn_unified_field_list.mdx | 4 +- 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_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.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.mdx | 2 +- 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/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 | 22 +- api_docs/observability_log_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 15 + api_docs/observability_shared.mdx | 4 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 17 +- 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.devdocs.json | 4 +- 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.devdocs.json | 18 +- 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.mdx | 2 +- 611 files changed, 1455 insertions(+), 1109 deletions(-) create mode 100644 api_docs/kbn_field_utils.devdocs.json create mode 100644 api_docs/kbn_field_utils.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6f38f4750c370..a7a129cb1acd5 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-10-05 +date: 2023-10-06 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 62e61a17a8127..e9c98b6f1c2b1 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 45a0c747b090c..ebfddd38791b1 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 375db4c7efb28..07dd9670113d8 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-10-05 +date: 2023-10-06 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 1ad5f00314d37..30319255be1ce 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-10-05 +date: 2023-10-06 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 4a99345030314..de7314f9b2e6a 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-10-05 +date: 2023-10-06 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 f93c3d9cbd16f..7bd94471f7a1a 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-10-05 +date: 2023-10-06 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 48e125fbccdeb..1eb01ed2ca7d9 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-10-05 +date: 2023-10-06 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 6bc52cc600dcc..92720ab2ed7e4 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-10-05 +date: 2023-10-06 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 b0588be276955..40a7288e8ba26 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-10-05 +date: 2023-10-06 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 23cfac93362c3..a6b0a68a0ed75 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 41f312af9ef34..901099714c031 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-10-05 +date: 2023-10-06 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 ec0779772c594..36b9b7c7c8a59 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-10-05 +date: 2023-10-06 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 151541280cb24..9f0c29b572bfb 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-10-05 +date: 2023-10-06 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 c6cdbceb371ce..071c39b22644d 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-10-05 +date: 2023-10-06 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 3fba9ebc078b7..ee8e870e3c354 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-10-05 +date: 2023-10-06 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 81c3f08703d1b..37b0ed7449d88 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-10-05 +date: 2023-10-06 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 400d7600698f5..4cf53c1b4bdbf 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-10-05 +date: 2023-10-06 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 e3e00bde9cce8..c4784ea1f5da8 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 ab954e1952a3d..44f7c05c781df 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-10-05 +date: 2023-10-06 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 e33b409dd942e..c925ca03f82f9 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-10-05 +date: 2023-10-06 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 6395f79512bfd..c56d1ba3eaddb 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-10-05 +date: 2023-10-06 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 b3ec595bd5ed5..01178552e36ed 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 357c16cb56e68..d48e3caa1e58f 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 27611ed0ab83f..f12b610d24009 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index cdbdf5210738f..99790988c3644 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 0cd38215a7b3d..012cb8870f005 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-10-05 +date: 2023-10-06 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 9d632dc980631..140ea193b681e 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-10-05 +date: 2023-10-06 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 b2d9512eeb913..ad9b6d9a43b59 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index c730bd76fe102..58810e0f7814a 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-10-05 +date: 2023-10-06 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 a17a9bff9c842..9fafc41ee4bb5 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 9bed14c9c66f5..9486fc11df7fb 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 337dd8f32e5d7..23b779bbd466b 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1481,8 +1481,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps) | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields) | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [use_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/use_data_view.tsx#:~:text=BrowserField)+ 29 more | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields)+ 106 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [table_tab.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx#:~:text=BrowserField)+ 31 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields)+ 108 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index c2b26c90b13dc..44c16286d466d 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 12e87454796b7..b2aaefab91b17 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 7b723a22751ee..bbf043da0a805 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-10-05 +date: 2023-10-06 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 bf0b8f6018575..6d0a7a8920698 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-10-05 +date: 2023-10-06 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 7ada82cd8f7fd..7ec5d3c4a771d 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-10-05 +date: 2023-10-06 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 e8c03aef24bab..0fb3218f9cda5 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-10-05 +date: 2023-10-06 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 a867f4a6b681a..270188e525eed 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-10-05 +date: 2023-10-06 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 e7d32b061e693..c5c4c9a309866 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-10-05 +date: 2023-10-06 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 8e86a0f6b2a8c..4271d87a44bf0 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-10-05 +date: 2023-10-06 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 59a1071d48f01..6351ef45666cd 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-10-05 +date: 2023-10-06 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 82e6b036dc9dd..2e093f665cbb2 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index aac8a4729a54a..f443cc5af3f30 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-10-05 +date: 2023-10-06 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 71fa9c2cb3e23..86978ad274c06 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-10-05 +date: 2023-10-06 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 63ec7aa9b90aa..8794473588867 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-10-05 +date: 2023-10-06 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 aea0543bcfb18..14646e47eaa64 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-10-05 +date: 2023-10-06 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 2e2e63c929a10..599db4ecee55e 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 201f0fca7814d..31e7a4af52b17 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 6d7df68181c89..16628227f21a9 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index c143334202636..886f515193461 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 9958f32c89f7f..abdbab4431cb3 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index d4a660f1251fd..48f68818cb549 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 641f4c3934fae..63a0a3abdde29 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index b114dfe15ba98..230026463cd61 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 1fb3847e3e28a..03c91c8d233cb 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-10-05 +date: 2023-10-06 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 0ffd0ab5b20b3..5546fda3749a6 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index ab60436810980..e2c9e253fdfe4 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index ed065710dd663..f27ed63012d4d 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 5d2481bd9fbd0..3c960ac0f9183 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 742130e024027..111859e521e46 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-10-05 +date: 2023-10-06 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 d9a205c80f7b1..8d7a166a97425 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-10-05 +date: 2023-10-06 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 73ca6c086993b..bb747476240e5 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-10-05 +date: 2023-10-06 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 1f5bd1b40008a..d9399e1e01c11 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-10-05 +date: 2023-10-06 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 321afdb0e5d9b..4f060dcb6b912 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-10-05 +date: 2023-10-06 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 e6adf15f7f8f4..296d5eb78d61b 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 c5dd2f263374c..2af230ea764a9 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-10-05 +date: 2023-10-06 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 ac8f9ff094cdc..ef23301d7f305 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-10-05 +date: 2023-10-06 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 ef9deafbddd29..6a2e8351f6be6 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-10-05 +date: 2023-10-06 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 1056dff08a2c1..b19ecd78a7bd1 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-10-05 +date: 2023-10-06 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 2f7b590170334..a298d23102aef 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-10-05 +date: 2023-10-06 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 7e1019b337845..c7525d8265a2a 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 c2db70472f312..d01cbf03d83b0 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 6427a90ebbc58..5d15f7c024372 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-10-05 +date: 2023-10-06 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 b541a5b8d4c33..0fb23e22fbf9c 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-10-05 +date: 2023-10-06 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 99ff7d269dc85..e96737ce83271 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-10-05 +date: 2023-10-06 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 4917364bc05f9..2a911fb8a8afe 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 0ef57ce20b790..fe64679fc9dc8 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-10-05 +date: 2023-10-06 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 2387a509f4fe1..57da1b5793962 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 d57d9696b721d..97dad00e57e84 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-10-05 +date: 2023-10-06 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 d82263e97fd41..2f6e34bced8ef 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 1033c76b41ce8..856b07375a92f 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 4fb927e45502f..4b711aa7a64d1 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-10-05 +date: 2023-10-06 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 6444138248dd3..4e42136ff6a91 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 83bd9f5de3da3..199d2ac7f2c04 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -794,6 +794,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/risk_engine/tasks/risk_scoring_task.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 05af4848e87ed..e3c1cfadcac64 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index b0c8c0b8f1658..e0bcbada451e6 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 a0c4704aecb96..6dbad1bb08f6f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-10-05 +date: 2023-10-06 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 40b9a14880538..0dbdada237102 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-10-05 +date: 2023-10-06 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 f845884f7a976..3ccbdbbcca05d 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-10-05 +date: 2023-10-06 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 474872eeedcf7..dd96dc77ec801 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-10-05 +date: 2023-10-06 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 ccec678d7b8a8..132be5ae37bbe 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-10-05 +date: 2023-10-06 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 d33ce0743770e..d59e8a04b2260 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-10-05 +date: 2023-10-06 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 ef9a637cd7e99..7fb21ebbfd049 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-10-05 +date: 2023-10-06 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 71609a7dd9023..c3f006c67ff82 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 95200ba612ed9..e6d8ec38830e4 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 0be63073d4e4e..8ab66854b6e16 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-10-05 +date: 2023-10-06 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 e72a6ed12ef59..f981a04088ed5 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-10-05 +date: 2023-10-06 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 0a1dccac606de..0165ee22edfa4 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-10-05 +date: 2023-10-06 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 966ecceb14744..3db9f0bdeee89 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-10-05 +date: 2023-10-06 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 11af9568df46f..f44f9159036ff 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-10-05 +date: 2023-10-06 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 4d2cff56ec56c..1494ae681593e 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-10-05 +date: 2023-10-06 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 1e17bd8ceaad7..a0d390a3a00ce 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-10-05 +date: 2023-10-06 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 3833acc88b1ea..013510933e906 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-10-05 +date: 2023-10-06 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 49fda7ff46b6b..98c16aadc3e53 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 7e556d9cfeff7..f4a233201330a 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index aaec357dc74bc..a8549e802d807 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-10-05 +date: 2023-10-06 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 8884261229084..f2ff3588eb3ad 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-10-05 +date: 2023-10-06 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 838a8060031df..eb18c3ff85ff4 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 ee7d74430cde9..0e4fba79745ac 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-10-05 +date: 2023-10-06 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 8c9a07e5aea70..cab5946794f3a 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-10-05 +date: 2023-10-06 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 c91194e83b2e7..594ee85ccac55 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-10-05 +date: 2023-10-06 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 5d1622ab81373..a382d77bf2855 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 957316c0b4de7..431350c64a951 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-10-05 +date: 2023-10-06 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 5248175b4002c..eafd65079eeab 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 8f8a8507f493a..17877f03e0fd8 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 2fb133a928f60..05bb4512dd5f8 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 430be0a19e4c4..7eb84aaf14697 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 c58341d7c01a4..be6f31c511a51 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-10-05 +date: 2023-10-06 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 31b564ce515c1..96bd95151c73d 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 068540a191540..a050d4cb2a63a 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 eb2217e48ee25..f7638a1ab3714 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 20b81f7e9c992..5ba06d78e187b 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 1011f8337a3fb..7fa61625cbca9 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 dd0b23b45c50a..982aaa6802fba 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-10-05 +date: 2023-10-06 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 0aec4d912f74f..479f500b6f5f7 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 50f3366a6dd88..f5a9cdfee6c64 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 4aad51eda3015..187314bbd2c2f 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 098fe8161da81..f5afbe589a35d 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 5415b79bf96c1..fb4ee6cf48b34 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-10-05 +date: 2023-10-06 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 832c1e8740ba4..8296eaf2e5fca 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 dbdb621522933..81fb4f52aeb93 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 7fa339bb891b9..ec2264c82b42f 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 05639f10e559e..ec2abd5311b0e 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-10-05 +date: 2023-10-06 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 7d5bc7cd6662c..58f39f842f971 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-10-05 +date: 2023-10-06 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 d7016d0774650..b5a90b658aaba 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 18e38ab4aadd5..fc77d5c19b62c 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 8d4618cf68c98..6de3317d942a6 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 8e55b4f3d2568..13dba988c053f 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 3f65de152a32e..c6fe89ef7ea05 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 d94792d57296d..efa188f9a156b 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 e2059726c0120..bc9195596d784 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 eb02d1102ea20..95bc443329f91 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-10-05 +date: 2023-10-06 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 b3c2614d7394c..1d282c721ef94 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-10-05 +date: 2023-10-06 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 35026c90a7235..8521f3d0c54fe 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 8eae6532f6b7d..9d92e331048ba 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2ab82ce6be132..8410ebcc3966f 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 39837c5e196cd..606cc7c6c08bf 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 bc0e35bb99b8f..f8d719820b4b3 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 02534b47faa35..d20ac45f465b4 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-10-05 +date: 2023-10-06 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 758a5b640777e..7499cefc0d725 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-10-05 +date: 2023-10-06 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 a00dbd0e4728c..2057882ac99b4 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 07857d632a3c3..f05a585736e00 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 a8506aac18ce7..aa6b016f1c77d 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 c5d3320f76f16..a8419d3909edd 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 690d7039dbf1e..85c5ae7da973a 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-10-05 +date: 2023-10-06 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 5ea76e4f20a78..efd2cc3d09347 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2b4e109764a96..0a49daf9b3a0c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 52ab3911b38c7..82cde2d088ef7 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 fb82fdb9c14f2..e78687308522e 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-10-05 +date: 2023-10-06 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json index 86657554ce3ed..7344fb27e6659 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json @@ -3318,7 +3318,7 @@ "section": "def-common.ConditionalType", "text": "ConditionalType" }, - "; skipStartupConnectionCheck: ", + "; skipStartupConnectionCheck: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 95412bf8094a0..ce74f721c31e7 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 e2e22130eebf8..f51accf8270e0 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 cbf1ed558d71f..203abaf382f9d 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 2b71b55a9c39a..5f29ad4061d49 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 0073734f778cd..2ceea50f8e011 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 76107f687586c..a76d699f44eda 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 fad72d774fa1d..d8371b0e48fb5 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 a55c9cdc19151..c6a4d5e4ff3d6 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-10-05 +date: 2023-10-06 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 65d0f937e24ca..60fb3213cd2f8 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-10-05 +date: 2023-10-06 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 af89bc642f963..0e8337f4b9879 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 540da6ffec729..aa359583db57b 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 1365a47d9f6d0..de725d690eb83 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 22cd0d1831953..ba844ce8d28b5 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 8e2a0c3e80bcd..860592a9e5363 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 b278a536b9e43..8c5a98be18172 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 c0a2a2829091b..8ef572a76db11 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 bca33163bc4b3..bd3689aaa5cd3 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-10-05 +date: 2023-10-06 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 01a11fda9a465..593c56740fb94 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 fb98ca8c993fd..0724ed61a2407 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-10-05 +date: 2023-10-06 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 dff0d5b03389b..bc32494a42791 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-10-05 +date: 2023-10-06 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 07aa5ede2df5a..ff306e5f90607 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 c7f6e8e3ca66b..4b3207857f3de 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 6ee80febebfaa..e0c5ec8bdf469 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 2779412e95f4e..4fe112dd9a652 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 32c3c6d9ccab3..e357b8f01b860 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -6749,6 +6749,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, { "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/repositories.ts" @@ -9099,6 +9103,10 @@ "plugin": "reporting", "path": "x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" + }, { "plugin": "snapshotRestore", "path": "x-pack/plugins/snapshot_restore/server/routes/api/repositories.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 01d821c769454..9485590217e95 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-10-05 +date: 2023-10-06 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 b89fd8d57349d..4cc7ffbfab1e6 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 b0f24f106e524..f0570272f94c9 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 536385612056e..9abb1f3725a34 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 c5314c7f4b767..3c89a529231e5 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2ef5d47d8d414..2f393ec1ee59f 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-10-05 +date: 2023-10-06 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 ed0407b2c5c05..89a523902ff51 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 ab6a03200332f..a19b18cfb5105 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 9f82b2b20cbe9..8101e69cc01a2 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 a597d70c42136..fdc4b76840f09 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 56132eb7ebf08..54c264fb8cc4c 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 f591439487352..825c5d0d9a30e 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 e981043f76381..7781dd9d03efa 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 a56b618eb1ff7..7f2dad7d092bd 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-10-05 +date: 2023-10-06 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 169f80f9d0d84..8fc5fb91f2d8c 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 961348363216d..7573cfce29748 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 57ee79118446c..250769311dc9e 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 21c8604c7e747..317386b266f21 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-10-05 +date: 2023-10-06 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 d1eefe15df755..e99c168dd7fc5 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 48bcc0f6954f3..3240cb765320b 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 5572bbc51cb90..1b1ab112f5aaa 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 db578a11b9c9e..58df6ab4e60e5 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 abadcd967ddda..5134d3da56c87 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-10-05 +date: 2023-10-06 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 48eefb7432b90..68bdd89cdd3d2 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 69558ff08e76b..a5a019a3c599f 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 c6839be6e066b..61497b189f49e 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 03765ed009b72..321ef2e976b8c 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-10-05 +date: 2023-10-06 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 1ffb20b80354d..3f5b0317e4a15 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 524c32035ffdd..dfa7955b2e005 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 d5c8993562431..a942ac6a91f45 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 f5005f0543cc2..61ca43e935215 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 b3e00ec4f6d0c..94da40f70bbd5 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 7a7a03b924a3e..8695c7e554257 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 383d1dcd793fe..5c47332263231 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 f921c60e38969..fc851ce61d651 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 ac3a13a4937a7..73e736542c0df 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 e66b192783e4b..7ca8b0be576b6 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 845be339ef70b..361a6ac2104ab 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-10-05 +date: 2023-10-06 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 57b7b05efcf20..f6f2377fbb63e 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 5ae654662f351..fbd59182e2b02 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-10-05 +date: 2023-10-06 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 74c7b3b742b47..caab637c277e6 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 d36fdcdb89314..c03affb1959f5 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 8e0d9dd8a57c1..1e82cdce8f5e6 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 b9e1e6f8544f2..33ffdf7bf2031 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2f9ffaf93689d..8d5911a8df7b8 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 e8b11e82f489f..458ca06e5a1c6 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 b4d8a6d291439..4b26bafb8890c 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-10-05 +date: 2023-10-06 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 b4246c1223a41..17d20eb6c817f 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 39bb1d9655e14..c85b45feb71dc 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 d99f30e17f372..628d4c27a7099 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 13ec427c95819..6d49bc0322852 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 34ac03aa40895..5dad41ff0b295 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 c535679266395..d14e58b3210c2 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 119e9ea59ab0f..e9bdba9fb2a3e 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-10-05 +date: 2023-10-06 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 aac6bc7a98f3d..b3a1d0221ced7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 d31385ab8f3ca..87a61e29c0e94 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 6e4d87fdd9d22..d2a6eb01bdd6c 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 7379dda4b84e5..f8a2858b809d4 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2fd116614dfe9..23447cf63f14d 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-10-05 +date: 2023-10-06 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 92ec92c262c40..6afc2c703d5eb 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 f4e2572db868b..c3fed1997f082 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 772969a84e74b..683ec3d667705 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-10-05 +date: 2023-10-06 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 6494e022dd491..e3fde5c4b9167 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-10-05 +date: 2023-10-06 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 d50b5512a30cb..82f0088f09e2f 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 70abf452bdc74..0170de3b790b3 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-10-05 +date: 2023-10-06 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 8cc082349aa27..ec101b6f299f9 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 a2a984fd4b97a..75ae157e2a923 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 9e8e90e9636c4..428558baeb36c 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-10-05 +date: 2023-10-06 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 e3e2aeec88b46..3b835d9b560f0 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 adb9782ff0d86..646b9c5f7e7ee 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-10-05 +date: 2023-10-06 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 a075d44c2a8de..3776a33accb9d 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2023-10-05 +date: 2023-10-06 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 5ef8bc4b278d9..3613b63392bc8 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-10-05 +date: 2023-10-06 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 7fdd1bc587f6b..49e6afde4e219 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 7871a74ea7707..aafc66f9dd345 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 1f6a93a99c6b9..8dfaf0c849b6f 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 09586321ed287..09c1142117557 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 4ecf9b2982b88..d8a8e42f5531f 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 40bb2a9197ff9..6ad63dbaaadee 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 0198fc9779ec9..96c44e9e0d7bf 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-10-05 +date: 2023-10-06 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 b2e7b1b6745a6..e59ae9e8610d3 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-10-05 +date: 2023-10-06 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 452357560fa0d..024055bb47627 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 d45e1063425e6..ad87d64cf8fba 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 7d9a2c6570843..d05f7038b8f76 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-10-05 +date: 2023-10-06 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 810d197c66c20..483f21162b204 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 2ce46d4f896a6..722b557e95f8d 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 e6f9193d16e40..bfa9125f3d61f 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-10-05 +date: 2023-10-06 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 a89f42b41434e..b74d2c5cc67d0 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-10-05 +date: 2023-10-06 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 ed9777330dadb..d12d2614ee904 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 5a2a158bc0ee9..8c0d6c0db5618 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-10-05 +date: 2023-10-06 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 a1bd577f8eb53..ae24499298826 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index e8987912280ce..d58e5884f5e23 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-10-05 +date: 2023-10-06 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 0f3d42e0e49d3..4c9cddccf6336 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-10-05 +date: 2023-10-06 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 5fb1b195f7624..6fe74ebe8b2d0 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-10-05 +date: 2023-10-06 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 b81f5773c6fef..d532431b5b3bf 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-10-05 +date: 2023-10-06 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 2f27765b02ddf..742e21af94f1b 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-10-05 +date: 2023-10-06 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 8c6a2dcb2ad11..901372a83c038 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-10-05 +date: 2023-10-06 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 d085b8ac1f555..e2201d7d5a991 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-10-05 +date: 2023-10-06 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 18a69fd353644..06febea1e2b15 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-10-05 +date: 2023-10-06 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 58a3afb86bdc9..866d03989c167 100644 --- a/api_docs/kbn_deeplinks_observability.devdocs.json +++ b/api_docs/kbn_deeplinks_observability.devdocs.json @@ -230,6 +230,51 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.ObservabilityLogExplorerLocationState", + "type": "Interface", + "tags": [], + "label": "ObservabilityLogExplorerLocationState", + "description": [], + "signature": [ + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.ObservabilityLogExplorerLocationState", + "text": "ObservabilityLogExplorerLocationState" + }, + " extends ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + } + ], + "path": "packages/deeplinks/observability/locators/observability_log_explorer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.ObservabilityLogExplorerLocationState.origin", + "type": "Object", + "tags": [], + "label": "origin", + "description": [], + "signature": [ + "{ id: \"application-log-onboarding\"; } | undefined" + ], + "path": "packages/deeplinks/observability/locators/observability_log_explorer.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-observability", "id": "def-common.ObservabilityOnboardingLocatorParams", @@ -297,8 +342,8 @@ "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.LogExplorerNavigationParams", - "text": "LogExplorerNavigationParams" + "section": "def-common.DatasetLocatorParams", + "text": "DatasetLocatorParams" } ], "path": "packages/deeplinks/observability/locators/observability_log_explorer.ts", @@ -369,6 +414,14 @@ "docId": "kibKbnDeeplinksObservabilityPluginApi", "section": "def-common.LogExplorerNavigationParams", "text": "LogExplorerNavigationParams" + }, + " & ", + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.ObservabilityLogExplorerLocationState", + "text": "ObservabilityLogExplorerLocationState" } ], "path": "packages/deeplinks/observability/locators/observability_log_explorer.ts", @@ -405,6 +458,14 @@ "docId": "kibKbnDeeplinksObservabilityPluginApi", "section": "def-common.LogExplorerNavigationParams", "text": "LogExplorerNavigationParams" + }, + " & ", + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.ObservabilityLogExplorerLocationState", + "text": "ObservabilityLogExplorerLocationState" } ], "path": "packages/deeplinks/observability/locators/observability_log_explorer.ts", diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 4c91324e78257..d09bbee1a3cbd 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) for ques | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 24 | 0 | 14 | 0 | +| 26 | 0 | 16 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 9677de66ce7b2..104f57b9d6485 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-10-05 +date: 2023-10-06 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 560cd13f81076..d08f2711e378f 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-10-05 +date: 2023-10-06 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 6b7506059c12f..7865b52439f31 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-10-05 +date: 2023-10-06 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 8a7191390dbf1..58f12a07c84b3 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-10-05 +date: 2023-10-06 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 247dcd19f8f15..580480d8f35f4 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-10-05 +date: 2023-10-06 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 8d1438fd2a008..6cb2280229b17 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-10-05 +date: 2023-10-06 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 6064cb802ee91..e3263c05b5901 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-10-05 +date: 2023-10-06 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 bf984c21f71c6..c45df94662cad 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-10-05 +date: 2023-10-06 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 9b0098d4f1572..d0682bb7d47c9 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 74196fab61cdd..b87ba46995cce 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -446,7 +446,8 @@ "section": "def-public.FieldFormatsStart", "text": "FieldFormatsStart" }, - ") => FormattedHit" + ") => ", + "FormattedHit" ], "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", "deprecated": false, @@ -458,9 +459,7 @@ "type": "Object", "tags": [], "label": "hit", - "description": [ - "The hit to format" - ], + "description": [], "signature": [ "DataTableRecord" ], @@ -475,9 +474,7 @@ "type": "Object", "tags": [], "label": "dataView", - "description": [ - "The corresponding data view" - ], + "description": [], "signature": [ { "pluginId": "dataViews", @@ -498,9 +495,7 @@ "type": "Function", "tags": [], "label": "shouldShowFieldHandler", - "description": [ - "A function to check a field." - ], + "description": [], "signature": [ "ShouldShowFieldInTableHandler" ], @@ -587,41 +582,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.getFieldTypeName", - "type": "Function", - "tags": [], - "label": "getFieldTypeName", - "description": [ - "\nReturns a user-friendly name of a field type" - ], - "signature": [ - "(type: string | undefined) => string" - ], - "path": "packages/kbn-discover-utils/src/utils/get_field_type_name.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.getFieldTypeName.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-discover-utils/src/utils/get_field_type_name.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.getIgnoredReason", @@ -779,39 +739,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isKnownFieldType", - "type": "Function", - "tags": [], - "label": "isKnownFieldType", - "description": [], - "signature": [ - "(type?: string | undefined) => type is string" - ], - "path": "packages/kbn-discover-utils/src/utils/field_types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isKnownFieldType.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-discover-utils/src/utils/field_types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.isNestedFieldParent", @@ -943,20 +870,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.KNOWN_FIELD_TYPES", - "type": "Enum", - "tags": [], - "label": "KNOWN_FIELD_TYPES", - "description": [ - "\nField types for which name and description are defined" - ], - "path": "packages/kbn-discover-utils/src/utils/field_types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false } ], "misc": [ @@ -1095,21 +1008,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.KNOWN_FIELD_TYPE_LIST", - "type": "Array", - "tags": [], - "label": "KNOWN_FIELD_TYPE_LIST", - "description": [], - "signature": [ - "string[]" - ], - "path": "packages/kbn-discover-utils/src/utils/field_types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.MAX_DOC_FIELDS_DISPLAYED", diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index fc3a4148b108c..3c0f01920729a 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 65 | 0 | 38 | 3 | +| 59 | 0 | 37 | 4 | ## Common diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index b52457797ba8f..fb67070bf779f 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -840,7 +840,7 @@ "label": "fleet", "description": [], "signature": [ - "{ readonly beatsAgentComparison: string; readonly guide: string; readonly fleetServer: string; readonly fleetServerAddFleetServer: string; readonly esSettings: string; readonly settings: string; readonly logstashSettings: string; readonly kafkaSettings: string; readonly settingsFleetServerHostSettings: string; readonly settingsFleetServerProxySettings: string; readonly troubleshooting: string; readonly elasticAgent: string; readonly datastreams: string; readonly datastreamsILM: string; readonly datastreamsNamingScheme: string; readonly datastreamsManualRollover: string; readonly datastreamsTSDS: string; readonly datastreamsTSDSMetrics: string; readonly installElasticAgent: string; readonly installElasticAgentStandalone: string; readonly packageSignatures: string; readonly upgradeElasticAgent: string; readonly learnMoreBlog: string; readonly apiKeysLearnMore: string; readonly onPremRegistry: string; readonly secureLogstash: string; readonly agentPolicy: string; readonly api: string; readonly uninstallAgent: string; }" + "{ readonly beatsAgentComparison: string; readonly guide: string; readonly fleetServer: string; readonly fleetServerAddFleetServer: string; readonly esSettings: string; readonly settings: string; readonly logstashSettings: string; readonly kafkaSettings: string; readonly settingsFleetServerHostSettings: string; readonly settingsFleetServerProxySettings: string; readonly troubleshooting: string; readonly elasticAgent: string; readonly datastreams: string; readonly datastreamsILM: string; readonly datastreamsNamingScheme: string; readonly datastreamsManualRollover: string; readonly datastreamsTSDS: string; readonly datastreamsTSDSMetrics: string; readonly installElasticAgent: string; readonly installElasticAgentStandalone: string; readonly packageSignatures: string; readonly upgradeElasticAgent: string; readonly learnMoreBlog: string; readonly apiKeysLearnMore: string; readonly onPremRegistry: string; readonly secureLogstash: string; readonly agentPolicy: string; readonly api: string; readonly uninstallAgent: string; readonly installAndUninstallIntegrationAssets: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 04306a72149bb..c7bdc513d71e2 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-10-05 +date: 2023-10-06 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 7b92e31297617..af89795c8fe56 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 42c3a3d562aa5..98a34d2594e28 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-10-05 +date: 2023-10-06 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 1e4373937a0b5..293ec13577bdd 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-10-05 +date: 2023-10-06 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 310976776c5eb..d2ee099f696c8 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-10-05 +date: 2023-10-06 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 fbc442faacfff..0c6b04b9120a1 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index d026bf0a48a80..e84c0459155e5 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index a64c08611aec4..e5206dcd1a29c 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-10-05 +date: 2023-10-06 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 cc5c9d2609e45..710c4392bfb79 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-10-05 +date: 2023-10-06 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 a2db586a413de..7e6641df34db0 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-10-05 +date: 2023-10-06 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 bcee687e1a90b..2da8cfc35d41e 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -2757,7 +2757,7 @@ "label": "getLanguageDisplayName", "description": [], "signature": [ - "(language: string) => string" + "(language: string | undefined) => string" ], "path": "packages/kbn-es-query/src/es_query/es_aggregate_query.ts", "deprecated": false, @@ -2771,12 +2771,12 @@ "label": "language", "description": [], "signature": [ - "string" + "string | undefined" ], "path": "packages/kbn-es-query/src/es_query/es_aggregate_query.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [], diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index bb4ac4ea3f783..b5cd1d4918fe8 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index c30a20d934926..8e5526773216f 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-10-05 +date: 2023-10-06 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 023dddf0fe636..9f1edea2343c1 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-10-05 +date: 2023-10-06 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 c3ab30d7507f9..8cceb2e04614d 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-10-05 +date: 2023-10-06 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 5c55eef86860d..81880547d0622 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-10-05 +date: 2023-10-06 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 05c03c3d2e6e6..6ad9af6a244eb 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-10-05 +date: 2023-10-06 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 8b59ffb09015d..3e9561baa37e9 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.devdocs.json b/api_docs/kbn_field_utils.devdocs.json new file mode 100644 index 0000000000000..811d0c46c9a39 --- /dev/null +++ b/api_docs/kbn_field_utils.devdocs.json @@ -0,0 +1,504 @@ +{ + "id": "@kbn/field-utils", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldIcon", + "type": "Function", + "tags": [], + "label": "FieldIcon", + "description": [], + "signature": [ + "(props: ", + { + "pluginId": "@kbn/react-field", + "scope": "common", + "docId": "kibKbnReactFieldPluginApi", + "section": "def-common.FieldIconProps", + "text": "FieldIconProps" + }, + ") => JSX.Element" + ], + "path": "packages/kbn-field-utils/src/components/field_icon/index.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldIcon.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "@kbn/react-field", + "scope": "common", + "docId": "kibKbnReactFieldPluginApi", + "section": "def-common.FieldIconProps", + "text": "FieldIconProps" + } + ], + "path": "packages/kbn-field-utils/src/components/field_icon/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldIconProps", + "type": "Function", + "tags": [], + "label": "getFieldIconProps", + "description": [], + "signature": [ + "(field: T) => ", + { + "pluginId": "@kbn/react-field", + "scope": "common", + "docId": "kibKbnReactFieldPluginApi", + "section": "def-common.FieldIconProps", + "text": "FieldIconProps" + } + ], + "path": "packages/kbn-field-utils/src/components/field_icon/get_field_icon_props.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldIconProps.$1", + "type": "Uncategorized", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "T" + ], + "path": "packages/kbn-field-utils/src/components/field_icon/get_field_icon_props.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldIconType", + "type": "Function", + "tags": [], + "label": "getFieldIconType", + "description": [ + "\nReturns an icon type for a field" + ], + "signature": [ + "(field: T, getCustomFieldType: ", + "GetCustomFieldType", + " | undefined) => string" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_icon_type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldIconType.$1", + "type": "Uncategorized", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "T" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_icon_type.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldIconType.$2", + "type": "Function", + "tags": [], + "label": "getCustomFieldType", + "description": [], + "signature": [ + "GetCustomFieldType", + " | undefined" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_icon_type.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldType", + "type": "Function", + "tags": [], + "label": "getFieldType", + "description": [ + "\nReturns a field type. Time series metric type will override the original field type." + ], + "signature": [ + "(field: T) => string" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldType.$1", + "type": "Uncategorized", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "T" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldTypeDescription", + "type": "Function", + "tags": [], + "label": "getFieldTypeDescription", + "description": [ + "\nReturns a user-friendly description of a field type" + ], + "signature": [ + "(type: string | undefined) => string" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type_description.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldTypeDescription.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type_description.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldTypeName", + "type": "Function", + "tags": [], + "label": "getFieldTypeName", + "description": [ + "\nReturns a user-friendly name of a field type" + ], + "signature": [ + "(type: string | undefined) => string" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type_name.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.getFieldTypeName.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type_name.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.isKnownFieldType", + "type": "Function", + "tags": [], + "label": "isKnownFieldType", + "description": [], + "signature": [ + "(type?: string | undefined) => type is string" + ], + "path": "packages/kbn-field-utils/src/utils/field_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.isKnownFieldType.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-field-utils/src/utils/field_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase", + "type": "Interface", + "tags": [], + "label": "FieldBase", + "description": [], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.displayName", + "type": "string", + "tags": [], + "label": "displayName", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.count", + "type": "number", + "tags": [], + "label": "count", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.timeSeriesMetric", + "type": "CompoundType", + "tags": [], + "label": "timeSeriesMetric", + "description": [], + "signature": [ + "MappingTimeSeriesMetricType", + " | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.esTypes", + "type": "Array", + "tags": [], + "label": "esTypes", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldBase.scripted", + "type": "CompoundType", + "tags": [], + "label": "scripted", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.KNOWN_FIELD_TYPES", + "type": "Enum", + "tags": [], + "label": "KNOWN_FIELD_TYPES", + "description": [ + "\nField types for which name and description are defined" + ], + "path": "packages/kbn-field-utils/src/utils/field_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldIconProps", + "type": "Type", + "tags": [], + "label": "FieldIconProps", + "description": [], + "path": "packages/kbn-field-utils/src/components/field_icon/field_icon.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.FieldTypeKnown", + "type": "Type", + "tags": [], + "label": "FieldTypeKnown", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-field-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.KNOWN_FIELD_TYPE_LIST", + "type": "Array", + "tags": [], + "label": "KNOWN_FIELD_TYPE_LIST", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-field-utils/src/utils/field_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.UNKNOWN_FIELD_TYPE_MESSAGE", + "type": "string", + "tags": [], + "label": "UNKNOWN_FIELD_TYPE_MESSAGE", + "description": [ + "\nA user-friendly name of an unknown field type" + ], + "path": "packages/kbn-field-utils/src/utils/get_field_type_name.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx new file mode 100644 index 0000000000000..c4b7425a363f9 --- /dev/null +++ b/api_docs/kbn_field_utils.mdx @@ -0,0 +1,39 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnFieldUtilsPluginApi +slug: /kibana-dev-docs/api/kbn-field-utils +title: "@kbn/field-utils" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/field-utils plugin +date: 2023-10-06 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] +--- +import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; + + + +Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 28 | 0 | 22 | 1 | + +## Common + +### Functions + + +### Interfaces + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index d1773c41d264a..c008b87238615 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-10-05 +date: 2023-10-06 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 841478842b634..e18273c1cc5b6 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-10-05 +date: 2023-10-06 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 577aec0084757..bb589d60bb72b 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-10-05 +date: 2023-10-06 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 9c9f3ee9e90c5..1fa942e2a307b 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-10-05 +date: 2023-10-06 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 ef93b367bca51..d86129def2f89 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index b5c850d51e89b..f382b670c2e83 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index a17b4d2270b7d..36741817ef9df 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-10-05 +date: 2023-10-06 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 5f21a89b95665..2d24bda3b8c72 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-10-05 +date: 2023-10-06 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 4941572c32b95..d18415be351e7 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 1aef9b5a35bd8..a60108ba22c33 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-10-05 +date: 2023-10-06 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 506c9a1985c0b..2ae8004f93f48 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-10-05 +date: 2023-10-06 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 00b0c4783bdae..a31da0007b7b1 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-10-05 +date: 2023-10-06 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 2512f5395d3d5..e0800ca5cbeb3 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-10-05 +date: 2023-10-06 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 ccb56d1af2e08..0829e66bc2bbd 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-10-05 +date: 2023-10-06 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 06c3ec9cffed5..3e14bcbd6d88f 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-10-05 +date: 2023-10-06 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 40ccb851b962c..cfee5e62c881b 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-10-05 +date: 2023-10-06 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 7edabba45efa9..0a72ad78102c5 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-10-05 +date: 2023-10-06 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 a8a253875768e..8a541756e1633 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 3f286ce50d459..3a5ae359b3fbb 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-10-05 +date: 2023-10-06 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 07e911788b1f7..7042d4c83d477 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-10-05 +date: 2023-10-06 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 da17e432653ba..22a8b529a0809 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-10-05 +date: 2023-10-06 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 2a07fb5edb032..404a5071eb0f1 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-10-05 +date: 2023-10-06 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 d032996d847c6..67f5964e43148 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-10-05 +date: 2023-10-06 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 d29cac159c802..268f583807330 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 ac40fdb839eef..892e2118660d3 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-10-05 +date: 2023-10-06 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 c20799a25ccd2..8a372c07ede0a 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 aaa058c310f4e..bb2ad956b1224 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-10-05 +date: 2023-10-06 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 2305fb0f85c07..c2057a9c075b3 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-10-05 +date: 2023-10-06 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 ed3d3a2efed32..8da1b9221635b 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2023-10-05 +date: 2023-10-06 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 cf91fcd65c8f3..20dcab7f4518b 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2023-10-05 +date: 2023-10-06 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 39b8d16a3f0e1..646207dd15c5e 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-10-05 +date: 2023-10-06 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 98a903869a9ef..9b3f61ed2f625 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-10-05 +date: 2023-10-06 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 f3fe8fd7c0ad7..42c09e035cf03 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2023-10-05 +date: 2023-10-06 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 a39fce674e64a..7d68396f4b69a 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-10-05 +date: 2023-10-06 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 597f2a9fa6f45..a3b20e397fbb4 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-10-05 +date: 2023-10-06 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 bbfe43254d20c..40564dd2738c2 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-10-05 +date: 2023-10-06 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 8ec47776eb2e7..39bc0c281998b 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-10-05 +date: 2023-10-06 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 27779f359056c..03b5237b6d4f7 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-10-05 +date: 2023-10-06 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 77799dee908a2..1b52803bc860b 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index f57683d3598e1..fcf962ee1c282 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-10-05 +date: 2023-10-06 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 0bb478b87d201..1a8186cb99ac8 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 60ff3d90ba090..9327550311d28 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 0d89993003450..7d485faf4b62d 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 3cf4e592f476f..62b9eb45e0947 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-10-05 +date: 2023-10-06 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 ebb6b76d539aa..f3613488a8a8f 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2023-10-05 +date: 2023-10-06 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 ea5cea8ea65d0..13cc202afda85 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 d7b78d0d67b1e..54b363596a7ff 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-10-05 +date: 2023-10-06 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 736b49f786bc8..8be1a5ab0f357 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-10-05 +date: 2023-10-06 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 5a4d551b94ac4..3d5aafd31e21a 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 02d7b69a30f2b..393ccf26212dc 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 f2467daf121de..ec9dd5b948a4a 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-10-05 +date: 2023-10-06 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 58a129ca7187e..0f791ad4ddbb8 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-10-05 +date: 2023-10-06 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 56bfdd0fe305b..6e33f28b6b365 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-10-05 +date: 2023-10-06 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 96b1b38741db7..e5acf190daa1c 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-10-05 +date: 2023-10-06 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 a7c8c6aeb7702..568b1c943ddd0 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-10-05 +date: 2023-10-06 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 cfba28b9c3a59..4d9b6b47b122f 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-10-05 +date: 2023-10-06 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 2f4476bd49ff6..121f124fc59ea 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 43b79b427bd17..ab9bcb7050f27 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 7dcecbc5ca180..f6863de260ba3 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 19b279009eebe..40e643c1cac9a 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 66bd855a2cbf4..779d89b1da6a2 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 7b57e055237a7..eaea9475d1cf0 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-10-05 +date: 2023-10-06 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 9f991f8004d8f..8b1be2618068a 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 7f760ddf71757..fee92d189d2cf 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-10-05 +date: 2023-10-06 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 e426e5d060b83..5ed2660d34d4e 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-10-05 +date: 2023-10-06 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 e5ae81e5294e3..11508675d2545 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-10-05 +date: 2023-10-06 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 8463c6f134940..6f97319d39dfa 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 4b712546c2199..0b4c5f15070be 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-10-05 +date: 2023-10-06 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 1a0beedde92d1..2fa45fde672fd 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-10-05 +date: 2023-10-06 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 126d1cebdbc79..b8b16c201d0c8 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-10-05 +date: 2023-10-06 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 e42256ffac0c6..167d498decb85 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 2c1390c0facde..b20c38124ab3e 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-10-05 +date: 2023-10-06 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 695d7f2fed5d1..1e8b133d0e462 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-10-05 +date: 2023-10-06 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 3d470624e376e..274444fc3a759 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-10-05 +date: 2023-10-06 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 349bc465c44fa..59adf24ab99b9 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 634015cc9cbfb..ae848687a3f2d 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-10-05 +date: 2023-10-06 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 541945d41fdec..d77e34f2f53e9 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-10-05 +date: 2023-10-06 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 213f6f5905542..eed7a0f77e2fd 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-10-05 +date: 2023-10-06 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 bbbc68fc85ac7..2fffe64e9376e 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-10-05 +date: 2023-10-06 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 d69321985868d..75c16fcca3a12 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-10-05 +date: 2023-10-06 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 5535aff0427f5..cd4a66d918eba 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-10-05 +date: 2023-10-06 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 21a14a6402586..33374bc51cdd3 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-10-05 +date: 2023-10-06 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 dafa95ed7d0b6..e9ea4c0a3e511 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-10-05 +date: 2023-10-06 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 0e85af827ced5..8a706655a1291 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-10-05 +date: 2023-10-06 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 891a6e444f60f..cca6073512aa6 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-10-05 +date: 2023-10-06 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 4e6c6da052b74..a9936885bf3c0 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-10-05 +date: 2023-10-06 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 9fbcd58a07e3d..60636ac525631 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-10-05 +date: 2023-10-06 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 cefcb0a13b4ce..8182271a2964b 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 5ed7b897540d8..1460dff210d31 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2023-10-05 +date: 2023-10-06 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 3a45f2b8d351b..e944c3b37780b 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-10-05 +date: 2023-10-06 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 94c33b67c50d9..eec7c48c662d6 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-10-05 +date: 2023-10-06 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 7612964e812d1..cb8d1c3b5471e 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 205f2d7885fc3..dc956828acd85 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-10-05 +date: 2023-10-06 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 dffb8f26b7957..1f4c807c29ee5 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 05b9a41ade851..a2d7d945bbc09 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 2a061bcbc49ae..6d85dd0ac15ab 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index eb11b6ebc9210..d87b3db1f5d03 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-10-05 +date: 2023-10-06 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 7ae94765042dc..1b061e6910550 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-10-05 +date: 2023-10-06 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 764d1ebb7142b..2a00e3b52ef75 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-10-05 +date: 2023-10-06 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 0972dd71d8026..d4cc94c12eb6f 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-10-05 +date: 2023-10-06 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 5cfdff23498dd..b0e1e84fcea6d 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-10-05 +date: 2023-10-06 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 f1ba4a1c00621..6a1f39b4474f1 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-10-05 +date: 2023-10-06 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 b17303af451b8..85ad4a3cf3ff6 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-10-05 +date: 2023-10-06 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 18ee8dbc746cf..0882d772a65ca 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 258743373fbb6..07463078030f9 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-10-05 +date: 2023-10-06 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 1874c6daa7468..96945b92b58f1 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-10-05 +date: 2023-10-06 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 4be086a5fdf9d..488cd72cff2d2 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 0cf2a59dd349b..7ec7f0bdbdfe6 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-10-05 +date: 2023-10-06 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 23bd68b91ceaa..6126d39449f96 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-10-05 +date: 2023-10-06 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 07d677198f68d..a1a18b4abd913 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-10-05 +date: 2023-10-06 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 eb0d1e4aa742a..9d3a594f792c7 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 e4973a04bcaad..e0d65bf4f4a7c 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-10-05 +date: 2023-10-06 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 1747423a7d970..e6ad71113d152 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-10-05 +date: 2023-10-06 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 854420aa857bb..8f901dc0b2686 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-10-05 +date: 2023-10-06 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 a0fd09261b9bf..c2f31fde60d1d 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 a04895fbfcbb1..039f9aac9e60f 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-10-05 +date: 2023-10-06 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 536c01e99d851..606f2514484c7 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-10-05 +date: 2023-10-06 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 b3ecbd5e53c2a..0a84b76eb19ce 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-10-05 +date: 2023-10-06 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 70d1e9446027e..373093339de25 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-10-05 +date: 2023-10-06 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 8c27a9e168eb7..a7efe1480e3c1 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-10-05 +date: 2023-10-06 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 da47fd95e1fd1..d59a6112ccb0d 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-10-05 +date: 2023-10-06 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 67c70178ba6c8..30c02f3e8bf75 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-10-05 +date: 2023-10-06 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 b8462d568d13f..7cab0dea76ec3 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-10-05 +date: 2023-10-06 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 a67d41d2a1f38..1a0d42036f50f 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-10-05 +date: 2023-10-06 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 6ef6b672aa56e..0c8aab9a93153 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-10-05 +date: 2023-10-06 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 e72dd06c2f75f..4efbb12ce5750 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-10-05 +date: 2023-10-06 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 81d11ff777f22..a8a507682e8dd 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-10-05 +date: 2023-10-06 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 8226c58ff992f..49d7fa5a0220e 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 89c8cf3fba0ac..cf36db85e2ea2 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index d25c1e77791ef..eaaa3536b57e1 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 1ea03c3771d6d..a6269271aeb41 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index e42bfd5b502c1..85594e01664db 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-10-05 +date: 2023-10-06 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 cffc22362ce51..da19d2e25943d 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-10-05 +date: 2023-10-06 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 76c5f084ee8b7..9503556ca4604 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 7fdddf0f4417e..b9fe004420e65 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 6e90c76a651c2..fcab56cb33ba5 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-10-05 +date: 2023-10-06 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 5e11db43fd217..6a95e33d658f6 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-10-05 +date: 2023-10-06 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 f087ef2d4f9fc..62a5ebce74f5e 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 77287e4cb8a92..576af1a2d76f1 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 4cea551deb9e6..3463c8b37e44b 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-10-05 +date: 2023-10-06 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 118f1d369499f..f8096dc5f5a13 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-10-05 +date: 2023-10-06 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 30d8bdf11da46..38ebacfcbf9b4 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-10-05 +date: 2023-10-06 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 6141f852d4316..49640f35bb6c1 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-10-05 +date: 2023-10-06 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 3d14d53d58cd6..c8e397ab0bcd4 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-10-05 +date: 2023-10-06 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 3a7830733ebef..cdaae2c658520 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 a2ef77cf0e3d1..f8157e8410b4c 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-10-05 +date: 2023-10-06 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 f2c362cdbb1b6..4ea0e412bd43e 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 31871ded466f5..65e88e16f4928 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-10-05 +date: 2023-10-06 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 4b93fe436b1ea..760f0b0a27f01 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 2be4c4a419ceb..3a1ee306907c8 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-10-05 +date: 2023-10-06 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 1093683cc1747..f8f231fa138fd 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 c12c83294db73..3f1c1780a16cf 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-10-05 +date: 2023-10-06 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 8cb67b44d85bf..00734f5828c14 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 152307763f693..3a398a64e0374 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-10-05 +date: 2023-10-06 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 84f728d9f6c17..b9641d7b1195f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-10-05 +date: 2023-10-06 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 814a5561ff0d8..3fa3921316d70 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 6f5d08687b868..c67beb18b3be2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 f2e93158528da..312837705d8f9 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-10-05 +date: 2023-10-06 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 4dc96300849f1..48a55fad36513 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-10-05 +date: 2023-10-06 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 d3973686c39f0..06efcb1a156fe 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 309b5c3864483..5e9b578586ee5 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-10-05 +date: 2023-10-06 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 fb3a73b3b8673..08bec9569f07f 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-10-05 +date: 2023-10-06 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 ec59aec022df2..13c3fcc9c9819 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-10-05 +date: 2023-10-06 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 28239b4149653..480a8e2d7f21a 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-10-05 +date: 2023-10-06 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 df36c3372277e..79c1a6c2d6595 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-10-05 +date: 2023-10-06 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 66f15d350c64b..063146eed4484 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-10-05 +date: 2023-10-06 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 ddc162fbbfcab..3345b67ee213d 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-10-05 +date: 2023-10-06 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 5ffd57f187fde..8ae2218765160 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-10-05 +date: 2023-10-06 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 028b597daef38..3a191d693795b 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-10-05 +date: 2023-10-06 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 6d3d40e0695d7..948def5040772 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-10-05 +date: 2023-10-06 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 532180c694222..c0c053d34741a 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index ea66174a6612e..c0a6317e58b3c 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index f76f94ff2a84f..bbc7657ec382b 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-10-05 +date: 2023-10-06 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 157a11b2b82e5..3982e0b657ce1 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-10-05 +date: 2023-10-06 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 2d6ba75691bc0..352b89b58e2fa 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-10-05 +date: 2023-10-06 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 376aa2a8f138c..bf53d56d9f172 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-10-05 +date: 2023-10-06 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 cb4ff39c8e980..a8d3cda9d9bba 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-10-05 +date: 2023-10-06 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 2b52f295d57bf..fc6a4bab4fc9a 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index f5cbc116309d2..441ae0ec9aeeb 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-10-05 +date: 2023-10-06 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 920b1ac581e23..cea96c33fcb7d 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-10-05 +date: 2023-10-06 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 84958a4400909..4f3a2f8810292 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-10-05 +date: 2023-10-06 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 b23e146a340f8..36dc4ee1a1aaa 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-10-05 +date: 2023-10-06 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 5b79b58a992d6..2e9c3e40fd2b7 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 1d559a6d58108..29054dc8dfdcc 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -116,6 +116,56 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.getTextBasedColumnTypes", + "type": "Function", + "tags": [], + "label": "getTextBasedColumnTypes", + "description": [ + "\nColumn types for text based searches" + ], + "signature": [ + "(textBasedColumns: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + "[]) => TextBasedColumnTypes" + ], + "path": "packages/kbn-unified-data-table/src/utils/get_column_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.getTextBasedColumnTypes.$1", + "type": "Array", + "tags": [], + "label": "textBasedColumns", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + "[]" + ], + "path": "packages/kbn-unified-data-table/src/utils/get_column_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-common.JSONCodeEditorCommonMemoized", @@ -276,7 +326,7 @@ "label": "UnifiedDataTable", "description": [], "signature": [ - "({ ariaLabelledBy, columns, controlColumnIds, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, sampleSize, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, className, rowHeightState, onUpdateRowHeight, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalControlColumns, externalAdditionalControls, rowsPerPageOptions, visibleCellActions, externalCustomRenderers, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, }: ", + "({ ariaLabelledBy, columns, columnTypes, showColumnTokens, controlColumnIds, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, sampleSize, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, className, rowHeightState, onUpdateRowHeight, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalControlColumns, externalAdditionalControls, rowsPerPageOptions, visibleCellActions, externalCustomRenderers, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, }: ", { "pluginId": "@kbn/unified-data-table", "scope": "common", @@ -295,7 +345,7 @@ "id": "def-common.UnifiedDataTable.$1", "type": "Object", "tags": [], - "label": "{\n ariaLabelledBy,\n columns,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n sampleSize,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n className,\n rowHeightState,\n onUpdateRowHeight,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n trailingControlColumns,\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalControlColumns,\n externalAdditionalControls,\n rowsPerPageOptions,\n visibleCellActions,\n externalCustomRenderers,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n}", + "label": "{\n ariaLabelledBy,\n columns,\n columnTypes,\n showColumnTokens,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n sampleSize,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n className,\n rowHeightState,\n onUpdateRowHeight,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n trailingControlColumns,\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalControlColumns,\n externalAdditionalControls,\n rowsPerPageOptions,\n visibleCellActions,\n externalCustomRenderers,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n}", "description": [], "signature": [ { @@ -356,7 +406,9 @@ "type": "Interface", "tags": [], "label": "UnifiedDataTableProps", - "description": [], + "description": [ + "\nUnified Data Table props" + ], "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", "deprecated": false, "trackAdoption": false, @@ -406,6 +458,45 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.UnifiedDataTableProps.columnTypes", + "type": "Object", + "tags": [], + "label": "columnTypes", + "description": [ + "\nIf not provided, types will be derived by default from the dataView field types.\nFor displaying text-based search results, pass column types (which are available separately in the fetch request) down here.\nCheck available utils in `utils/get_column_types.ts`" + ], + "signature": [ + { + "pluginId": "@kbn/unified-data-table", + "scope": "common", + "docId": "kibKbnUnifiedDataTablePluginApi", + "section": "def-common.DataTableColumnTypes", + "text": "DataTableColumnTypes" + }, + " | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.UnifiedDataTableProps.showColumnTokens", + "type": "CompoundType", + "tags": [], + "label": "showColumnTokens", + "description": [ + "\nField tokens could be rendered in column header next to the field name." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-common.UnifiedDataTableProps.expandedDoc", @@ -1134,7 +1225,15 @@ "DataTableRecord", ", displayedRows: ", "DataTableRecord", - "[], displayedColumns: string[]) => JSX.Element | undefined) | undefined" + "[], displayedColumns: string[], columnTypes?: ", + { + "pluginId": "@kbn/unified-data-table", + "scope": "common", + "docId": "kibKbnUnifiedDataTablePluginApi", + "section": "def-common.DataTableColumnTypes", + "text": "DataTableColumnTypes" + }, + " | undefined) => JSX.Element | undefined) | undefined" ], "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", "deprecated": false, @@ -1185,6 +1284,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.UnifiedDataTableProps.renderDocumentView.$4", + "type": "Object", + "tags": [], + "label": "columnTypes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/unified-data-table", + "scope": "common", + "docId": "kibKbnUnifiedDataTablePluginApi", + "section": "def-common.DataTableColumnTypes", + "text": "DataTableColumnTypes" + }, + " | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] @@ -1557,6 +1678,23 @@ } ], "misc": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.DataTableColumnTypes", + "type": "Type", + "tags": [], + "label": "DataTableColumnTypes", + "description": [ + "\nCustom column types per column name" + ], + "signature": [ + "{ [x: string]: string; }" + ], + "path": "packages/kbn-unified-data-table/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-common.ValueToStringConverter", diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 6a1b55fd4ed1d..3c680a00a676c 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 94 | 0 | 42 | 1 | +| 100 | 0 | 43 | 1 | ## Common diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 759f0df1290bd..6ce5b774a894d 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-10-05 +date: 2023-10-06 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.devdocs.json b/api_docs/kbn_unified_field_list.devdocs.json index 58dc50412912c..acd3993a7742b 100644 --- a/api_docs/kbn_unified_field_list.devdocs.json +++ b/api_docs/kbn_unified_field_list.devdocs.json @@ -19,68 +19,6 @@ "common": { "classes": [], "functions": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldIcon", - "type": "Function", - "tags": [], - "label": "FieldIcon", - "description": [], - "signature": [ - "(props: ", - { - "pluginId": "@kbn/react-field", - "scope": "common", - "docId": "kibKbnReactFieldPluginApi", - "section": "def-common.FieldIconProps", - "text": "FieldIconProps" - }, - ") => JSX.Element" - ], - "path": "packages/kbn-unified-field-list/src/components/field_icon/index.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldIcon.$1", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - { - "pluginId": "@kbn/react-field", - "scope": "common", - "docId": "kibKbnReactFieldPluginApi", - "section": "def-common.FieldIconProps", - "text": "FieldIconProps" - } - ], - "path": "packages/kbn-unified-field-list/src/components/field_icon/index.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.FieldItemButton", @@ -196,11 +134,11 @@ "signature": [ " ", - { - "pluginId": "@kbn/react-field", - "scope": "common", - "docId": "kibKbnReactFieldPluginApi", - "section": "def-common.FieldIconProps", - "text": "FieldIconProps" - } - ], - "path": "packages/kbn-unified-field-list/src/components/field_icon/get_field_icon_props.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldIconProps.$1", - "type": "Uncategorized", - "tags": [], - "label": "field", - "description": [], - "signature": [ - "T" - ], - "path": "packages/kbn-unified-field-list/src/components/field_icon/get_field_icon_props.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldIconType", - "type": "Function", - "tags": [], - "label": "getFieldIconType", - "description": [ - "\nReturns an icon type for a field" - ], - "signature": [ - "(field: T, getCustomFieldType: ", - { - "pluginId": "@kbn/unified-field-list", - "scope": "common", - "docId": "kibKbnUnifiedFieldListPluginApi", - "section": "def-common.GetCustomFieldType", - "text": "GetCustomFieldType" - }, - " | undefined) => string" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldIconType.$1", - "type": "Uncategorized", - "tags": [], - "label": "field", - "description": [], - "signature": [ - "T" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldIconType.$2", - "type": "Function", - "tags": [], - "label": "getCustomFieldType", - "description": [], - "signature": [ - { - "pluginId": "@kbn/unified-field-list", - "scope": "common", - "docId": "kibKbnUnifiedFieldListPluginApi", - "section": "def-common.GetCustomFieldType", - "text": "GetCustomFieldType" - }, - " | undefined" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_icon_type.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldType", - "type": "Function", - "tags": [], - "label": "getFieldType", - "description": [ - "\nReturns a field type. Time series metric type will override the original field type." - ], - "signature": [ - "(field: T) => string" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_type.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldType.$1", - "type": "Uncategorized", - "tags": [], - "label": "field", - "description": [], - "signature": [ - "T" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_type.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldTypeDescription", - "type": "Function", - "tags": [], - "label": "getFieldTypeDescription", - "description": [ - "\nReturns a user-friendly description of a field type" - ], - "signature": [ - "(type: string | undefined) => string" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.getFieldTypeDescription.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-unified-field-list/src/utils/field_types/get_field_type_description.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.getSearchMode", @@ -3237,116 +3000,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem", - "type": "Interface", - "tags": [], - "label": "FieldListItem", - "description": [], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.displayName", - "type": "string", - "tags": [], - "label": "displayName", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.count", - "type": "number", - "tags": [], - "label": "count", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.timeSeriesMetric", - "type": "CompoundType", - "tags": [], - "label": "timeSeriesMetric", - "description": [], - "signature": [ - "MappingTimeSeriesMetricType", - " | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.esTypes", - "type": "Array", - "tags": [], - "label": "esTypes", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldListItem.scripted", - "type": "CompoundType", - "tags": [], - "label": "scripted", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-unified-field-list/src/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.FieldListProps", @@ -5590,18 +5243,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/unified-field-list", - "id": "def-common.FieldIconProps", - "type": "Type", - "tags": [], - "label": "FieldIconProps", - "description": [], - "path": "packages/kbn-unified-field-list/src/components/field_icon/field_icon.tsx", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.FieldListGroups", @@ -5631,6 +5272,27 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/unified-field-list", + "id": "def-common.FieldListItem", + "type": "Type", + "tags": [], + "label": "FieldListItem", + "description": [], + "signature": [ + { + "pluginId": "@kbn/field-utils", + "scope": "common", + "docId": "kibKbnFieldUtilsPluginApi", + "section": "def-common.FieldBase", + "text": "FieldBase" + } + ], + "path": "packages/kbn-unified-field-list/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.FieldPopoverFooterProps", diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index d7b87d1dab7ef..450d6c156d27c 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.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 | |-------------------|-----------|------------------------|-----------------| -| 304 | 0 | 277 | 9 | +| 285 | 0 | 261 | 9 | ## Common diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 45760019e9ce7..be1e94ab455aa 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-10-05 +date: 2023-10-06 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 fbfaa53f01b67..1de4d353985b2 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-10-05 +date: 2023-10-06 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 8d25fb89e0eba..d327de4061cd2 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-10-05 +date: 2023-10-06 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 cb4beff8a49fe..a6796b3189883 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-10-05 +date: 2023-10-06 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 99bf78ded44fb..c19898d2028ed 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-10-05 +date: 2023-10-06 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 1a320a6cb58f4..db76777b12910 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-10-05 +date: 2023-10-06 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 4ee51b49ea720..d2e1027c4b3cc 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 861b90cfe800e..b5ad28990c158 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index fd42d4e6a54cf..cd600b4e958c2 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index c943b4e7a834e..ee448eaf6b923 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-10-05 +date: 2023-10-06 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 b9ab273d2c2af..705f236d88890 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-10-05 +date: 2023-10-06 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 5ccd842d840b3..a905b09a15b8b 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-10-05 +date: 2023-10-06 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 613784ce420a7..ec5789ffe4e2d 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-10-05 +date: 2023-10-06 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 5d6ce5cc9d4bd..cc1df1dfea18c 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-10-05 +date: 2023-10-06 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 52e33c4804b1a..9921070d31808 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-10-05 +date: 2023-10-06 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 bf3a62ee42dad..592a61d7c9c40 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 ba2389425ca49..cb45dc1817bca 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-10-05 +date: 2023-10-06 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 2cab6ad58f065..5bdd534b2065d 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2023-10-05 +date: 2023-10-06 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 6c8f63af993ca..482b89c8397a0 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 1cfc3276626b0..4d2eaabb560e3 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 7dafc5ecdaf55..19d3dee632e87 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-10-05 +date: 2023-10-06 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 b3d019368c835..efad720d48480 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-10-05 +date: 2023-10-06 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 7bbbe4190b259..6b907565fa736 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-10-05 +date: 2023-10-06 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 74a6930cc3918..4df1f08e701f6 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-10-05 +date: 2023-10-06 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 8ae5f0a13f73a..cf31af07b04cf 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-10-05 +date: 2023-10-06 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 dd49804dc6368..4f7042a81676c 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 585db02f7e9cf..9f11f7004dd6f 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-10-05 +date: 2023-10-06 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 4e5312777fcbd..ad33c1b622fe3 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-10-05 +date: 2023-10-06 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 81a99e60577a8..b4a6565720a4c 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-10-05 +date: 2023-10-06 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 7d13563813834..5be916a3d15af 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-10-05 +date: 2023-10-06 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 eea0c775578e4..6d244aaf4d2c0 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-10-05 +date: 2023-10-06 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 377afbdf9867e..b98d93bb86492 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-10-05 +date: 2023-10-06 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 f3f223bd637a0..f19878910f6d8 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-10-05 +date: 2023-10-06 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 43690855d68ff..54eb7e275228c 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-10-05 +date: 2023-10-06 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 d469ec56d4cd1..cbf4d68df4200 100644 --- a/api_docs/observability_log_explorer.devdocs.json +++ b/api_docs/observability_log_explorer.devdocs.json @@ -46,8 +46,8 @@ "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.LogExplorerNavigationParams", - "text": "LogExplorerNavigationParams" + "section": "def-common.DatasetLocatorParams", + "text": "DatasetLocatorParams" }, ">" ], @@ -114,10 +114,10 @@ "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.LogExplorerNavigationParams", - "text": "LogExplorerNavigationParams" + "section": "def-common.DatasetLocatorParams", + "text": "DatasetLocatorParams" }, - ") => Promise<{ app: string; path: string; state: {}; }>" + ") => Promise<{ app: string; path: string; state: { origin?: { id: \"application-log-onboarding\"; } | undefined; }; }>" ], "path": "x-pack/plugins/observability_log_explorer/common/locators/all_datasets/all_datasets_locator.ts", "deprecated": false, @@ -126,7 +126,7 @@ { "parentPluginId": "observabilityLogExplorer", "id": "def-common.AllDatasetsLocatorDefinition.getLocation.$1", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "params", "description": [], @@ -135,8 +135,8 @@ "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.LogExplorerNavigationParams", - "text": "LogExplorerNavigationParams" + "section": "def-common.DatasetLocatorParams", + "text": "DatasetLocatorParams" } ], "path": "x-pack/plugins/observability_log_explorer/common/locators/all_datasets/all_datasets_locator.ts", @@ -249,7 +249,7 @@ "section": "def-common.SingleDatasetLocatorParams", "text": "SingleDatasetLocatorParams" }, - ") => Promise<{ app: string; path: string; state: {}; }>" + ") => Promise<{ app: string; path: string; state: { origin?: { id: \"application-log-onboarding\"; } | undefined; }; }>" ], "path": "x-pack/plugins/observability_log_explorer/common/locators/single_dataset/single_dataset_locator.ts", "deprecated": false, @@ -316,8 +316,8 @@ "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.LogExplorerNavigationParams", - "text": "LogExplorerNavigationParams" + "section": "def-common.DatasetLocatorParams", + "text": "DatasetLocatorParams" }, ">" ], diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index c09dfc97371a3..4e1766e86045b 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 81cc8c0edbad5..8e52a4a60f535 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 65e711e305353..e5726bfafdbe3 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -3652,6 +3652,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.LOGS_ONBOARDING_FEEDBACK_LINK", + "type": "string", + "tags": [], + "label": "LOGS_ONBOARDING_FEEDBACK_LINK", + "description": [], + "signature": [ + "\"https://ela.st/logs-onboarding-feedback\"" + ], + "path": "x-pack/plugins/observability_shared/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.METRIC_CGROUP_MEMORY_LIMIT_BYTES", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 6ceb8b06b6cfe..0766dc0c1b19e 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 290 | 1 | 287 | 15 | +| 291 | 1 | 288 | 15 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 836cce900dadb..a07b0744e6554 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-10-05 +date: 2023-10-06 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 6319160624ce9..cd2cce6f14c28 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-10-05 +date: 2023-10-06 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 ab6f3303b0a4a..8b02776412f65 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
    public API | Number of teams | |--------------|----------|------------------------| -| 698 | 589 | 41 | +| 699 | 590 | 41 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 75782 | 223 | 64582 | 1576 | +| 75794 | 223 | 64591 | 1578 | ## Plugin Directory @@ -141,7 +141,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 42 | 0 | 39 | 7 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers observability log consumption features. | 15 | 0 | 15 | 1 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 14 | 0 | 14 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 290 | 1 | 287 | 15 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 291 | 1 | 288 | 15 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 227 | 2 | 172 | 11 | @@ -422,7 +422,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/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 24 | 0 | 14 | 0 | +| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 26 | 0 | 16 | 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) | - | 7 | 0 | 7 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 7 | 0 | 7 | 0 | @@ -432,7 +432,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 102 | 0 | 86 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 36 | 2 | 32 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 65 | 0 | 38 | 3 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 59 | 0 | 37 | 4 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 75 | 0 | 75 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 26 | 5 | @@ -450,6 +450,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 36 | 0 | 14 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 16 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 28 | 0 | 22 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 29 | 0 | 29 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | @@ -633,9 +634,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 35 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 43 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 94 | 0 | 42 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 100 | 0 | 43 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 10 | 0 | 7 | 6 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 304 | 0 | 277 | 9 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 285 | 0 | 261 | 9 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 4 | 0 | 0 | 0 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 3 | 0 | 2 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 80 | 0 | 21 | 2 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 5bd114fba99f5..287e8b4f981e5 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-10-05 +date: 2023-10-06 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 13abb7b599e07..22bb92eb10901 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-10-05 +date: 2023-10-06 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 735b7600ab35d..1ba1b50772c99 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-10-05 +date: 2023-10-06 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 3805921d9798f..825b33a41b3b4 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.devdocs.json b/api_docs/reporting.devdocs.json index aa51073df2dd2..b35f8c9f08e34 100644 --- a/api_docs/reporting.devdocs.json +++ b/api_docs/reporting.devdocs.json @@ -673,7 +673,7 @@ }, " | undefined; dimensions?: { width: number; height: number; } | undefined; selectors?: Partial<", "LayoutSelectorDictionary", - "> | undefined; zoom?: number | undefined; }; objectType: string; locatorParams: ", + "> | undefined; zoom?: number | undefined; }; locatorParams: ", { "pluginId": "reporting", "scope": "common", @@ -689,7 +689,7 @@ "section": "def-common.SerializableRecord", "text": "SerializableRecord" }, - ">[]; }" + ">[]; objectType: string; }" ], "path": "x-pack/plugins/reporting/common/types/export_types/printable_pdf_v2.ts", "deprecated": false, diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index c648f1fe61675..ed92e3aa38e28 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-10-05 +date: 2023-10-06 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 d7f5e2f30b8d0..1d18ec40d999d 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-10-05 +date: 2023-10-06 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 63786d2b4ab6b..510ce9b85a081 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-10-05 +date: 2023-10-06 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 455ebfb0e5a52..890a9fff156cb 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-10-05 +date: 2023-10-06 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 59f7840bcbef8..fd7d3b9b06901 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-10-05 +date: 2023-10-06 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 a3663b3ad45ed..9e47510face2e 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-10-05 +date: 2023-10-06 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 d44c705e67a82..537708c63e9cd 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-10-05 +date: 2023-10-06 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 7bdb32f9a1087..ea05906ebb253 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-10-05 +date: 2023-10-06 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 89d8bb96757ae..4a48ad9794461 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-10-05 +date: 2023-10-06 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 17624c52e3739..96166f500ee27 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-10-05 +date: 2023-10-06 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 2614c21a5ffe7..c9848070efccc 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-10-05 +date: 2023-10-06 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 5b513a88c0c5e..7728644305310 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-10-05 +date: 2023-10-06 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 14111499bc1ab..2860d368225b4 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-10-05 +date: 2023-10-06 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 2cb161270674c..bbcaea44f98f9 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-10-05 +date: 2023-10-06 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 becb9fde425e1..9159f5e29105d 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-10-05 +date: 2023-10-06 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 37093bb4b4f7e..f51880358dd04 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-10-05 +date: 2023-10-06 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 3173f6aa55c71..90742d24e5d99 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-10-05 +date: 2023-10-06 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 107391fef8adb..0f4190b93d45c 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-10-05 +date: 2023-10-06 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 dd95be9b76a23..6c2f19444f732 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-10-05 +date: 2023-10-06 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 28dc097455faf..368973cdb5667 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-10-05 +date: 2023-10-06 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 8efcaff9ae3e5..ba4cd068a9df7 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-10-05 +date: 2023-10-06 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 24ddfd9abc371..6e8b22e663d44 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-10-05 +date: 2023-10-06 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 efd20cce0d61e..9e66c80b308d2 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-10-05 +date: 2023-10-06 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 dd59703e27f31..25539cca9c2fc 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-10-05 +date: 2023-10-06 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 c6f45a141ec56..1f23fd553eed6 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-10-05 +date: 2023-10-06 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 a1a16e0031669..ca808c2f44983 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-10-05 +date: 2023-10-06 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 0ce9c23e30635..57dafbd205967 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-10-05 +date: 2023-10-06 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 10660c9902ebf..1d69baad47736 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-10-05 +date: 2023-10-06 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 725195148694e..89045039d34eb 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-10-05 +date: 2023-10-06 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 e178ccd7710e7..0666425665914 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-10-05 +date: 2023-10-06 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 ff58b40131f17..295328d70ffe4 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-10-05 +date: 2023-10-06 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 766971e73dc37..74283f3fa05dd 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 82d413e7c9d40..e8d973bd52d02 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -1413,6 +1413,14 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + }, { "plugin": "@kbn/securitysolution-data-table", "path": "x-pack/packages/security-solution/data_table/components/data_table/column_headers/helpers.tsx" @@ -3967,6 +3975,14 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/flyout/body.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/components/control_columns/transform_control_columns.tsx" @@ -4217,7 +4233,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" }, { "plugin": "securitySolution", diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 49c7177a4a91f..dd8494f6926a5 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-10-05 +date: 2023-10-06 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 fb23df99c0b51..3f6d455e7fbc2 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-10-05 +date: 2023-10-06 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 a25a5033682e0..9817b7c27dff9 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-10-05 +date: 2023-10-06 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 9e4ce07d6a80b..2ce0137f47f55 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-10-05 +date: 2023-10-06 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 cf4eee540b9a8..6a290877a2cbb 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-10-05 +date: 2023-10-06 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 431a8e20122a8..b61d4f499a3ea 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-10-05 +date: 2023-10-06 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 5cf1bb5d790fd..de383ebc40f28 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-10-05 +date: 2023-10-06 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 1eff054661043..0e8456c650846 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-10-05 +date: 2023-10-06 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 0cb2e557affec..a918af7d6c3b1 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-10-05 +date: 2023-10-06 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 f23cae5aa118d..ca7bb32bd2976 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-10-05 +date: 2023-10-06 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 d20b3af00da87..c510488390f08 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-10-05 +date: 2023-10-06 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 2f44258c9d401..54888f0411275 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-10-05 +date: 2023-10-06 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 05d4d8426559f..cbde3a20db4a8 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-10-05 +date: 2023-10-06 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 64a1839ecd061..569308c1e1f40 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-10-05 +date: 2023-10-06 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 ce5e50c85e65d..4276b35e29166 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-10-05 +date: 2023-10-06 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 2e87d67658305..3340457a36433 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-10-05 +date: 2023-10-06 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 52b107ad6057c..bf0b3e588dc96 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-10-05 +date: 2023-10-06 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 936cd0c2773bb..cc18785fc9d10 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-10-05 +date: 2023-10-06 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 c303cca0180ce..e54c5bba60268 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-10-05 +date: 2023-10-06 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 dd261e79a06c7..a1914f2fdfde3 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-10-05 +date: 2023-10-06 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 44a7b0f347fe3..f94bc67025afb 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-10-05 +date: 2023-10-06 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 9cfad5a688fe2..26098d5678fbe 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-10-05 +date: 2023-10-06 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 45d735650a81e..a211590c4a6e4 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index af3a417abd9de..100a8757db8ec 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-10-05 +date: 2023-10-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 9ffce13becf81c25990daf4d4b1423cc495ca918 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Fri, 6 Oct 2023 07:16:20 +0100 Subject: [PATCH 156/170] [ML] Fixing flaky get_module test (#167889) https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/3350 It's possible the problem causing the test to be flaky is that the two fleet installed modules are not ready by the time the first test runs. I've added added a step just after they are installed to ensure both modules can be found and are ready. Fixes https://github.com/elastic/kibana/issues/164420 --- .../test/api_integration/apis/ml/modules/get_module.ts | 3 +-- x-pack/test/api_integration/apis/ml/modules/index.ts | 4 ++++ x-pack/test/functional/services/ml/api.ts | 9 +++++++++ x-pack/test/functional/services/ml/test_resources.ts | 6 ++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/x-pack/test/api_integration/apis/ml/modules/get_module.ts b/x-pack/test/api_integration/apis/ml/modules/get_module.ts index 488714f13c399..7c72f18f918e3 100644 --- a/x-pack/test/api_integration/apis/ml/modules/get_module.ts +++ b/x-pack/test/api_integration/apis/ml/modules/get_module.ts @@ -49,8 +49,7 @@ export default ({ getService }: FtrProviderContext) => { return body; } - // FLAKY: https://github.com/elastic/kibana/issues/164420 - describe.skip('get_module', function () { + describe('get_module', function () { before(async () => { await ml.testResources.setKibanaTimeZoneToUTC(); }); diff --git a/x-pack/test/api_integration/apis/ml/modules/index.ts b/x-pack/test/api_integration/apis/ml/modules/index.ts index d28263b487701..68db43fd0ea3c 100644 --- a/x-pack/test/api_integration/apis/ml/modules/index.ts +++ b/x-pack/test/api_integration/apis/ml/modules/index.ts @@ -26,6 +26,10 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { const version = await ml.testResources.installFleetPackage(fleetPackage); installedPackages.push({ pkgName: fleetPackage, version }); } + + // ensure fleet installed packages are ready + await ml.testResources.assertModuleExists('apache_data_stream'); + await ml.testResources.assertModuleExists('nginx_data_stream'); }); after(async () => { diff --git a/x-pack/test/functional/services/ml/api.ts b/x-pack/test/functional/services/ml/api.ts index cf71764ee5397..b514d18d552ad 100644 --- a/x-pack/test/functional/services/ml/api.ts +++ b/x-pack/test/functional/services/ml/api.ts @@ -1552,5 +1552,14 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { log.debug('Module set up'); return module; }, + + async getModule(moduleId: string) { + log.debug(`Get module with ID: "${moduleId}"`); + const { body: module, status } = await kbnSupertest + .get(`/internal/ml/modules/get_module/${moduleId}`) + .set(getCommonRequestHeader('1')); + this.assertResponseStatusCode(200, status, module); + return module; + }, }; } diff --git a/x-pack/test/functional/services/ml/test_resources.ts b/x-pack/test/functional/services/ml/test_resources.ts index 8771db60eabb6..22f43a08f1e78 100644 --- a/x-pack/test/functional/services/ml/test_resources.ts +++ b/x-pack/test/functional/services/ml/test_resources.ts @@ -641,5 +641,11 @@ export function MachineLearningTestResourcesProvider( async clearAdvancedSettingProperty(propertyName: string) { await kibanaServer.uiSettings.unset(propertyName); }, + + async assertModuleExists(moduleId: string) { + await retry.tryForTime(30 * 1000, async () => { + await mlApi.getModule(moduleId); + }); + }, }; } From efa4e76203a1c20977994559b0e57c09d7751310 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Fri, 6 Oct 2023 09:49:25 +0200 Subject: [PATCH 157/170] [ML] Fix anomaly charts when partition field contains an empty string (#168102) ## Summary Fixes #168067. Fixes anomaly charts fetching by replacing logical OR operator with nullish coalescing. ![image](https://github.com/elastic/kibana/assets/5236598/e8e43c49-507c-4725-9e1a-f412e3bdbe98) ### Checklist - [ ] [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 --- .../models/results_service/anomaly_charts.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts index a1247dbb154a9..707a594d5eff3 100644 --- a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts +++ b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts @@ -526,9 +526,9 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu // TODO - work out how best to display results from detectors with just an over field. const firstFieldName = - record.partition_field_name || record.by_field_name || record.over_field_name; + record.partition_field_name ?? record.by_field_name ?? record.over_field_name; const firstFieldValue = - record.partition_field_value || record.by_field_value || record.over_field_value; + record.partition_field_value ?? record.by_field_value ?? record.over_field_value; if (firstFieldName !== undefined && firstFieldValue !== undefined) { const groupsForDetector = detectorsForJob[detectorIndex]; @@ -544,7 +544,7 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu let isSecondSplit = false; if (record.partition_field_name !== undefined) { - const splitFieldName = record.over_field_name || record.by_field_name; + const splitFieldName = record.over_field_name ?? record.by_field_name; if (splitFieldName !== undefined) { isSecondSplit = true; } @@ -562,8 +562,8 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu } } else { // Aggregate another level for the over or by field. - const secondFieldName = record.over_field_name || record.by_field_name; - const secondFieldValue = record.over_field_value || record.by_field_value; + const secondFieldName = record.over_field_name ?? record.by_field_name; + const secondFieldValue = record.over_field_value ?? record.by_field_value; if (secondFieldName !== undefined && secondFieldValue !== undefined) { if (dataForGroupValue[secondFieldName] === undefined) { @@ -1044,7 +1044,7 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu let chartData: ChartPoint[] = []; if (metricData !== undefined) { if (records.length > 0) { - const filterField = records[0].by_field_value || records[0].over_field_value; + const filterField = records[0].by_field_value ?? records[0].over_field_value; if (eventDistribution && eventDistribution.length > 0) { chartData = eventDistribution.filter((d: { entity: any }) => d.entity !== filterField); } @@ -1143,7 +1143,7 @@ export function anomalyChartsDataProvider(mlClient: MlClient, client: IScopedClu chartType === CHART_TYPE.POPULATION_DISTRIBUTION ) { return chartData.filter((d) => { - return d.entity === (record && (record.by_field_value || record.over_field_value)); + return d.entity === (record && (record.by_field_value ?? record.over_field_value)); }); } From 5d660f900fe780d64c8618600c6db8a727af9d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Fri, 6 Oct 2023 10:05:48 +0200 Subject: [PATCH 158/170] Unskip APM API tests and fix flaky tests (#168080) --- .../tests/alerts/error_count_threshold.spec.ts | 11 ++++++++--- .../tests/alerts/transaction_duration.spec.ts | 11 ++++++++--- .../tests/alerts/transaction_error_rate.spec.ts | 11 ++++++++--- x-pack/test/apm_api_integration/tests/index.ts | 5 +---- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts index e3b0d06fbc5a1..e9519a0122203 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts @@ -32,6 +32,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); const supertest = getService('supertest'); const es = getService('es'); + const logger = getService('log'); const apmApiClient = getService('apmApiClient'); const synthtraceEsClient = getService('synthtraceEsClient'); @@ -133,9 +134,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteActionConnector({ supertest, es, actionId }); - await deleteRuleById({ supertest, ruleId }); - await deleteAlertsByRuleId({ es, ruleId }); + try { + await deleteActionConnector({ supertest, es, actionId }); + await deleteRuleById({ supertest, ruleId }); + await deleteAlertsByRuleId({ es, ruleId }); + } catch (e) { + logger.info('Could not delete rule or action connector', e); + } }); it('checks if rule is active', async () => { diff --git a/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts index 3dbfa93a69d46..cf4b713aa9586 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts @@ -32,6 +32,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); const supertest = getService('supertest'); const es = getService('es'); + const logger = getService('log'); const apmApiClient = getService('apmApiClient'); const synthtraceEsClient = getService('synthtraceEsClient'); @@ -106,9 +107,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteActionConnector({ supertest, es, actionId }); - await deleteAlertsByRuleId({ es, ruleId }); - await deleteRuleById({ supertest, ruleId }); + try { + await deleteActionConnector({ supertest, es, actionId }); + await deleteRuleById({ supertest, ruleId }); + await deleteAlertsByRuleId({ es, ruleId }); + } catch (e) { + logger.info('Could not delete rule or action connector', e); + } }); it('checks if rule is active', async () => { diff --git a/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts index e51372f3d8b01..394db386c80e7 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts @@ -32,6 +32,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); const supertest = getService('supertest'); const es = getService('es'); + const logger = getService('log'); const apmApiClient = getService('apmApiClient'); const synthtraceEsClient = getService('synthtraceEsClient'); @@ -116,9 +117,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteActionConnector({ supertest, es, actionId }); - await deleteRuleById({ supertest, ruleId }); - await deleteAlertsByRuleId({ es, ruleId }); + try { + await deleteActionConnector({ supertest, es, actionId }); + await deleteRuleById({ supertest, ruleId }); + await deleteAlertsByRuleId({ es, ruleId }); + } catch (e) { + logger.info('Could not delete rule or action connector', e); + } }); it('checks if rule is active', async () => { diff --git a/x-pack/test/apm_api_integration/tests/index.ts b/x-pack/test/apm_api_integration/tests/index.ts index 8f4be6ad1652c..7b4ab43aaaeae 100644 --- a/x-pack/test/apm_api_integration/tests/index.ts +++ b/x-pack/test/apm_api_integration/tests/index.ts @@ -26,10 +26,7 @@ function getGlobPattern() { export default function apmApiIntegrationTests({ getService, loadTestFile }: FtrProviderContext) { const registry = getService('registry'); - // Failing: See https://github.com/elastic/kibana/issues/167973 - // FLAKY: https://github.com/elastic/kibana/issues/167974 - // Failing: See https://github.com/elastic/kibana/issues/167975 - describe.skip('APM API tests', function () { + describe('APM API tests', function () { const filePattern = getGlobPattern(); const tests = globby.sync(filePattern, { cwd }); From 2f8ce938be2506b31de04837eff78764b5d7ee91 Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Fri, 6 Oct 2023 10:15:43 +0200 Subject: [PATCH 159/170] [Infra UI] Disable infra logs UI in serverless (#168011) closes https://github.com/elastic/kibana/issues/166977 ## Summary This PR creates a feature flag to disable logs UI features in serverless. _Serverless_ **Frontend routes** image `/logs/stream` image `/logs/log-categories` image `/logs/anomalies` image **Server routes** These will return 404 ``` POST kbn://api/infra/log_analysis/results/log_entry_anomalies_datasets POST kbn://api/infra/log_analysis/results/log_entry_anomalies POST kbn://api/infra/log_analysis/results/log_entry_categories POST kbn://api/infra/log_analysis/results/latest_log_entry_category_datasets_stats POST kbn://api/infra/log_analysis/results/log_entry_category_datasets POST kbn://api/infra/log_analysis/results/log_entry_category_examples POST kbn://api/infra/log_analysis/results/log_entry_examples POST kbn://api/infra/log_analysis/results/log_entry_datasets POST kbn://api/infra/log_analysis/results/log_entry_rate_indices POST kbn://api/infra/log_alerts/chart_preview_data ``` _Stateful_ image **Server routes** These will return 400 - currently there is no way to pass `version` via dev tools ``` POST kbn://api/infra/log_analysis/results/log_entry_anomalies_datasets POST kbn://api/infra/log_analysis/results/log_entry_anomalies POST kbn://api/infra/log_analysis/results/log_entry_categories POST kbn://api/infra/log_analysis/results/latest_log_entry_category_datasets_stats POST kbn://api/infra/log_analysis/results/log_entry_category_datasets POST kbn://api/infra/log_analysis/results/log_entry_category_examples POST kbn://api/infra/log_analysis/results/log_entry_examples POST kbn://api/infra/log_analysis/results/log_entry_datasets POST kbn://api/infra/log_analysis/results/log_entry_rate_indices POST kbn://api/infra/log_alerts/chart_preview_data ``` ### How to test ### How to test - Start a local es instance: `yarn es serverless --kill --clean --license trial --ssl` - Enable `infra` in the `serverless.oblt.dev.yml` file: - `xpack.infra.enabled: true` - Start a local kibana instance: `yarn serverless-oblt --ssl` - Verify the items listed above both on serverless and stateful --- .../test_suites/core_plugins/rendering.ts | 13 +- .../infra/common/plugin_config_types.ts | 3 +- .../containers/plugin_config_context.test.tsx | 3 +- x-pack/plugins/infra/public/plugin.ts | 152 +++++++++--------- .../metric_threshold_executor.test.ts | 3 +- .../infra/server/lib/sources/sources.test.ts | 3 +- x-pack/plugins/infra/server/plugin.ts | 30 ++-- .../routes/log_alerts/chart_preview_data.ts | 5 + .../results/log_entry_anomalies.ts | 3 + .../results/log_entry_anomalies_datasets.ts | 3 + .../results/log_entry_categories.ts | 3 + .../results/log_entry_category_datasets.ts | 3 + .../log_entry_category_datasets_stats.ts | 3 + .../results/log_entry_category_examples.ts | 3 + .../results/log_entry_examples.ts | 3 + .../log_analysis/validation/datasets.ts | 3 + .../routes/log_analysis/validation/indices.ts | 4 + 17 files changed, 148 insertions(+), 92 deletions(-) diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 09220cfeeacbd..441f506bd2552 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -268,15 +268,20 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.index_management.enableIndexStats (any)', 'xpack.infra.sources.default.fields.message (array)', /** - * xpack.infra.featureFlags.metricsExplorerEnabled is conditional based on traditional/serverless offering + * xpack.infra.featureFlags.customThresholdAlertsEnabled is conditional based on traditional/serverless offering * and will resolve to (boolean) */ - 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', + 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', /** - * xpack.infra.featureFlags.customThresholdAlertsEnabled is conditional based on traditional/serverless offering + * xpack.infra.featureFlags.logsUIEnabled is conditional based on traditional/serverless offering * and will resolve to (boolean) */ - 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', + 'xpack.infra.featureFlags.logsUIEnabled (any)', + /** + * xpack.infra.featureFlags.metricsExplorerEnabled is conditional based on traditional/serverless offering + * and will resolve to (boolean) + */ + 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', /** * xpack.infra.featureFlags.osqueryEnabled is conditional based on traditional/serverless offering * and will resolve to (boolean) diff --git a/x-pack/plugins/infra/common/plugin_config_types.ts b/x-pack/plugins/infra/common/plugin_config_types.ts index 17a08ab60ec94..dd915e39cdec0 100644 --- a/x-pack/plugins/infra/common/plugin_config_types.ts +++ b/x-pack/plugins/infra/common/plugin_config_types.ts @@ -26,8 +26,9 @@ export interface InfraConfig { }; }; featureFlags: { - metricsExplorerEnabled: boolean; customThresholdAlertsEnabled: boolean; + logsUIEnabled: boolean; + metricsExplorerEnabled: boolean; osqueryEnabled: boolean; }; } diff --git a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx index e3d3c3f28de11..70b3cf466f749 100644 --- a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx +++ b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx @@ -20,9 +20,10 @@ describe('usePluginConfig()', () => { it('returns the plugin config what was set through the provider', () => { const config: Partial = { featureFlags: { + customThresholdAlertsEnabled: true, + logsUIEnabled: false, metricsExplorerEnabled: false, osqueryEnabled: false, - customThresholdAlertsEnabled: true, }, }; const { result } = renderHook(() => usePluginConfig(), { diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index fe6c42ab43248..1d08484546506 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -85,18 +85,21 @@ export class Plugin implements InfraClientPluginClass { pluginsSetup.observability.observabilityRuleTypeRegistry.register( createMetricThresholdRuleType() ); - pluginsSetup.observability.dashboard.register({ - appName: 'infra_logs', - hasData: getLogsHasDataFetcher(core.getStartServices), - fetchData: getLogsOverviewDataFetcher(core.getStartServices), - }); + + if (this.config.featureFlags.logsUIEnabled) { + // fetchData `appLink` redirects to logs/stream + pluginsSetup.observability.dashboard.register({ + appName: 'infra_logs', + hasData: getLogsHasDataFetcher(core.getStartServices), + fetchData: getLogsOverviewDataFetcher(core.getStartServices), + }); + } pluginsSetup.observability.dashboard.register({ appName: 'infra_metrics', hasData: createMetricsHasData(core.getStartServices), fetchData: createMetricsFetchData(core.getStartServices), }); - pluginsSetup.logsShared.logViews.setLogViewsStaticConfig({ messageFields: this.config.sources?.default?.fields?.message, }); @@ -107,13 +110,6 @@ export class Plugin implements InfraClientPluginClass { ]); /** !! Need to be kept in sync with the deepLinks in x-pack/plugins/infra/public/plugin.ts */ - const infraEntries = [ - { label: 'Inventory', app: 'metrics', path: '/inventory' }, - ...(this.config.featureFlags.metricsExplorerEnabled - ? [{ label: 'Metrics Explorer', app: 'metrics', path: '/explorer' }] - : []), - { label: 'Hosts', isBetaFeature: true, app: 'metrics', path: '/hosts' }, - ]; pluginsSetup.observabilityShared.navigation.registerSections( startDep$AndHostViewFlag$.pipe( map( @@ -136,9 +132,13 @@ export class Plugin implements InfraClientPluginClass { path: '/', isBetaFeature: true, }, - { label: 'Stream', app: 'logs', path: '/stream' }, - { label: 'Anomalies', app: 'logs', path: '/anomalies' }, - { label: 'Categories', app: 'logs', path: '/log-categories' }, + ...(this.config.featureFlags.logsUIEnabled + ? [ + { label: 'Stream', app: 'logs', path: '/stream' }, + { label: 'Anomalies', app: 'logs', path: '/anomalies' }, + { label: 'Categories', app: 'logs', path: '/log-categories' }, + ] + : []), ], }, ] @@ -148,7 +148,13 @@ export class Plugin implements InfraClientPluginClass { { label: 'Infrastructure', sortKey: 300, - entries: infraEntries, + entries: [ + { label: 'Inventory', app: 'metrics', path: '/inventory' }, + ...(this.config.featureFlags.metricsExplorerEnabled + ? [{ label: 'Metrics Explorer', app: 'metrics', path: '/explorer' }] + : []), + { label: 'Hosts', isBetaFeature: true, app: 'metrics', path: '/hosts' }, + ], }, ] : []), @@ -172,54 +178,56 @@ export class Plugin implements InfraClientPluginClass { createLogThresholdRuleType(core, logsLocator) ); - core.application.register({ - id: 'logs', - title: i18n.translate('xpack.infra.logs.pluginTitle', { - defaultMessage: 'Logs', - }), - euiIconType: 'logoObservability', - order: 8100, - appRoute: '/app/logs', - // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/logs/page_content.tsx - deepLinks: [ - { - id: 'stream', - title: i18n.translate('xpack.infra.logs.index.streamTabTitle', { - defaultMessage: 'Stream', - }), - path: '/stream', - }, - { - id: 'anomalies', - title: i18n.translate('xpack.infra.logs.index.anomaliesTabTitle', { - defaultMessage: 'Anomalies', - }), - path: '/anomalies', - }, - { - id: 'log-categories', - title: i18n.translate('xpack.infra.logs.index.logCategoriesBetaBadgeTitle', { - defaultMessage: 'Categories', - }), - path: '/log-categories', - }, - { - id: 'settings', - title: i18n.translate('xpack.infra.logs.index.settingsTabTitle', { - defaultMessage: 'Settings', - }), - path: '/settings', + if (this.config.featureFlags.logsUIEnabled) { + core.application.register({ + id: 'logs', + title: i18n.translate('xpack.infra.logs.pluginTitle', { + defaultMessage: 'Logs', + }), + euiIconType: 'logoObservability', + order: 8100, + appRoute: '/app/logs', + // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/logs/page_content.tsx + deepLinks: [ + { + id: 'stream', + title: i18n.translate('xpack.infra.logs.index.streamTabTitle', { + defaultMessage: 'Stream', + }), + path: '/stream', + }, + { + id: 'anomalies', + title: i18n.translate('xpack.infra.logs.index.anomaliesTabTitle', { + defaultMessage: 'Anomalies', + }), + path: '/anomalies', + }, + { + id: 'log-categories', + title: i18n.translate('xpack.infra.logs.index.logCategoriesBetaBadgeTitle', { + defaultMessage: 'Categories', + }), + path: '/log-categories', + }, + { + id: 'settings', + title: i18n.translate('xpack.infra.logs.index.settingsTabTitle', { + defaultMessage: 'Settings', + }), + path: '/settings', + }, + ], + category: DEFAULT_APP_CATEGORIES.observability, + mount: async (params: AppMountParameters) => { + // mount callback should not use setup dependencies, get start dependencies instead + const [coreStart, plugins, pluginStart] = await core.getStartServices(); + + const { renderApp } = await import('./apps/logs_app'); + return renderApp(coreStart, plugins, pluginStart, params); }, - ], - category: DEFAULT_APP_CATEGORIES.observability, - mount: async (params: AppMountParameters) => { - // mount callback should not use setup dependencies, get start dependencies instead - const [coreStart, plugins, pluginStart] = await core.getStartServices(); - - const { renderApp } = await import('./apps/logs_app'); - return renderApp(coreStart, plugins, pluginStart, params); - }, - }); + }); + } // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/metrics/index.tsx const infraDeepLinks: AppDeepLink[] = [ @@ -285,14 +293,6 @@ export class Plugin implements InfraClientPluginClass { }, }); - startDep$AndHostViewFlag$.subscribe( - ([_startServices]: [[CoreStart, InfraClientStartDeps, InfraClientStartExports], boolean]) => { - this.appUpdater$.next(() => ({ - deepLinks: infraDeepLinks, - })); - } - ); - /* This exists purely to facilitate URL redirects from the old App ID ("infra"), to our new App IDs ("metrics" and "logs"). With version 8.0.0 we can remove this. */ core.application.register({ @@ -307,6 +307,14 @@ export class Plugin implements InfraClientPluginClass { }, }); + startDep$AndHostViewFlag$.subscribe( + ([_startServices]: [[CoreStart, InfraClientStartDeps, InfraClientStartExports], boolean]) => { + this.appUpdater$.next(() => ({ + deepLinks: infraDeepLinks, + })); + } + ); + // Setup telemetry events this.telemetry.setup({ analytics: core.analytics }); diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 0752c75b198c3..b3b82602f11f1 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -1899,8 +1899,9 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ compositeSize: 2000, }, featureFlags: { - metricsExplorerEnabled: true, customThresholdAlertsEnabled: false, + logsUIEnabled: true, + metricsExplorerEnabled: true, osqueryEnabled: true, }, enabled: true, diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index 53d7b8979de96..d9e3e3ee4dbac 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -126,8 +126,9 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ compositeSize: 2000, }, featureFlags: { - metricsExplorerEnabled: true, customThresholdAlertsEnabled: false, + logsUIEnabled: true, + metricsExplorerEnabled: true, osqueryEnabled: true, }, sources, diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index 4aeb0971dde8d..04a57f294303f 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -81,14 +81,18 @@ export const config: PluginConfigDescriptor = { }) ), featureFlags: schema.object({ - metricsExplorerEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), customThresholdAlertsEnabled: offeringBasedSchema({ traditional: schema.boolean({ defaultValue: false }), serverless: schema.boolean({ defaultValue: true }), }), + logsUIEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + metricsExplorerEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), osqueryEnabled: offeringBasedSchema({ traditional: schema.boolean({ defaultValue: true }), serverless: schema.boolean({ defaultValue: false }), @@ -222,14 +226,16 @@ export class InfraServerPlugin countLogs: () => UsageCollector.countLogs(), }); - plugins.home.sampleData.addAppLinksToSampleDataset('logs', [ - { - sampleObject: null, // indicates that there is no sample object associated with this app link's path - getPath: () => `/app/logs`, - label: logsSampleDataLinkLabel, - icon: 'logsApp', - }, - ]); + if (this.config.featureFlags.logsUIEnabled) { + plugins.home.sampleData.addAppLinksToSampleDataset('logs', [ + { + sampleObject: null, // indicates that there is no sample object associated with this app link's path + getPath: () => `/app/logs`, + label: logsSampleDataLinkLabel, + icon: 'logsApp', + }, + ]); + } initInfraServer(this.libs); registerRuleTypes(plugins.alerting, this.libs, plugins.ml); diff --git a/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts b/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts index 1c6be6bf56c28..05b4452dc5557 100644 --- a/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts +++ b/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts @@ -16,6 +16,11 @@ export const initGetLogAlertsChartPreviewDataRoute = ({ framework, getStartServices, }: Pick) => { + // Replace with the corresponding logs alert rule feature flag + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } + framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies.ts index e48292a12e95b..30a9aadda432a 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies.ts @@ -16,6 +16,9 @@ import { getLogEntryAnomalies } from '../../../lib/log_analysis'; import { isMlPrivilegesError } from '../../../lib/log_analysis/errors'; export const initGetLogEntryAnomaliesRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies_datasets.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies_datasets.ts index 3151c6ac82b4e..ce10ba09a059f 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies_datasets.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_anomalies_datasets.ts @@ -15,6 +15,9 @@ import { assertHasInfraMlPlugins } from '../../../utils/request_context'; import { isMlPrivilegesError } from '../../../lib/log_analysis/errors'; export const initGetLogEntryAnomaliesDatasetsRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_categories.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_categories.ts index 25994b7d14a20..f51f81a846bbb 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_categories.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_categories.ts @@ -15,6 +15,9 @@ import { assertHasInfraMlPlugins } from '../../../utils/request_context'; import { isMlPrivilegesError } from '../../../lib/log_analysis/errors'; export const initGetLogEntryCategoriesRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets.ts index ba9e389b4a48e..9ed89f1adb05b 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets.ts @@ -15,6 +15,9 @@ import { assertHasInfraMlPlugins } from '../../../utils/request_context'; import { isMlPrivilegesError } from '../../../lib/log_analysis/errors'; export const initGetLogEntryCategoryDatasetsRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets_stats.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets_stats.ts index ec8589416efb4..a3ea9356a4ac3 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets_stats.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_datasets_stats.ts @@ -15,6 +15,9 @@ import { isMlPrivilegesError } from '../../../lib/log_analysis/errors'; import { assertHasInfraMlPlugins } from '../../../utils/request_context'; export const initGetLogEntryCategoryDatasetsStatsRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_examples.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_examples.ts index 5e9a57768828c..828912143d412 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_examples.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_category_examples.ts @@ -18,6 +18,9 @@ export const initGetLogEntryCategoryExamplesRoute = ({ framework, getStartServices, }: Pick) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_examples.ts b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_examples.ts index 8b3b2f0449c58..df79783a56edc 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_examples.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/results/log_entry_examples.ts @@ -18,6 +18,9 @@ export const initGetLogEntryExamplesRoute = ({ framework, getStartServices, }: Pick) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/validation/datasets.ts b/x-pack/plugins/infra/server/routes/log_analysis/validation/datasets.ts index f76fd3a5173cf..00ad8b951edd4 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/validation/datasets.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/validation/datasets.ts @@ -17,6 +17,9 @@ export const initValidateLogAnalysisDatasetsRoute = ({ framework, logEntries, }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } framework .registerVersionedRoute({ access: 'internal', diff --git a/x-pack/plugins/infra/server/routes/log_analysis/validation/indices.ts b/x-pack/plugins/infra/server/routes/log_analysis/validation/indices.ts index 06ebd4d98b0f8..096ea2e7dd8dd 100644 --- a/x-pack/plugins/infra/server/routes/log_analysis/validation/indices.ts +++ b/x-pack/plugins/infra/server/routes/log_analysis/validation/indices.ts @@ -19,6 +19,10 @@ import { logAnalysisValidationV1 } from '../../../../common/http_api'; const escapeHatch = schema.object({}, { unknowns: 'allow' }); export const initValidateLogAnalysisIndicesRoute = ({ framework }: InfraBackendLibs) => { + if (!framework.config.featureFlags.logsUIEnabled) { + return; + } + framework .registerVersionedRoute({ access: 'internal', From 591efd4271a86b1233b75c29dba3cae5f54503dc Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Fri, 6 Oct 2023 10:16:20 +0200 Subject: [PATCH 160/170] [ftr] tagging failing on MKI suites with 'failsOnMKI' (#168122) ## Summary This PR skips the functional tests that fail on real MKI projects based on this [pipeline](https://buildkite.com/elastic/appex-qa-serverless-kibana-ftr-tests/builds/185#018affbc-5845-40cc-89ac-590a91a7f0a6) run. These test suites will continue to run on Kibana CI but we ask Teams to provide fixes and unblock it for MKI runs asap. --- .../management/index_management/create_enrich_policy.ts | 2 ++ .../observability/cases/attachment_framework.ts | 4 +++- .../test_suites/observability/cases/create_case_form.ts | 2 ++ .../test_suites/observability/cases/list_view.ts | 4 +++- .../test_suites/observability/cases/view_case.ts | 4 +++- .../functional/test_suites/observability/infra/index.ts | 2 ++ .../observability/ml/anomaly_detection_jobs_list.ts | 4 +++- .../functional/test_suites/observability/ml/index.ts | 3 +++ .../functional/test_suites/search/empty_page.ts | 2 ++ .../test_suites/security/ftr/cases/configure.ts | 4 ++++ .../test_suites/security/ftr/cases/list_view.ts | 8 +++++++- 11 files changed, 34 insertions(+), 5 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/management/index_management/create_enrich_policy.ts b/x-pack/test_serverless/functional/test_suites/common/management/index_management/create_enrich_policy.ts index f5b51c815e0fe..b3e248ea82de4 100644 --- a/x-pack/test_serverless/functional/test_suites/common/management/index_management/create_enrich_policy.ts +++ b/x-pack/test_serverless/functional/test_suites/common/management/index_management/create_enrich_policy.ts @@ -20,6 +20,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const POLICY_NAME = `policy-${Math.random()}`; describe('Create enrich policy', function () { + // TimeoutError: Waiting for element to be located By(css selector, [data-test-subj="enrichPoliciesEmptyPromptCreateButton"]) + this.tags(['failsOnMKI']); before(async () => { log.debug('Creating test index'); try { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts index bfd2b8700d785..cafe2d867241d 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts @@ -20,7 +20,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const cases = getService('cases'); const find = getService('find'); - describe('Cases persistable attachments', () => { + describe('Cases persistable attachments', function () { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] + this.tags(['failsOnMKI']); describe('lens visualization', () => { before(async () => { await svlCommonPage.login(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts index e89e2b799dc30..e0166ac9de2df 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts @@ -16,6 +16,8 @@ const owner = OBSERVABILITY_OWNER; export default ({ getService, getPageObject }: FtrProviderContext) => { describe('Create Case', function () { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] + this.tags(['failsOnMKI']); const find = getService('find'); const cases = getService('cases'); const testSubjects = getService('testSubjects'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts index 61cbd55f04b66..30fd021e5c6f5 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts @@ -18,7 +18,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCommonPage = getPageObject('svlCommonPage'); const svlObltNavigation = getService('svlObltNavigation'); - describe('Cases list', () => { + describe('Cases list', function () { + // multiple errors in after hook due to delete permission + this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); await svlObltNavigation.navigateToLandingPage(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts index 24234d4a40e52..ac0fb6fec9d5f 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts @@ -29,7 +29,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCommonNavigation = getPageObject('svlCommonNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); - describe('Case View', () => { + describe('Case View', function () { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] + this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts b/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts index c7096467f71bc..80eb2f7a32a53 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/infra/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Observability Infra', function () { + // TimeoutError: Waiting for element to be located By(css selector, [data-test-subj="infrastructure-alerts-and-rules"]) + this.tags(['failsOnMKI']); loadTestFile(require.resolve('./header_menu')); }); } diff --git a/x-pack/test_serverless/functional/test_suites/observability/ml/anomaly_detection_jobs_list.ts b/x-pack/test_serverless/functional/test_suites/observability/ml/anomaly_detection_jobs_list.ts index 10f203889e1ea..05382e03f78d0 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/ml/anomaly_detection_jobs_list.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/ml/anomaly_detection_jobs_list.ts @@ -13,7 +13,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['svlCommonPage']); const adJobId = 'fq_single_permission'; - describe('Anomaly detection jobs list', () => { + describe('Anomaly detection jobs list', function () { + // Error: Failed to delete all indices with pattern [.ml-*] + this.tags(['failsOnMKI']); before(async () => { await PageObjects.svlCommonPage.login(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/ml/index.ts b/x-pack/test_serverless/functional/test_suites/observability/ml/index.ts index e50d10b5ce6fd..ba88fce593abf 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/ml/index.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/ml/index.ts @@ -9,6 +9,9 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Observability ML', function () { + // Error: Failed to delete all indices with pattern [.ml-*] + // Error: First result should be Machine Learning (got matching items 'undefined') + this.tags(['failsOnMKI']); loadTestFile(require.resolve('./anomaly_detection_jobs_list')); loadTestFile(require.resolve('./search_bar_features')); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts index e3e82c0b0d97b..0f3be7d382f90 100644 --- a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts +++ b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts @@ -14,6 +14,8 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const svlCommonPage = getPageObject('svlCommonPage'); describe('empty pages', function () { + // Error: expected testSubject(kbnOverviewElasticsearchGettingStarted) to exist + this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); await svlSearchNavigation.navigateToLandingPage(); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts index ca9e9ab6219e7..6eb306d43ad00 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts @@ -18,6 +18,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const retry = getService('retry'); describe('Configure Case', function () { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] + this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); @@ -34,6 +36,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('Closure options', function () { + // Error: Expected the radio group value to equal "close-by-pushing" (got "close-by-user") + this.tags(['failsOnMKI']); it('defaults the closure option correctly', async () => { await cases.common.assertRadioGroupValue('closure-options-radio-group', 'close-by-user'); }); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts index e3d1d8408beff..045d56b9c5dd8 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts @@ -17,7 +17,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlSecNavigation = getService('svlSecNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); - describe('Cases List', () => { + describe('Cases List', function () { + // multiple errors in after hook due to delete permission + this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); @@ -47,6 +49,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('bulk actions', () => { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] + // action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] describe('delete', () => { createNCasesBeforeDeleteAllAfter(8, getPageObject, getService); @@ -148,6 +152,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('severity filtering', () => { + // Error: retry.tryForTime timeout: Error: expected 10 to equal 5 before(async () => { await testSubjects.click('solutionSideNavItemLink-cases'); @@ -196,6 +201,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('pagination', () => { + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] createNCasesBeforeDeleteAllAfter(12, getPageObject, getService); it('paginates cases correctly', async () => { From 866edd206dac9be24b74d3903f4249f049c80333 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Fri, 6 Oct 2023 10:35:23 +0200 Subject: [PATCH 161/170] [O11y AI Ass] Consolidate system message & recall for insights (#168007) --- .../error_sample_contextual_insight.tsx | 8 -- .../components/log_rate_analysis.tsx | 8 -- .../tabs/processes/process_row.tsx | 8 -- .../log_entry_flyout/log_entry_flyout.tsx | 14 --- .../public/components/insight/insight.tsx | 113 ++++++++++++++---- .../public/hooks/use_conversation.ts | 22 +++- .../public/hooks/use_timeline.test.ts | 2 + .../public/hooks/use_timeline.ts | 113 ++++++++++-------- .../public/service/create_chat_service.ts | 3 + .../service/get_assistant_setup_message.ts | 4 +- .../public/types.ts | 1 + .../public/utils/storybook_decorator.tsx | 1 + .../server/routes/chat/route.ts | 16 +-- .../frame_information_ai_assistant.tsx | 8 -- 14 files changed, 183 insertions(+), 138 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx index 806ca0e59684b..bf50eec3afb96 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx @@ -40,14 +40,6 @@ export function ErrorSampleContextualInsight({ const transactionName = transaction?.transaction.name ?? ''; return [ - { - '@timestamp': now, - message: { - role: MessageRole.System, - content: `You are apm-gpt, a helpful assistant for performance analysis, optimisation and - root cause analysis of software. Answer as concisely as possible.`, - }, - }, { '@timestamp': now, message: { diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx index 8ffb0cc87a1d9..440e10b83df38 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx @@ -233,14 +233,6 @@ export const LogRateAnalysis: FC = ({ r const now = new Date().toISOString(); return [ - { - '@timestamp': now, - message: { - role: MessageRole.System, - content: `You are logs-gpt, a helpful assistant for logs-based observability. Answer as - concisely as possible.`, - }, - }, { '@timestamp': now, message: { diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx index 12f6eb066a697..1ec925d9ce148 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx @@ -45,14 +45,6 @@ export const ContextualInsightProcessRow = ({ command }: { command: string }) => } const now = new Date().toISOString(); return [ - { - '@timestamp': now, - message: { - role: MessageRole.System, - content: `You are infra-gpt, a helpful assistant for metrics-based infrastructure observability. Answer as - concisely as possible.`, - }, - }, { '@timestamp': now, message: { diff --git a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx index 5d0c6123d4dca..2573ef02aaf01 100644 --- a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx +++ b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx @@ -39,12 +39,6 @@ import { DataSearchProgress } from '../../data_search_progress'; import { LogEntryActionsMenu } from './log_entry_actions_menu'; import { LogEntryFieldsTable } from './log_entry_fields_table'; -const LOGS_SYSTEM_MESSAGE = { - content: `You are logs-gpt, a helpful assistant for logs-based observability. Answer as - concisely as possible.`, - role: MessageRole.System, -}; - export interface LogEntryFlyoutProps { logEntryId: string | null | undefined; onCloseFlyout: () => void; @@ -144,10 +138,6 @@ export const LogEntryFlyout = ({ const now = new Date().toISOString(); return [ - { - '@timestamp': now, - message: LOGS_SYSTEM_MESSAGE, - }, { '@timestamp': now, message: { @@ -170,10 +160,6 @@ export const LogEntryFlyout = ({ const message = logEntry.fields.find((field) => field.field === 'message')?.value[0]; return [ - { - '@timestamp': now, - message: LOGS_SYSTEM_MESSAGE, - }, { '@timestamp': now, message: { diff --git a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx index 2b56523d1e879..a48d53c942055 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx @@ -4,11 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { last } from 'lodash'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { AbortError } from '@kbn/kibana-utils-plugin/common'; -import type { Subscription } from 'rxjs'; +import { isObservable, Subscription } from 'rxjs'; import { MessageRole, type Message } from '../../../common/types'; import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; import { useKibana } from '../../hooks/use_kibana'; @@ -41,6 +41,9 @@ function ChatContent({ const chatService = useObservabilityAIAssistantChatService(); const [pendingMessage, setPendingMessage] = useState(); + + const [recalledMessages, setRecalledMessages] = useState(undefined); + const [loading, setLoading] = useState(false); const [subscription, setSubscription] = useState(); @@ -56,37 +59,101 @@ function ChatContent({ const conversationTitle = conversationId ? conversation.value?.conversation.title || '' : defaultTitle; - const reloadReply = useCallback(() => { + + const controllerRef = useRef(new AbortController()); + + const reloadRecalledMessages = useCallback(async () => { setLoading(true); + setDisplayedMessages(initialMessages); + + setRecalledMessages(undefined); + + controllerRef.current.abort(); + + const controller = (controllerRef.current = new AbortController()); + + let appendedMessages: Message[] = []; + + if (chatService.hasFunction('recall')) { + try { + // manually execute recall function and append to list of + // messages + const functionCall = { + name: 'recall', + args: JSON.stringify({ queries: [], contexts: [] }), + }; + + const response = await chatService.executeFunction({ + ...functionCall, + messages: initialMessages, + signal: controller.signal, + connectorId, + }); + + if (isObservable(response)) { + throw new Error('Recall function unexpectedly returned an Observable'); + } + + appendedMessages = [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.Assistant, + content: '', + function_call: { + name: functionCall.name, + arguments: functionCall.args, + trigger: MessageRole.User as const, + }, + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + name: functionCall.name, + content: JSON.stringify(response.content), + }, + }, + ]; + + setRecalledMessages(appendedMessages); + } catch (err) { + // eslint-disable-next-line no-console + console.error(err); + setRecalledMessages([]); + } + } + }, [chatService, connectorId, initialMessages, setDisplayedMessages]); + + useEffect(() => { let lastPendingMessage: PendingMessage | undefined; + if (recalledMessages === undefined) { + // don't do anything, it's loading + return; + } + const nextSubscription = chatService - .chat({ messages: initialMessages, connectorId, function: 'none' }) + .chat({ messages: displayedMessages.concat(recalledMessages), connectorId, function: 'none' }) .subscribe({ next: (msg) => { lastPendingMessage = msg; setPendingMessage(() => msg); }, complete: () => { - setDisplayedMessages((prevMessages) => - prevMessages.concat({ - '@timestamp': new Date().toISOString(), - message: { - ...lastPendingMessage!.message, - }, - }) - ); + setPendingMessage(lastPendingMessage); setLoading(false); }, }); setSubscription(nextSubscription); - }, [initialMessages, setDisplayedMessages, connectorId, chatService]); + }, [chatService, connectorId, displayedMessages, setDisplayedMessages, recalledMessages]); useEffect(() => { - reloadReply(); - }, [reloadReply]); + reloadRecalledMessages(); + }, [reloadRecalledMessages]); useEffect(() => { setDisplayedMessages(initialMessages); @@ -96,23 +163,25 @@ function ChatContent({ const messagesWithPending = useMemo(() => { return pendingMessage - ? displayedMessages.concat({ + ? displayedMessages.concat(recalledMessages || []).concat({ '@timestamp': new Date().toISOString(), message: { ...pendingMessage.message, }, }) - : displayedMessages; - }, [pendingMessage, displayedMessages]); + : displayedMessages.concat(recalledMessages || []); + }, [pendingMessage, displayedMessages, recalledMessages]); - const lastMessage = last(messagesWithPending); + const lastAssistantMessage = last( + messagesWithPending.filter((message) => message.message.role === MessageRole.Assistant) + ); return ( <> {}} /> @@ -147,7 +216,7 @@ function ChatContent({ { - reloadReply(); + reloadRecalledMessages(); }} /> @@ -168,7 +237,7 @@ function ChatContent({ onClose={() => { setIsOpen(() => false); }} - messages={displayedMessages} + messages={messagesWithPending} conversationId={conversationId} startedFrom="contextualInsight" onChatComplete={(nextMessages) => { diff --git a/x-pack/plugins/observability_ai_assistant/public/hooks/use_conversation.ts b/x-pack/plugins/observability_ai_assistant/public/hooks/use_conversation.ts index fc65f04c4d116..965a8b899879a 100644 --- a/x-pack/plugins/observability_ai_assistant/public/hooks/use_conversation.ts +++ b/x-pack/plugins/observability_ai_assistant/public/hooks/use_conversation.ts @@ -6,9 +6,10 @@ */ import { i18n } from '@kbn/i18n'; import { merge, omit } from 'lodash'; -import { Dispatch, SetStateAction, useState } from 'react'; +import { Dispatch, SetStateAction, useMemo, useState } from 'react'; import { type Conversation, type Message } from '../../common'; -import type { ConversationCreateRequest } from '../../common/types'; +import { ConversationCreateRequest, MessageRole } from '../../common/types'; +import { getAssistantSetupMessage } from '../service/get_assistant_setup_message'; import { ObservabilityAIAssistantChatService } from '../types'; import { useAbortableAsync, type AbortableAsyncState } from './use_abortable_async'; import { useKibana } from './use_kibana'; @@ -21,7 +22,7 @@ export function useConversation({ connectorId, }: { conversationId?: string; - chatService?: ObservabilityAIAssistantChatService; + chatService?: ObservabilityAIAssistantChatService; // will eventually resolve to a non-nullish value connectorId: string | undefined; }): { conversation: AbortableAsyncState; @@ -41,6 +42,19 @@ export function useConversation({ const [displayedMessages, setDisplayedMessages] = useState([]); + const displayedMessagesWithHardcodedSystemMessage = useMemo(() => { + if (!chatService) { + return displayedMessages; + } + const systemMessage = getAssistantSetupMessage({ contexts: chatService?.getContexts() || [] }); + + if (displayedMessages[0]?.message.role === MessageRole.User) { + return [systemMessage, ...displayedMessages]; + } + + return [systemMessage, ...displayedMessages.slice(1)]; + }, [displayedMessages, chatService]); + const conversation: AbortableAsyncState = useAbortableAsync( ({ signal }) => { @@ -71,7 +85,7 @@ export function useConversation({ return { conversation, - displayedMessages, + displayedMessages: displayedMessagesWithHardcodedSystemMessage, setDisplayedMessages, save: (messages: Message[], handleRefreshConversations?: () => void) => { const conversationObject = conversation.value!; diff --git a/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.test.ts b/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.test.ts index ded7b4b382285..299164e6f52e6 100644 --- a/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.test.ts +++ b/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.test.ts @@ -171,6 +171,8 @@ describe('useTimeline', () => { return subject; }), executeFunction: jest.fn(), + hasFunction: jest.fn(), + hasRenderFunction: jest.fn(), }, onChatUpdate: jest.fn().mockImplementation((messages) => { props = { ...props, messages }; diff --git a/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.ts b/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.ts index ed6a5a6d2b481..93f1cec5d6c14 100644 --- a/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.ts +++ b/x-pack/plugins/observability_ai_assistant/public/hooks/use_timeline.ts @@ -5,13 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import { AbortError } from '@kbn/kibana-utils-plugin/common'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; import { last } from 'lodash'; import { useEffect, useMemo, useRef, useState } from 'react'; -import { isObservable, Observable, Subscription } from 'rxjs'; import usePrevious from 'react-use/lib/usePrevious'; -import { i18n } from '@kbn/i18n'; +import { isObservable, Observable, Subscription } from 'rxjs'; import { ContextDefinition, MessageRole, @@ -20,8 +20,8 @@ import { } from '../../common/types'; import type { ChatPromptEditorProps } from '../components/chat/chat_prompt_editor'; import type { ChatTimelineProps } from '../components/chat/chat_timeline'; +import { ChatActionClickType } from '../components/chat/types'; import { EMPTY_CONVERSATION_TITLE } from '../i18n'; -import { getAssistantSetupMessage } from '../service/get_assistant_setup_message'; import type { ObservabilityAIAssistantChatService, PendingMessage } from '../types'; import { getTimelineItemsfromConversation, @@ -29,7 +29,6 @@ import { } from '../utils/get_timeline_items_from_conversation'; import type { UseGenAIConnectorsResult } from './use_genai_connectors'; import { useKibana } from './use_kibana'; -import { ChatActionClickType } from '../components/chat/types'; export function createNewConversation({ contexts, @@ -38,7 +37,7 @@ export function createNewConversation({ }): ConversationCreateRequest { return { '@timestamp': new Date().toISOString(), - messages: [getAssistantSetupMessage({ contexts })], + messages: [], conversation: { title: EMPTY_CONVERSATION_TITLE, }, @@ -114,55 +113,71 @@ export function useTimeline({ ): Promise { const controller = new AbortController(); - return new Promise((resolve, reject) => { - if (!connectorId) { - reject(new Error('Can not add a message without a connector')); - return; - } + return new Promise(async (resolve, reject) => { + try { + if (!connectorId) { + reject(new Error('Can not add a message without a connector')); + return; + } - onChatUpdate(nextMessages); + const isStartOfConversation = + nextMessages.some((message) => message.message.role === MessageRole.Assistant) === false; - const lastMessage = last(nextMessages); + if (isStartOfConversation && chatService.hasFunction('recall')) { + nextMessages = nextMessages.concat({ + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.Assistant, + content: '', + function_call: { + name: 'recall', + arguments: JSON.stringify({ queries: [], contexts: [] }), + trigger: MessageRole.User, + }, + }, + }); + } - if (lastMessage?.message.function_call?.name) { - // the user has edited a function suggestion, no need to talk to - resolve(undefined); - return; - } + onChatUpdate(nextMessages); + const lastMessage = last(nextMessages); + if (lastMessage?.message.function_call?.name) { + // the user has edited a function suggestion, no need to talk to the LLM + resolve(undefined); + return; + } - response$ = - response$ || - chatService!.chat({ - messages: nextMessages, - connectorId, + response$ = + response$ || + chatService!.chat({ + messages: nextMessages, + connectorId, + }); + let pendingMessageLocal = pendingMessage; + const nextSubscription = response$.subscribe({ + next: (nextPendingMessage) => { + pendingMessageLocal = nextPendingMessage; + setPendingMessage(() => nextPendingMessage); + }, + error: reject, + complete: () => { + const error = pendingMessageLocal?.error; + if (error) { + notifications.toasts.addError(error, { + title: i18n.translate('xpack.observabilityAiAssistant.failedToLoadResponse', { + defaultMessage: 'Failed to load response from the AI Assistant', + }), + }); + } + resolve(pendingMessageLocal!); + }, }); - - let pendingMessageLocal = pendingMessage; - - const nextSubscription = response$.subscribe({ - next: (nextPendingMessage) => { - pendingMessageLocal = nextPendingMessage; - setPendingMessage(() => nextPendingMessage); - }, - error: reject, - complete: () => { - const error = pendingMessageLocal?.error; - - if (error) { - notifications.toasts.addError(error, { - title: i18n.translate('xpack.observabilityAiAssistant.failedToLoadResponse', { - defaultMessage: 'Failed to load response from the AI Assistant', - }), - }); - } - resolve(pendingMessageLocal!); - }, - }); - - setSubscription(() => { - controllerRef.current = controller; - return nextSubscription; - }); + setSubscription(() => { + controllerRef.current = controller; + return nextSubscription; + }); + } catch (error) { + reject(error); + } }).then(async (reply) => { if (reply?.error) { return nextMessages; diff --git a/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts b/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts index 269e81101d8aa..8dc61e6d48449 100644 --- a/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts +++ b/x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.ts @@ -145,6 +145,9 @@ export async function createChatService({ }, getContexts, getFunctions, + hasFunction: (name: string) => { + return !!getFunctions().find((fn) => fn.options.name === name); + }, hasRenderFunction: (name: string) => { return !!getFunctions().find((fn) => fn.options.name === name)?.render; }, diff --git a/x-pack/plugins/observability_ai_assistant/public/service/get_assistant_setup_message.ts b/x-pack/plugins/observability_ai_assistant/public/service/get_assistant_setup_message.ts index 4f52dfb9b9733..c7e865606aaf0 100644 --- a/x-pack/plugins/observability_ai_assistant/public/service/get_assistant_setup_message.ts +++ b/x-pack/plugins/observability_ai_assistant/public/service/get_assistant_setup_message.ts @@ -7,9 +7,9 @@ import { without } from 'lodash'; import { MessageRole } from '../../common'; -import { ContextDefinition } from '../../common/types'; +import type { ContextDefinition, Message } from '../../common/types'; -export function getAssistantSetupMessage({ contexts }: { contexts: ContextDefinition[] }) { +export function getAssistantSetupMessage({ contexts }: { contexts: ContextDefinition[] }): Message { const coreContext = contexts.find((context) => context.name === 'core')!; const otherContexts = without(contexts.concat(), coreContext); diff --git a/x-pack/plugins/observability_ai_assistant/public/types.ts b/x-pack/plugins/observability_ai_assistant/public/types.ts index 5e985f5ae5f97..99853b7b313b7 100644 --- a/x-pack/plugins/observability_ai_assistant/public/types.ts +++ b/x-pack/plugins/observability_ai_assistant/public/types.ts @@ -59,6 +59,7 @@ export interface ObservabilityAIAssistantChatService { }) => Observable; getContexts: () => ContextDefinition[]; getFunctions: (options?: { contexts?: string[]; filter?: string }) => FunctionDefinition[]; + hasFunction: (name: string) => boolean; hasRenderFunction: (name: string) => boolean; executeFunction: ({}: { name: string; diff --git a/x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx b/x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx index 3c4dc569ab5e5..68dd784a1f8aa 100644 --- a/x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx @@ -34,6 +34,7 @@ const chatService: ObservabilityAIAssistantChatService = { renderFunction: (name: string, args: string | undefined, response: {}) => (
    Hello! {name}
    ), + hasFunction: () => true, hasRenderFunction: () => true, }; diff --git a/x-pack/plugins/observability_ai_assistant/server/routes/chat/route.ts b/x-pack/plugins/observability_ai_assistant/server/routes/chat/route.ts index a250a9e8e0915..19ebdcbaedc95 100644 --- a/x-pack/plugins/observability_ai_assistant/server/routes/chat/route.ts +++ b/x-pack/plugins/observability_ai_assistant/server/routes/chat/route.ts @@ -9,7 +9,6 @@ import { IncomingMessage } from 'http'; import * as t from 'io-ts'; import { toBooleanRt } from '@kbn/io-ts-utils'; import type { CreateChatCompletionResponse } from 'openai'; -import { MessageRole } from '../../../common'; import { createObservabilityAIAssistantServerRoute } from '../create_observability_ai_assistant_server_route'; import { messageRt } from '../runtime_types'; @@ -49,25 +48,12 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ } const { - body: { messages, connectorId, functions, functionCall: givenFunctionCall }, + body: { messages, connectorId, functions, functionCall }, query = { stream: true }, } = params; const stream = query.stream; - let functionCall = givenFunctionCall; - - if (!functionCall) { - const isStartOfConversation = - messages.some((message) => message.message.role === MessageRole.Assistant) === false; - - const isRecallFunctionAvailable = functions.some((fn) => fn.name === 'recall') === true; - - const willUseRecall = isStartOfConversation && isRecallFunctionAvailable; - - functionCall = willUseRecall ? 'recall' : undefined; - } - return client.chat({ messages, connectorId, diff --git a/x-pack/plugins/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx b/x-pack/plugins/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx index 01f27ef54e72f..9175115432f81 100644 --- a/x-pack/plugins/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx +++ b/x-pack/plugins/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx @@ -30,14 +30,6 @@ export function FrameInformationAIAssistant({ frame }: Props) { const now = new Date().toISOString(); return [ - { - '@timestamp': now, - message: { - role: MessageRole.System, - content: `You are perf-gpt, a helpful assistant for performance analysis and optimisation - of software. Answer as concisely as possible.`, - }, - }, { '@timestamp': now, message: { From c828ff49dbf7f4e8ef28adf832ab40bd495ea2db Mon Sep 17 00:00:00 2001 From: Marco Vettorello Date: Fri, 6 Oct 2023 11:21:41 +0200 Subject: [PATCH 162/170] [Lens] Fixes color mappings special tockens i18n (#168152) ## Summary fix https://github.com/elastic/kibana/issues/168151 To test: - create a cartesian charts with breakdowns that contains both the `Other` group and an `(empty)` value - apply a manual color mapping that use both these terms by select them from the combo-box, not by typing them. - Then change the Kibana language to a different one other than English and see if the color mapping applies correctly. --------- Co-authored-by: Stratoula Kalafateli --- .../color_mapping/color/rule_matching.ts | 15 +++++++++++++-- .../plugins/translations/translations/fr-FR.json | 2 ++ .../plugins/translations/translations/ja-JP.json | 2 ++ .../plugins/translations/translations/zh-CN.json | 2 ++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts b/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts index 7557644154a52..0d844ca26e27e 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts +++ b/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { i18n } from '@kbn/i18n'; import { ColorMapping } from '../config'; export function ruleMatch( @@ -41,6 +42,16 @@ export function rangeMatch(rule: ColorMapping.RuleRange, value: number) { // TODO: move in some data/table related package export const SPECIAL_TOKENS_STRING_CONVERTION = new Map([ - ['__other__', 'Other'], - ['', '(empty)'], + [ + '__other__', + i18n.translate('coloring.colorMapping.terms.otherBucketLabel', { + defaultMessage: 'Other', + }), + ], + [ + '', + i18n.translate('coloring.colorMapping.terms.emptyLabel', { + defaultMessage: '(empty)', + }), + ], ]); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f3514ba7fbb65..c1f3af869cb78 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -229,6 +229,8 @@ "coloring.dynamicColoring.rangeType.label": "Type de valeur", "coloring.dynamicColoring.rangeType.number": "Numéro", "coloring.dynamicColoring.rangeType.percent": "Pourcent", + "coloring.colorMapping.terms.otherBucketLabel": "Autre", + "coloring.colorMapping.terms.emptyLabel": "(vide)", "console.helpPage.learnAboutConsoleAndQueryDslText": "En savoir plus sur {console} et {queryDsl}", "console.historyPage.itemOfRequestListAriaLabel": "Requête : {historyItem}", "console.settingsPage.refreshInterval.everyNMinutesTimeInterval": "Toutes les {value} {value, plural, one {minute} many {minutes} other {minutes}}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index d078f535b6c99..18492c43f4216 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -229,6 +229,8 @@ "coloring.dynamicColoring.rangeType.label": "値型", "coloring.dynamicColoring.rangeType.number": "数字", "coloring.dynamicColoring.rangeType.percent": "割合(%)", + "coloring.colorMapping.terms.otherBucketLabel":"その他", + "coloring.colorMapping.terms.emptyLabel": "(空)", "console.helpPage.learnAboutConsoleAndQueryDslText": "{console}と{queryDsl}についてさらに詳しく", "console.historyPage.itemOfRequestListAriaLabel": "リクエスト:{historyItem}", "console.settingsPage.refreshInterval.everyNMinutesTimeInterval": "{value}{value, plural, other {分}}毎", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 3b8006085b1da..296b107b99e5c 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -229,6 +229,8 @@ "coloring.dynamicColoring.rangeType.label": "值类型", "coloring.dynamicColoring.rangeType.number": "数字", "coloring.dynamicColoring.rangeType.percent": "百分比", + "coloring.colorMapping.terms.otherBucketLabel":"其他", + "coloring.colorMapping.terms.emptyLabel": "(空)", "console.helpPage.learnAboutConsoleAndQueryDslText": "了解 {console} 和 {queryDsl}", "console.historyPage.itemOfRequestListAriaLabel": "请求:{historyItem}", "console.settingsPage.refreshInterval.everyNMinutesTimeInterval": "每 {value} {value, plural, other {分钟}}", From 447d3101cc691c3b81a1c8bc4e12e73b8d294264 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Fri, 6 Oct 2023 12:46:41 +0200 Subject: [PATCH 163/170] [Synthetics] Update package to 1.1.0 in tests (#168188) --- .../apis/synthetics/services/private_location_test_service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/synthetics/services/private_location_test_service.ts b/x-pack/test/api_integration/apis/synthetics/services/private_location_test_service.ts index 60ee844e11ab8..046d5098e6a5b 100644 --- a/x-pack/test/api_integration/apis/synthetics/services/private_location_test_service.ts +++ b/x-pack/test/api_integration/apis/synthetics/services/private_location_test_service.ts @@ -10,7 +10,7 @@ import { privateLocationsSavedObjectId } from '@kbn/synthetics-plugin/server/sav import { FtrProviderContext } from '../../../ftr_provider_context'; import { KibanaSupertestProvider } from '../../../../../../test/api_integration/services/supertest'; -export const INSTALLED_VERSION = '1.0.7'; +export const INSTALLED_VERSION = '1.1.0'; export class PrivateLocationTestService { private supertest: ReturnType; From 01fdd674891132ea9f3cac14e92b9933d3cbe53a Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:50:28 +0100 Subject: [PATCH 164/170] [Security Solution][Detection Engine] hides 'run query' label on ES|QL rule creation (#167912) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - hides **Run query ⌘ + Enter** label on ES|QL text editor when create/edit rule - On unified search side, passes property `hideTextBasedRunQueryLabel` to underlying `TextBasedLangEditor` component ### Before Screenshot 2023-10-03 at 17 16 09 ### After Screenshot 2023-10-03 at 17 16 45 --------- Co-authored-by: Stratoula Kalafateli --- .../src/text_based_languages_editor.tsx | 1 + .../query_bar_top_row.test.tsx | 35 +++++++++++++++++++ .../query_string_input/query_bar_top_row.tsx | 2 ++ .../public/search_bar/search_bar.tsx | 2 ++ .../common/components/query_bar/index.tsx | 1 + 5 files changed, 41 insertions(+) diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index f8dd803265523..312d08cadf0c2 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -731,6 +731,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ onErrorClick={onErrorClick} refreshErrors={onTextLangQuerySubmit} detectTimestamp={detectTimestamp} + hideRunQueryText={hideRunQueryText} /> )}
    diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx index 0303bc05570bf..2e2e5d3a20dae 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx @@ -346,6 +346,41 @@ describe('QueryBarTopRowTopRow', () => { `); }); + it('should render query input bar with hideRunQueryText when configured', () => { + const component = mount( + wrapQueryBarTopRowInContext({ + query: sqlQuery, + isDirty: false, + screenTitle: 'SQL Screen', + timeHistory: mockTimeHistory, + indexPatterns: [stubIndexPattern], + showDatePicker: true, + dateRangeFrom: 'now-7d', + dateRangeTo: 'now', + hideTextBasedRunQueryLabel: true, + }) + ); + + expect(component.find(TEXT_BASED_EDITOR).prop('hideRunQueryText')).toBe(true); + }); + + it('should render query input bar with hideRunQueryText as undefined if not configured', () => { + const component = mount( + wrapQueryBarTopRowInContext({ + query: sqlQuery, + isDirty: false, + screenTitle: 'SQL Screen', + timeHistory: mockTimeHistory, + indexPatterns: [stubIndexPattern], + showDatePicker: true, + dateRangeFrom: 'now-7d', + dateRangeTo: 'now', + }) + ); + + expect(component.find(TEXT_BASED_EDITOR).prop('hideRunQueryText')).toBe(undefined); + }); + it('Should render custom data view picker', () => { const dataViewPickerOverride =
    ; const { getByTestId } = render( diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index 35a5770dfff41..bd0ffc12565a0 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -145,6 +145,7 @@ export interface QueryBarTopRowProps dataViewPickerComponentProps?: DataViewPickerProps; textBasedLanguageModeErrors?: Error[]; textBasedLanguageModeWarning?: string; + hideTextBasedRunQueryLabel?: boolean; onTextBasedSavedAndExit?: ({ onSave }: OnSaveTextLanguageQueryProps) => void; filterBar?: React.ReactNode; showDatePickerAsBadge?: boolean; @@ -664,6 +665,7 @@ export const QueryBarTopRow = React.memo( }) } isDisabled={props.isDisabled} + hideRunQueryText={props.hideTextBasedRunQueryLabel} data-test-subj="unifiedTextLangEditor" /> ) diff --git a/src/plugins/unified_search/public/search_bar/search_bar.tsx b/src/plugins/unified_search/public/search_bar/search_bar.tsx index eb843ee0517ac..0372775922120 100644 --- a/src/plugins/unified_search/public/search_bar/search_bar.tsx +++ b/src/plugins/unified_search/public/search_bar/search_bar.tsx @@ -105,6 +105,7 @@ export interface SearchBarOwnProps { dataViewPickerComponentProps?: DataViewPickerProps; textBasedLanguageModeErrors?: Error[]; textBasedLanguageModeWarning?: string; + hideTextBasedRunQueryLabel?: boolean; onTextBasedSavedAndExit?: ({ onSave }: OnSaveTextLanguageQueryProps) => void; showSubmitButton?: boolean; submitButtonStyle?: QueryBarTopRowProps['submitButtonStyle']; @@ -599,6 +600,7 @@ class SearchBarUI extends C dataViewPickerComponentProps={this.props.dataViewPickerComponentProps} textBasedLanguageModeErrors={this.props.textBasedLanguageModeErrors} textBasedLanguageModeWarning={this.props.textBasedLanguageModeWarning} + hideTextBasedRunQueryLabel={this.props.hideTextBasedRunQueryLabel} onTextBasedSavedAndExit={this.props.onTextBasedSavedAndExit} showDatePickerAsBadge={this.shouldShowDatePickerAsBadge()} filterBar={filterBar} diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx index 08818172bca5a..fe21d973c86b8 100644 --- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx @@ -167,6 +167,7 @@ export const QueryBar = memo( savedQuery={savedQuery} displayStyle={displayStyle} isDisabled={isDisabled} + hideTextBasedRunQueryLabel /> ); } From 4ebe45d77ee46c2b502c87aee0f89b73f0d3e40f Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:59:41 +0100 Subject: [PATCH 165/170] [Security Solution][Detection Engine] fixes ES|QL ECS multifiefields issue (#167769) ## Summary - fixes https://github.com/elastic/security-team/issues/7741 by replacing `ecsMap` from hardcoded `@kbn/rule-registry-plugin` to actual mapping for alerts indices from `@kbn/alerts-as-data-utils` - when converting ES|QL row table results to object, `null` values skipped, since its results consists of all existing mappings in searched indices, if fields in query are not filtered ### Checklist Delete any items that are not applicable to this PR. - [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 --- .../detection_engine/rule_types/esql/esql.ts | 2 +- .../esql/utils/row_to_document.test.ts | 1 - .../rule_types/esql/utils/row_to_document.ts | 6 +- .../utils/strip_non_ecs_fields.test.ts | 21 +++ .../factories/utils/strip_non_ecs_fields.ts | 2 +- .../rule_execution_logic/esql.ts | 163 +++++++++++++++++- .../ecs_compliant/mappings.json | 39 +++++ .../ecs_non_compliant/mappings.json | 22 +++ 8 files changed, 246 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts index 0de78a4887e68..73a9cbe6b93a9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/esql.ts @@ -100,7 +100,7 @@ export const esqlExecutor = async ({ }); const esqlSearchDuration = makeFloatString(performance.now() - esqlSignalSearchStart); - result.searchAfterTimes = [esqlSearchDuration]; + result.searchAfterTimes.push(esqlSearchDuration); ruleExecutionLogger.debug(`ES|QL query request took: ${esqlSearchDuration}ms`); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.test.ts index cfe59dafa2ed4..7b52018a5e490 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.test.ts @@ -19,7 +19,6 @@ describe('rowToDocument', () => { const row = ['abcd', null, '8.8.1', 'packetbeat']; expect(rowToDocument(columns, row)).toEqual({ _id: 'abcd', - 'agent.name': null, 'agent.version': '8.8.1', 'agent.type': 'packetbeat', }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.ts index 6049f3892fa9e..976c403205200 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/utils/row_to_document.ts @@ -18,8 +18,10 @@ export const rowToDocument = ( row: EsqlResultRow ): Record => { return columns.reduce>((acc, column, i) => { - acc[column.name] = row[i]; - + // skips nulls, as ES|QL return null for each existing mapping field + if (row[i] !== null) { + acc[column.name] = row[i]; + } return acc; }, {}); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts index 9c10a317ee17c..21f9adc96bd60 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts @@ -71,6 +71,27 @@ describe('stripNonEcsFields', () => { ]); }); + // https://github.com/elastic/sdh-security-team/issues/736 + describe('fields that exists in the alerts mapping but not in local ECS(ruleRegistry) definition', () => { + it('should strip object type "device" field if it is supplied as a keyword', () => { + const { result, removed } = stripNonEcsFields({ + device: 'test', + message: 'test message', + }); + + expect(result).toEqual({ + message: 'test message', + }); + + expect(removed).toEqual([ + { + key: 'device', + value: 'test', + }, + ]); + }); + }); + describe('array fields', () => { it('should not strip arrays of objects when an object is expected', () => { const { result, removed } = stripNonEcsFields({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts index 95261a185526b..86a3dc4ff6c1f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ecsFieldMap } from '@kbn/rule-registry-plugin/common/assets/field_maps/ecs_field_map'; +import { ecsFieldMap } from '@kbn/alerts-as-data-utils'; import { isPlainObject, cloneDeep, isArray } from 'lodash'; diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/esql.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/esql.ts index 055d2304ce367..daac0f6c17ddd 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/esql.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/esql.ts @@ -116,9 +116,6 @@ export default ({ getService }: FtrProviderContext) => { 'kibana.space_ids': ['default'], 'kibana.alert.rule.tags': [], 'agent.name': 'test-1', - 'agent.type': null, - 'agent.version': null, - 'host.name': null, id, 'event.kind': 'signal', 'kibana.alert.original_time': expect.any(String), @@ -155,8 +152,6 @@ export default ({ getService }: FtrProviderContext) => { 'kibana.alert.workflow_tags': [], 'kibana.alert.rule.risk_score': 55, 'kibana.alert.rule.severity': 'high', - 'kibana.alert.original_event.created': null, - 'kibana.alert.original_event.ingested': null, }); }); @@ -829,5 +824,163 @@ export default ({ getService }: FtrProviderContext) => { expect(previewAlerts[0]._source).toHaveProperty('host.risk.calculated_score_norm', 1); }); }); + + describe('ECS fields validation', () => { + it('creates alert if ECS field has multifields', async () => { + const id = uuidv4(); + const interval: [string, string] = ['2020-10-28T06:00:00.000Z', '2020-10-28T06:10:00.000Z']; + const doc1 = { agent: { name: 'test-1' }, 'observer.os.full': 'full test os' }; + const doc2 = { agent: { name: 'test-2' } }; + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant [metadata _id] ${internalIdPipe( + id + )} | where agent.name=="test-1"`, + from: 'now-1h', + interval: '1h', + }; + + await indexEnhancedDocuments({ + documents: [doc1, doc2], + interval, + id, + }); + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 10, + }); + + expect(previewAlerts.length).toBe(1); + expect(previewAlerts[0]._source).toHaveProperty(['observer.os.full'], 'full test os'); + // *.text is multifield define in mappings for observer.os.full + expect(previewAlerts[0]._source).not.toHaveProperty(['observer.os.full.text']); + }); + // https://github.com/elastic/security-team/issues/7741 + it('creates alert if ECS field has multifields and is not in ruleRegistry ECS map', async () => { + const id = uuidv4(); + const interval: [string, string] = ['2020-10-28T06:00:00.000Z', '2020-10-28T06:10:00.000Z']; + const doc1 = { + agent: { name: 'test-1' }, + // this field is mapped in alerts index, but not in ruleRegistry ECS map + 'process.entry_leader.name': 'test_process_name', + }; + const doc2 = { agent: { name: 'test-2' } }; + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_compliant [metadata _id] ${internalIdPipe( + id + )} | where agent.name=="test-1"`, + from: 'now-1h', + interval: '1h', + }; + + await indexEnhancedDocuments({ + documents: [doc1, doc2], + interval, + id, + }); + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 10, + }); + + expect(previewAlerts.length).toBe(1); + expect(previewAlerts[0]._source).toHaveProperty( + ['process.entry_leader.name'], + 'test_process_name' + ); + expect(previewAlerts[0]._source).not.toHaveProperty(['process.entry_leader.name.text']); + expect(previewAlerts[0]._source).not.toHaveProperty(['process.entry_leader.name.caseless']); + }); + + describe('non-ecs', () => { + before(async () => { + await esArchiver.load( + 'x-pack/test/functional/es_archives/security_solution/ecs_non_compliant' + ); + }); + + after(async () => { + await esArchiver.unload( + 'x-pack/test/functional/es_archives/security_solution/ecs_non_compliant' + ); + }); + + const { indexEnhancedDocuments: indexEnhancedDocumentsToNonEcs } = dataGeneratorFactory({ + es, + index: 'ecs_non_compliant', + log, + }); + + it('creates alert if non ECS field has multifields', async () => { + const id = uuidv4(); + const interval: [string, string] = [ + '2020-10-28T06:00:00.000Z', + '2020-10-28T06:10:00.000Z', + ]; + const doc1 = { + 'random.entry_leader.name': 'random non-ecs field', + }; + + const rule: EsqlRuleCreateProps = { + ...getCreateEsqlRulesSchemaMock('rule-1', true), + query: `from ecs_non_compliant [metadata _id] ${internalIdPipe(id)}`, + from: 'now-1h', + interval: '1h', + }; + + await indexEnhancedDocumentsToNonEcs({ + documents: [doc1], + interval, + id, + }); + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 10, + }); + + expect(previewAlerts.length).toBe(1); + // all multifields have been indexed, which is expected, seen we don't know original mappings + expect(previewAlerts[0]._source).toHaveProperty( + ['random.entry_leader.name'], + 'random non-ecs field' + ); + expect(previewAlerts[0]._source).toHaveProperty( + ['random.entry_leader.name.text'], + 'random non-ecs field' + ); + expect(previewAlerts[0]._source).toHaveProperty( + ['random.entry_leader.name.caseless'], + 'random non-ecs field' + ); + }); + }); + }); }); }; diff --git a/x-pack/test/functional/es_archives/security_solution/ecs_compliant/mappings.json b/x-pack/test/functional/es_archives/security_solution/ecs_compliant/mappings.json index c1d61b21fd295..897ac651fcb43 100644 --- a/x-pack/test/functional/es_archives/security_solution/ecs_compliant/mappings.json +++ b/x-pack/test/functional/es_archives/security_solution/ecs_compliant/mappings.json @@ -23,6 +23,45 @@ } } }, + "observer": { + "properties": { + "os": { + "properties": { + "full": { + "type": "keyword", + "ignore_above": 1024, + "fields": { + "text": { + "type": "match_only_text" + } + } + } + } + } + } + }, + "process": { + "properties": { + "entry_leader": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024, + "fields": { + "text": { + "type": "match_only_text" + }, + "caseless": { + "type": "keyword", + "ignore_above": 1024, + "normalizer": "lowercase" + } + } + } + } + } + } + }, "host": { "properties": { "name": { diff --git a/x-pack/test/functional/es_archives/security_solution/ecs_non_compliant/mappings.json b/x-pack/test/functional/es_archives/security_solution/ecs_non_compliant/mappings.json index 40408d65b6d89..ea4f271af0ffc 100644 --- a/x-pack/test/functional/es_archives/security_solution/ecs_non_compliant/mappings.json +++ b/x-pack/test/functional/es_archives/security_solution/ecs_non_compliant/mappings.json @@ -73,6 +73,28 @@ "type": "text" } } + }, + "random": { + "properties": { + "entry_leader": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024, + "fields": { + "text": { + "type": "match_only_text" + }, + "caseless": { + "type": "keyword", + "ignore_above": 1024, + "normalizer": "lowercase" + } + } + } + } + } + } } } }, From baff0eb32c894eed537bb563068c9743e98e2412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Fri, 6 Oct 2023 13:44:52 +0200 Subject: [PATCH 166/170] Fix some unhandledRejections (#168009) --- dev_docs/tutorials/testing_plugins.mdx | 5 +- .../event_loop_delays/track_delays.ts | 27 +++-- .../event_loop_delays/track_threshold.ts | 2 +- .../public/embeddable/links_embeddable.tsx | 10 +- src/plugins/telemetry/public/plugin.ts | 48 ++++---- x-pack/plugins/aiops/server/plugin.ts | 2 +- .../authorization/authorization_service.tsx | 29 +++-- .../session_management_service.ts | 22 ++-- .../synthetics_service/synthetics_service.ts | 114 ++++++++++-------- .../server/ephemeral_task_lifecycle.ts | 2 +- 10 files changed, 147 insertions(+), 114 deletions(-) diff --git a/dev_docs/tutorials/testing_plugins.mdx b/dev_docs/tutorials/testing_plugins.mdx index 84e43310e46c8..e4a1d3e12aeb7 100644 --- a/dev_docs/tutorials/testing_plugins.mdx +++ b/dev_docs/tutorials/testing_plugins.mdx @@ -479,6 +479,7 @@ The more interesting logic is in `renderApp`: /** public/application.ts */ import React from 'react'; import ReactDOM from 'react-dom'; +import { switchMap } from 'rxjs'; import { AppMountParameters, CoreStart } from 'src/core/public'; import { AppRoot } from './components/app_root'; @@ -493,10 +494,10 @@ export const renderApp = ( // uiSettings subscription const uiSettingsClient = core.uiSettings.client; - const pollingSubscription = uiSettingClient.get$('mysetting1').subscribe(async mySetting1 => { + const pollingSubscription = uiSettingClient.get$('mysetting1').pipe(switchMap(async (mySetting1) => { const value = core.http.fetch(/** use `mySetting1` in request **/); // ... - }); + })).subscribe(); // Render app ReactDOM.render( diff --git a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_delays.ts b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_delays.ts index 2910c8343c811..6516565c8fa5a 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_delays.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_delays.ts @@ -7,7 +7,7 @@ */ import { takeUntil, finalize, map } from 'rxjs/operators'; -import { Observable, timer } from 'rxjs'; +import { Observable, timer, switchMap } from 'rxjs'; import type { ISavedObjectsRepository } from '@kbn/core/server'; import type { IEventLoopDelaysMonitor, IntervalHistogram } from '@kbn/core/server'; import { @@ -46,17 +46,18 @@ export function startTrackingEventLoopDelaysUsage( .pipe( map((i) => (i + 1) % resetOnCount === 0), takeUntil(stopMonitoringEventLoop$), - finalize(() => eventLoopDelaysMonitor.stop()) + finalize(() => eventLoopDelaysMonitor.stop()), + switchMap(async (shouldReset) => { + const histogram = eventLoopDelaysMonitor.collect(); + if (shouldReset) { + eventLoopDelaysMonitor.reset(); + } + try { + await storeHistogram(histogram, internalRepository, instanceUuid); + } catch (e) { + // do not crash if cannot store a histogram. + } + }) ) - .subscribe(async (shouldReset) => { - const histogram = eventLoopDelaysMonitor.collect(); - if (shouldReset) { - eventLoopDelaysMonitor.reset(); - } - try { - await storeHistogram(histogram, internalRepository, instanceUuid); - } catch (e) { - // do not crash if cannot store a histogram. - } - }); + .subscribe(); } diff --git a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_threshold.ts b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_threshold.ts index 9d650bdc4fc18..dbfc670ffdbbd 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_threshold.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/event_loop_delays/track_threshold.ts @@ -45,7 +45,7 @@ export function startTrackingEventLoopDelaysThreshold( takeUntil(stopMonitoringEventLoop$), finalize(() => eventLoopDelaysMonitor.stop()) ) - .subscribe(async () => { + .subscribe(() => { const { mean: meanMS } = eventLoopDelaysMonitor.collect(); if (meanMS > warnThreshold) { diff --git a/src/plugins/links/public/embeddable/links_embeddable.tsx b/src/plugins/links/public/embeddable/links_embeddable.tsx index 863bda323c39b..a29df393dd54b 100644 --- a/src/plugins/links/public/embeddable/links_embeddable.tsx +++ b/src/plugins/links/public/embeddable/links_embeddable.tsx @@ -7,7 +7,7 @@ */ import React, { createContext, useContext } from 'react'; -import { Subscription, distinctUntilChanged, skip } from 'rxjs'; +import { Subscription, distinctUntilChanged, skip, switchMap } from 'rxjs'; import deepEqual from 'fast-deep-equal'; import { @@ -104,8 +104,12 @@ export class LinksEmbeddable // By-value panels should update the componentState when input changes this.subscriptions.add( this.getInput$() - .pipe(distinctUntilChanged(deepEqual), skip(1)) - .subscribe(async () => await this.initializeSavedLinks()) + .pipe( + distinctUntilChanged(deepEqual), + skip(1), + switchMap(async () => await this.initializeSavedLinks()) + ) + .subscribe() ); } diff --git a/src/plugins/telemetry/public/plugin.ts b/src/plugins/telemetry/public/plugin.ts index 6300a56486169..59ff2d3478c1d 100644 --- a/src/plugins/telemetry/public/plugin.ts +++ b/src/plugins/telemetry/public/plugin.ts @@ -24,7 +24,7 @@ import type { import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import { ElasticV3BrowserShipper } from '@kbn/analytics-shippers-elastic-v3-browser'; -import { BehaviorSubject, map, tap } from 'rxjs'; +import { BehaviorSubject, map, switchMap, tap } from 'rxjs'; import type { TelemetryConfigLabels } from '../server/config'; import { FetchTelemetryConfigRoute, INTERNAL_VERSION } from '../common/routes'; import type { v2 } from '../common/types'; @@ -246,26 +246,32 @@ export class TelemetryPlugin }); this.telemetryNotifications = telemetryNotifications; - application.currentAppId$.subscribe(async () => { - // Refresh and get telemetry config - const updatedConfig = await this.refreshConfig(http); - - analytics.optIn({ - global: { enabled: this.telemetryService!.isOptedIn && !screenshotMode.isScreenshotMode() }, - }); - - const isUnauthenticated = this.getIsUnauthenticated(http); - if (isUnauthenticated) { - return; - } - - const telemetryBanner = updatedConfig?.banner; - - this.maybeStartTelemetryPoller(); - if (telemetryBanner) { - this.maybeShowOptedInNotificationBanner(); - } - }); + application.currentAppId$ + .pipe( + switchMap(async () => { + // Refresh and get telemetry config + const updatedConfig = await this.refreshConfig(http); + + analytics.optIn({ + global: { + enabled: this.telemetryService!.isOptedIn && !screenshotMode.isScreenshotMode(), + }, + }); + + const isUnauthenticated = this.getIsUnauthenticated(http); + if (isUnauthenticated) { + return; + } + + const telemetryBanner = updatedConfig?.banner; + + this.maybeStartTelemetryPoller(); + if (telemetryBanner) { + this.maybeShowOptedInNotificationBanner(); + } + }) + ) + .subscribe(); return { telemetryService: this.getTelemetryServicePublicApis(), diff --git a/x-pack/plugins/aiops/server/plugin.ts b/x-pack/plugins/aiops/server/plugin.ts index 9eb613d7e3524..5cb23cb6ce57d 100755 --- a/x-pack/plugins/aiops/server/plugin.ts +++ b/x-pack/plugins/aiops/server/plugin.ts @@ -46,7 +46,7 @@ export class AiopsPlugin // This way we can pass on license changes to the route factory having always // the current license because it's stored in a mutable attribute. const aiopsLicense: AiopsLicense = { isActivePlatinumLicense: false }; - this.licenseSubscription = plugins.licensing.license$.subscribe(async (license) => { + this.licenseSubscription = plugins.licensing.license$.subscribe((license) => { aiopsLicense.isActivePlatinumLicense = isActiveLicense('platinum', license); if (aiopsLicense.isActivePlatinumLicense) { diff --git a/x-pack/plugins/security/server/authorization/authorization_service.tsx b/x-pack/plugins/security/server/authorization/authorization_service.tsx index 6e0fda1fa3d8e..a2b32a0a6b13e 100644 --- a/x-pack/plugins/security/server/authorization/authorization_service.tsx +++ b/x-pack/plugins/security/server/authorization/authorization_service.tsx @@ -9,6 +9,7 @@ import querystring from 'querystring'; import React from 'react'; import { renderToString } from 'react-dom/server'; import type { Observable, Subscription } from 'rxjs'; +import { switchMap } from 'rxjs'; import type { CapabilitiesSetup, @@ -209,18 +210,22 @@ export class AuthorizationService { validateFeaturePrivileges(allFeatures); validateReservedPrivileges(allFeatures); - this.statusSubscription = online$.subscribe(async ({ scheduleRetry }) => { - try { - await registerPrivilegesWithCluster( - this.logger, - this.privileges, - this.applicationName, - clusterClient - ); - } catch (err) { - scheduleRetry(); - } - }); + this.statusSubscription = online$ + .pipe( + switchMap(async ({ scheduleRetry }) => { + try { + await registerPrivilegesWithCluster( + this.logger, + this.privileges, + this.applicationName, + clusterClient + ); + } catch (err) { + scheduleRetry(); + } + }) + ) + .subscribe(); } stop() { diff --git a/x-pack/plugins/security/server/session_management/session_management_service.ts b/x-pack/plugins/security/server/session_management/session_management_service.ts index 10395999f502b..4c3298f69bca2 100644 --- a/x-pack/plugins/security/server/session_management/session_management_service.ts +++ b/x-pack/plugins/security/server/session_management/session_management_service.ts @@ -6,6 +6,7 @@ */ import type { Observable, Subscription } from 'rxjs'; +import { switchMap } from 'rxjs'; import type { ElasticsearchClient, HttpServiceSetup, Logger } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; @@ -90,13 +91,20 @@ export class SessionManagementService { auditLogger: audit.withoutRequest, }); - this.statusSubscription = online$.subscribe(async ({ scheduleRetry }) => { - try { - await Promise.all([this.sessionIndex.initialize(), this.scheduleCleanupTask(taskManager)]); - } catch (err) { - scheduleRetry(); - } - }); + this.statusSubscription = online$ + .pipe( + switchMap(async ({ scheduleRetry }) => { + try { + await Promise.all([ + this.sessionIndex.initialize(), + this.scheduleCleanupTask(taskManager), + ]); + } catch (err) { + scheduleRetry(); + } + }) + ) + .subscribe(); return { session: new Session({ diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts index 561a0e5a90e4c..da0434201eaa2 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts @@ -14,7 +14,7 @@ import { TaskManagerSetupContract, TaskManagerStartContract, } from '@kbn/task-manager-plugin/server'; -import { Subject } from 'rxjs'; +import { concatMap, Subject } from 'rxjs'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import pMap from 'p-map'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; @@ -377,45 +377,49 @@ export class SyntheticsService { let output: ServiceData['output'] | null = null; - subject.subscribe(async (monitors) => { - try { - if (monitors.length === 0 || !this.config.manifestUrl) { - return; - } + subject + .pipe( + concatMap(async (monitors) => { + try { + if (monitors.length === 0 || !this.config.manifestUrl) { + return; + } - if (!output) { - output = await this.getOutput(); + if (!output) { + output = await this.getOutput(); + + if (!output) { + sendErrorTelemetryEvents(service.logger, service.server.telemetry, { + reason: 'API key is not valid.', + message: 'Failed to push configs. API key is not valid.', + type: 'invalidApiKey', + stackVersion: service.server.stackVersion, + }); + return; + } + } - if (!output) { + this.logger.debug(`${monitors.length} monitors will be pushed to synthetics service.`); + + service.syncErrors = await this.apiClient.syncMonitors({ + monitors, + output, + license, + }); + } catch (e) { sendErrorTelemetryEvents(service.logger, service.server.telemetry, { - reason: 'API key is not valid.', - message: 'Failed to push configs. API key is not valid.', - type: 'invalidApiKey', + reason: 'Failed to push configs to service', + message: e?.message, + type: 'pushConfigsError', + code: e?.code, + status: e.status, stackVersion: service.server.stackVersion, }); - return; + this.logger.error(e); } - } - - this.logger.debug(`${monitors.length} monitors will be pushed to synthetics service.`); - - service.syncErrors = await this.apiClient.syncMonitors({ - monitors, - output, - license, - }); - } catch (e) { - sendErrorTelemetryEvents(service.logger, service.server.telemetry, { - reason: 'Failed to push configs to service', - message: e?.message, - type: 'pushConfigsError', - code: e?.code, - status: e.status, - stackVersion: service.server.stackVersion, - }); - this.logger.error(e); - } - }); + }) + ) + .subscribe(); await this.getMonitorConfigs(subject); } @@ -479,25 +483,29 @@ export class SyntheticsService { const license = await this.getLicense(); const subject = new Subject(); - subject.subscribe(async (monitors) => { - const hasPublicLocations = monitors.some((config) => - config.locations.some(({ isServiceManaged }) => isServiceManaged) - ); - - if (hasPublicLocations) { - const output = await this.getOutput(); - if (!output) { - return; - } - - const data = { - output, - monitors, - license, - }; - return await this.apiClient.delete(data); - } - }); + subject + .pipe( + concatMap(async (monitors) => { + const hasPublicLocations = monitors.some((config) => + config.locations.some(({ isServiceManaged }) => isServiceManaged) + ); + + if (hasPublicLocations) { + const output = await this.getOutput(); + if (!output) { + return; + } + + const data = { + output, + monitors, + license, + }; + return await this.apiClient.delete(data); + } + }) + ) + .subscribe(); await this.getMonitorConfigs(subject); } diff --git a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.ts b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.ts index 16d8cd796809d..e5ca18f39c0b4 100644 --- a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.ts +++ b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.ts @@ -85,7 +85,7 @@ export class EphemeralTaskLifecycle { ); }) ) - .subscribe(async (e) => { + .subscribe((e) => { let overallCapacity = this.getCapacity(); const capacityByType = new Map(); const tasksWithinCapacity = [...this.ephemeralTaskQueue] From 000b70c000ec1c8ce9d2ccda6faf60247116a263 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Fri, 6 Oct 2023 14:01:19 +0200 Subject: [PATCH 167/170] [Infra UI] Fix process charts after refactoring (#168159) Closes #168156 ## Summary This PR fixes process charts error: ![image](https://github.com/elastic/kibana/assets/14139027/4d907c77-07a3-40da-96fd-2340bce2efc8) I assume that after the merge of the refactoring PR, those files were recreated by another PR or most likely when `main` was merged to [the refactoring PR](https://github.com/elastic/kibana/pull/166965) with them as resolved conflicts. Deleting the files again fixed the issue. ## Testing I found the issue on serverless but it probably can be reproduced on on-prem as well On Serverless: - Start a local es instance: `yarn es serverless --kill --clean --license trial --ssl` - Enable infra in the `serverless.oblt.dev.yml` file: - `xpack.infra.enabled: true` - Start a local kibana instance: `yarn serverless-oblt --ssl` and see if the side nav contains the Infrastructure item - Navigate to https://0.0.0.0:5601/ftw/app/hosts and open Asset details flyout or page - Click on the process tab and expand one of the processes - The charts (CPU and Memory) should be visible --- .../tabs/processes/processes.tsx | 6 +- .../inventory_view/hooks/use_process_list.ts | 79 ------------------- .../hooks/use_process_list_row_chart.ts | 55 ------------- 3 files changed, 1 insertion(+), 139 deletions(-) delete mode 100644 x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list.ts delete mode 100644 x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list_row_chart.ts diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx index 52bad6238c103..973ff681ab570 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx @@ -23,11 +23,7 @@ import { parseSearchString } from './parse_search_string'; import { ProcessesTable } from './processes_table'; import { STATE_NAMES } from './states'; import { SummaryTable } from './summary_table'; -import { - SortBy, - useProcessList, - ProcessListContextProvider, -} from '../../../../pages/metrics/inventory_view/hooks/use_process_list'; +import { SortBy, useProcessList, ProcessListContextProvider } from '../../hooks/use_process_list'; import { getFieldByType } from '../../../../../common/inventory_models'; import { useAssetDetailsRenderPropsContext } from '../../hooks/use_asset_details_render_props'; import { useDateRangeProviderContext } from '../../hooks/use_date_range'; diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list.ts deleted file mode 100644 index 532195ba32cc0..0000000000000 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import createContainter from 'constate'; -import { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; -import { pipe } from 'fp-ts/lib/pipeable'; -import { useEffect } from 'react'; -import { ProcessListAPIResponse, ProcessListAPIResponseRT } from '../../../../../common/http_api'; -import { throwErrors, createPlainError } from '../../../../../common/runtime_types'; -import { useHTTPRequest } from '../../../../hooks/use_http_request'; -import { useSourceContext } from '../../../../containers/metrics_source'; - -export interface SortBy { - name: string; - isAscending: boolean; -} - -export function useProcessList( - hostTerm: Record, - to: number, - sortBy: SortBy, - searchFilter: object -) { - const { createDerivedIndexPattern } = useSourceContext(); - const indexPattern = createDerivedIndexPattern().title; - - const decodeResponse = (response: any) => { - return pipe( - ProcessListAPIResponseRT.decode(response), - fold(throwErrors(createPlainError), identity) - ); - }; - - const parsedSortBy = - sortBy.name === 'runtimeLength' - ? { - ...sortBy, - name: 'startTime', - } - : sortBy; - - const { error, loading, response, makeRequest } = useHTTPRequest( - '/api/metrics/process_list', - 'POST', - JSON.stringify({ - hostTerm, - indexPattern, - to, - sortBy: parsedSortBy, - searchFilter, - }), - decodeResponse - ); - - useEffect(() => { - makeRequest(); - }, [makeRequest]); - - return { - error: (error && error.message) || null, - loading, - response, - makeRequest, - }; -} - -function useProcessListParams(props: { hostTerm: Record; to: number }) { - const { hostTerm, to } = props; - const { createDerivedIndexPattern } = useSourceContext(); - const indexPattern = createDerivedIndexPattern().title; - return { hostTerm, indexPattern, to }; -} -const ProcessListContext = createContainter(useProcessListParams); -export const [ProcessListContextProvider, useProcessListContext] = ProcessListContext; diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list_row_chart.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list_row_chart.ts deleted file mode 100644 index 0d718ffbe210c..0000000000000 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_process_list_row_chart.ts +++ /dev/null @@ -1,55 +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 { fold } from 'fp-ts/lib/Either'; -import { identity } from 'fp-ts/lib/function'; -import { pipe } from 'fp-ts/lib/pipeable'; -import { useEffect, useState } from 'react'; -import { - ProcessListAPIChartResponse, - ProcessListAPIChartResponseRT, -} from '../../../../../common/http_api'; -import { throwErrors, createPlainError } from '../../../../../common/runtime_types'; -import { useHTTPRequest } from '../../../../hooks/use_http_request'; -import { useProcessListContext } from './use_process_list'; - -export function useProcessListRowChart(command: string) { - const [inErrorState, setInErrorState] = useState(false); - const decodeResponse = (response: any) => { - return pipe( - ProcessListAPIChartResponseRT.decode(response), - fold(throwErrors(createPlainError), identity) - ); - }; - const { hostTerm, indexPattern, to } = useProcessListContext(); - - const { error, loading, response, makeRequest } = useHTTPRequest( - '/api/metrics/process_list/chart', - 'POST', - JSON.stringify({ - hostTerm, - indexPattern, - to, - command, - }), - decodeResponse - ); - - useEffect(() => setInErrorState(true), [error]); - useEffect(() => setInErrorState(false), [loading]); - - useEffect(() => { - makeRequest(); - }, [makeRequest]); - - return { - error: inErrorState, - loading, - response, - makeRequest, - }; -} From 932d5d78a15d6578a629dfcb7841002e547e4aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Fri, 6 Oct 2023 14:41:59 +0200 Subject: [PATCH 168/170] [APM] Catch cleanup errors in API tests (#168184) --- .../tests/alerts/anomaly_alert.spec.ts | 10 +++++++--- .../tests/alerts/error_count_threshold.spec.ts | 8 ++++++-- .../tests/alerts/transaction_duration.spec.ts | 16 ++++++++++++---- .../tests/alerts/transaction_error_rate.spec.ts | 16 ++++++++++++---- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/x-pack/test/apm_api_integration/tests/alerts/anomaly_alert.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/anomaly_alert.spec.ts index 0925e5c9e3e6a..c08503baa37f9 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/anomaly_alert.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/anomaly_alert.spec.ts @@ -17,10 +17,10 @@ import { waitForRuleStatus } from './helpers/wait_for_rule_status'; export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); - const supertest = getService('supertest'); const ml = getService('ml'); const es = getService('es'); + const logger = getService('log'); const synthtraceEsClient = getService('synthtraceEsClient'); // FLAKY https://github.com/elastic/kibana/issues/160298 @@ -68,8 +68,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await synthtraceEsClient.clean(); - await deleteRuleById({ supertest, ruleId }); + try { + await synthtraceEsClient.clean(); + await deleteRuleById({ supertest, ruleId }); + } catch (e) { + logger.info('Could not delete rule by id', e); + } }); describe('with ml jobs', () => { diff --git a/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts index e9519a0122203..c0a78d9a20a32 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/error_count_threshold.spec.ts @@ -289,8 +289,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteRuleById({ supertest, ruleId }); - await deleteAlertsByRuleId({ es, ruleId }); + try { + await deleteRuleById({ supertest, ruleId }); + await deleteAlertsByRuleId({ es, ruleId }); + } catch (e) { + logger.info('Could not delete rule', e); + } }); it('produces one alert for the opbeans-php service', async () => { diff --git a/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts index cf4b713aa9586..6e909c65e400e 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/transaction_duration.spec.ts @@ -77,8 +77,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await synthtraceEsClient.clean(); - await clearKibanaApmEventLog(es); + try { + await synthtraceEsClient.clean(); + await clearKibanaApmEventLog(es); + } catch (e) { + logger.info('Could not clear apm event log', e); + } }); describe('create rule for opbeans-java without kql filter', () => { @@ -229,8 +233,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteAlertsByRuleId({ es, ruleId }); - await deleteRuleById({ supertest, ruleId }); + try { + await deleteAlertsByRuleId({ es, ruleId }); + await deleteRuleById({ supertest, ruleId }); + } catch (e) { + logger.info('Could not delete rule or action connector', e); + } }); it('checks if rule is active', async () => { diff --git a/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts b/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts index 394db386c80e7..e42e06a10f2b7 100644 --- a/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts +++ b/x-pack/test/apm_api_integration/tests/alerts/transaction_error_rate.spec.ts @@ -76,8 +76,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await synthtraceEsClient.clean(); - await clearKibanaApmEventLog(es); + try { + await synthtraceEsClient.clean(); + await clearKibanaApmEventLog(es); + } catch (e) { + logger.info('Could not clean up apm event log', e); + } }); describe('create rule without kql query', () => { @@ -250,8 +254,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); after(async () => { - await deleteRuleById({ supertest, ruleId }); - await deleteAlertsByRuleId({ es, ruleId }); + try { + await deleteRuleById({ supertest, ruleId }); + await deleteAlertsByRuleId({ es, ruleId }); + } catch (e) { + logger.info('Could not delete rule', e); + } }); it('indexes alert document with all group-by fields', async () => { From 7bb722862bc791fa9e9239a8910e6880a9b8b4c3 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 6 Oct 2023 13:49:24 +0100 Subject: [PATCH 169/170] chore(NA): use a n2-8-spot instance to build storybooks on prs as well (#168154) This PR makes sure we use the more capable machine to build storybooks on PRs as well. --- .buildkite/pipelines/pull_request/storybooks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipelines/pull_request/storybooks.yml b/.buildkite/pipelines/pull_request/storybooks.yml index b62ba60563176..81d13b628e049 100644 --- a/.buildkite/pipelines/pull_request/storybooks.yml +++ b/.buildkite/pipelines/pull_request/storybooks.yml @@ -2,6 +2,6 @@ steps: - command: .buildkite/scripts/steps/storybooks/build_and_upload.sh label: 'Build Storybooks' agents: - queue: n2-4-spot + queue: n2-8-spot key: storybooks timeout_in_minutes: 60 From ca6127ee022a7c7a607d1b6d3e8c57527356710d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Fri, 6 Oct 2023 13:58:21 +0100 Subject: [PATCH 170/170] [Profiling] API test fix (#167168) closes https://github.com/elastic/kibana/issues/167076 --- .../profiling_api_integration/tests/has_setup.spec.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts b/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts index 583cc02908025..1c415f2240361 100644 --- a/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts +++ b/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts @@ -11,7 +11,7 @@ import { ProfilingStatus } from '@kbn/profiling-utils'; import { getBettertest } from '../common/bettertest'; import { FtrProviderContext } from '../common/ftr_provider_context'; import { deletePackagePolicy, getProfilingPackagePolicyIds } from '../utils/fleet'; -import { loadProfilingData, setupProfiling } from '../utils/profiling_data'; +import { cleanUpProfilingData, loadProfilingData, setupProfiling } from '../utils/profiling_data'; const profilingRoutePaths = getRoutePaths(); @@ -23,9 +23,11 @@ export default function featureControlsTests({ getService }: FtrProviderContext) const logger = getService('log'); const es = getService('es'); - // Failing: See https://github.com/elastic/kibana/issues/167076 - registry.when.skip('Profiling status check', { config: 'cloud' }, () => { + registry.when('Profiling status check', { config: 'cloud' }, () => { describe('Profiling is not set up and no data is loaded', () => { + before(async () => { + await cleanUpProfilingData({ es, logger, bettertest }); + }); describe('Admin user', () => { let statusCheck: ProfilingStatus; before(async () => {